1. Cadence
Cadence (益華電腦) 的作業平台支援資訊在其官方網頁:
http://www.cadence.com/support/computing/Pages/default.aspx
而目前支援平台資訊在此:
http://www.cadence.com/support/computing/Documents/Cadence_Platform_Support_Plan.pdf
從官方網頁裡可以看到,Cadence 自 2005 起即開始支援紅帽 Linux 作業系統,而且
慢慢取消針對其它平台如 Sun SPARC 之支援。因此未來 Linux 作業系統將是 Cadence
的主要作業系統平台之一,其版本主要是 RHEL 5/6/7。
2. Synopsys
Synopsys (新思科技) 的作業平台支援資訊在其官方網頁:
http://www.synopsys.com/Support/LI/SupportPlatform/Pages/PlatformsRoadmap.aspx
從官方網頁裡亦可以看到,Synopsys 的主要作業系統平台是 Linux,其版本主要是
RHEL 5/6/7。
3. Mentor graphics
Mentor graphics (明導國際) 的作業系統平台支援資訊在其官方網頁:
https://supportnet.mentor.com/systemreqs.html
從官方網頁裡亦可以看到,Mentor Graphics 的主要作業系統平台是 Linux,其版本
主要是 RHEL 5/6/7。
小結:
為了提供一個完整的 EDA 操作環境,因此我們需要佈建以 Linux 為主的作業系統平台,
並在其中安裝各種 EDA 工具,以提供 IC 設計人員一個統一的環境。
** 所謂「統一」的意思是所有工作在 Linux 上完成即可,不需要在 Linux/Windows
間切換。
工作目錄安排:
/opt/EDA -> 已安裝之 IC 設計工具
/opt/EDA_tools -> 原始檔
/opt/EDA_tools/virtuoso -> Virtuoso EDA 工具
/opt/EDA_tools/synopsys -> Synopsys EDA 工具
/opt/EDA_tools/mentor_graphics -> Mentor Graphics EDA 工具
2016年2月29日 星期一
License Server 設定
EDA 工具所採用的防盜機制是一種叫作 License 認證的機制,其作用原理是全台灣學術界總共有 5 台 License Server,如底下所示:
License Server name
(host_name) license server IP 地區
----------- ----------------- ------------------------------------------
lsntu 140.112.20.58 台北市,新北市,基隆市,宜蘭縣,花蓮縣
----------- ----------------- ------------------------------------------
lsncu 140.115.71.66 桃園縣
----------- ----------------- ------------------------------------------
lsnctu 140.113.202.151 新竹縣市,苗栗縣,澎湖縣,金馬縣,連江縣
----------- ----------------- ------------------------------------------
lsnchu 140.120.90.46 台中市,南投縣,雲林縣,彰化縣
----------- ----------------- ------------------------------------------
lsncku 140.116.49.24 嘉義縣市,台南市,高雄市,屏東縣,台東縣
當啟動 EDA 工具的時候,EDA 工具會線上執行 License 驗證,簡單來講就是向 License Server 取得一把鑰匙,如果此時有多餘的軟體鑰匙可以使用的話,那麼 License Server 會分配一把鑰匙給使用者,當使用者退出 EDA 工具時,會將 License Server 的鑰匙還回,以便再提供給下一個使用。
因為 EDA 工具的防盜機制是採線上認證,因此要注意底下事項:
1. 安裝 EDA 工具之伺服器必須有實體 IP,以提供給 License Server 進行驗證。
2. 所使用的 IP 必須至 CIC 網站登錄,以提供 License 驗證。
3. 網路要通
4. 要設定相對應的 port
5. 要寫好 .bashrc 的路徑設定
設定 License Server
請參考 installation_guide_cadence.txt 來建立 License Server 清單,在 /etc/hosts 檔案中加入底下設定:
140.112.20.58 lsntu
140.115.71.66 lsncu
140.113.202.151 lsnctu
140.120.90.46 lsnchu
140.116.49.24 lsncku
加入後,請執行底下指令來看網路連線是否正常:
ping lsxxx
如果 ping 得到主機,「只」代表這台機器目前有開機,不代表它可以檢查得到 License。
設定 .bashrc
南臺屬於 lsncku 的支援範圍,如果可以 ping 到 lsncku 的話,那麼可以在一般使用者的 ~/.basrhc 中設定:
export LICENSE_FILE=5280@lsncku
我們可以先測試看看此 License Server 是否有提供 LICESE Key,指令如下:
lmstat -a -c 5280@lsncku
License Server name
(host_name) license server IP 地區
----------- ----------------- ------------------------------------------
lsntu 140.112.20.58 台北市,新北市,基隆市,宜蘭縣,花蓮縣
----------- ----------------- ------------------------------------------
lsncu 140.115.71.66 桃園縣
----------- ----------------- ------------------------------------------
lsnctu 140.113.202.151 新竹縣市,苗栗縣,澎湖縣,金馬縣,連江縣
----------- ----------------- ------------------------------------------
lsnchu 140.120.90.46 台中市,南投縣,雲林縣,彰化縣
----------- ----------------- ------------------------------------------
lsncku 140.116.49.24 嘉義縣市,台南市,高雄市,屏東縣,台東縣
當啟動 EDA 工具的時候,EDA 工具會線上執行 License 驗證,簡單來講就是向 License Server 取得一把鑰匙,如果此時有多餘的軟體鑰匙可以使用的話,那麼 License Server 會分配一把鑰匙給使用者,當使用者退出 EDA 工具時,會將 License Server 的鑰匙還回,以便再提供給下一個使用。
因為 EDA 工具的防盜機制是採線上認證,因此要注意底下事項:
1. 安裝 EDA 工具之伺服器必須有實體 IP,以提供給 License Server 進行驗證。
2. 所使用的 IP 必須至 CIC 網站登錄,以提供 License 驗證。
3. 網路要通
4. 要設定相對應的 port
5. 要寫好 .bashrc 的路徑設定
設定 License Server
請參考 installation_guide_cadence.txt 來建立 License Server 清單,在 /etc/hosts 檔案中加入底下設定:
140.112.20.58 lsntu
140.115.71.66 lsncu
140.113.202.151 lsnctu
140.120.90.46 lsnchu
140.116.49.24 lsncku
加入後,請執行底下指令來看網路連線是否正常:
ping lsxxx
如果 ping 得到主機,「只」代表這台機器目前有開機,不代表它可以檢查得到 License。
設定 .bashrc
南臺屬於 lsncku 的支援範圍,如果可以 ping 到 lsncku 的話,那麼可以在一般使用者的 ~/.basrhc 中設定:
export LICENSE_FILE=5280@lsncku
我們可以先測試看看此 License Server 是否有提供 LICESE Key,指令如下:
lmstat -a -c 5280@lsncku
2015年9月23日 星期三
安裝 LibreCAD 以及 FreeCAD 新版
安裝 LibreCAD 以及 FreeCAD 新版
請修改 /etc/apt/sources.list,新增底下設定:
# Cura
# https://www.lulzbot.com/cura/debian-installation
deb http://download.alephobjects.com/ao/aodeb jessie main
並執行底下指令,資料來源:https://www.lulzbot.com/cura/debian-installation
# wget -qO - http://download.alephobjects.com/ao/aodeb/aokey.pub | sudo apt-key add -
# apt-get update;apt-get upgrade
# apt-get install -y librecad freecad
請修改 /etc/apt/sources.list,新增底下設定:
# Cura
# https://www.lulzbot.com/cura/debian-installation
deb http://download.alephobjects.com/ao/aodeb jessie main
並執行底下指令,資料來源:https://www.lulzbot.com/cura/debian-installation
# wget -qO - http://download.alephobjects.com/ao/aodeb/aokey.pub | sudo apt-key add -
# apt-get update;apt-get upgrade
# apt-get install -y librecad freecad
設定 Nvidia 3D 加速卡
要進行 3D 電腦繪圖,硬體加速功能必須要啟動,目前最常見的 3D 加速卡為 Nvidia,因此接下來要介紹如何在 Linux 底下啟動 Nvidia 3D 加速卡的硬體加速功能。
Nvidia 3D 加速卡的驅動程式模組名稱為 nvidia,要觀察此驅動程式模組是否有載入請執行:
lsmod |grep nvidia
其輸出如下:
nvidia_uvm 33239 4
nvidia 10507891 57 nvidia_uvm
drm 249955 3 nvidia
i2c_core 46012 5 drm,igb,i2c_i801,i2c_algo_bit,nvidia
如果沒有看到上面訊息,表示系統目前載入的 3D 驅動程式模組是 nouveau,這是自由版本的 3D 驅動程式模組,但是功能比原廠的弱很多,我們可以執行底下程式來確認系統是否載入此模組:
lsmod |grep nouveau
現在要安裝原廠的 3D 驅動程式模組,首先請先設定 /etc/apt/sources.list 檔,確定其中有 non-free 參數,如底下所示:
deb http://ftp.tw.debian.org/debian/ jessie main contrib non-free
deb-src http://ftp.tw.debian.org/debian/ jessie main contrib non-free
deb http://security.debian.org/ jessie/updates main
deb-src http://security.debian.org/ jessie/updates main
接著執行
# apt-get update
更新套件狀態。此時應該可以看到 nvidia-kernel-dkms 套件,請執行底下指令安裝此套件:
# apt-get install nvidia-kernel-dkms
裝完之後會出現重新開機畫面,此時重啟電腦,再執行
lsmod |grep nvidia
應該可以看到 nvidia 模組已載入電腦。但是這個時候進行 blender 還沒辦法啟動 CUDA 設定,原因在於我們還需要再安裝 nvidia-cuda-toolkit 套件,安裝完畢後 進入 blender 應該可以啟動 CUDA 設定,到此階段,我們就完成 3D 加速設定了。
Nvidia 3D 加速卡的驅動程式模組名稱為 nvidia,要觀察此驅動程式模組是否有載入請執行:
lsmod |grep nvidia
其輸出如下:
nvidia_uvm 33239 4
nvidia 10507891 57 nvidia_uvm
drm 249955 3 nvidia
i2c_core 46012 5 drm,igb,i2c_i801,i2c_algo_bit,nvidia
如果沒有看到上面訊息,表示系統目前載入的 3D 驅動程式模組是 nouveau,這是自由版本的 3D 驅動程式模組,但是功能比原廠的弱很多,我們可以執行底下程式來確認系統是否載入此模組:
lsmod |grep nouveau
現在要安裝原廠的 3D 驅動程式模組,首先請先設定 /etc/apt/sources.list 檔,確定其中有 non-free 參數,如底下所示:
deb http://ftp.tw.debian.org/debian/ jessie main contrib non-free
deb-src http://ftp.tw.debian.org/debian/ jessie main contrib non-free
deb http://security.debian.org/ jessie/updates main
deb-src http://security.debian.org/ jessie/updates main
接著執行
# apt-get update
更新套件狀態。此時應該可以看到 nvidia-kernel-dkms 套件,請執行底下指令安裝此套件:
# apt-get install nvidia-kernel-dkms
裝完之後會出現重新開機畫面,此時重啟電腦,再執行
lsmod |grep nvidia
應該可以看到 nvidia 模組已載入電腦。但是這個時候進行 blender 還沒辦法啟動 CUDA 設定,原因在於我們還需要再安裝 nvidia-cuda-toolkit 套件,安裝完畢後 進入 blender 應該可以啟動 CUDA 設定,到此階段,我們就完成 3D 加速設定了。
手動安裝、設定 blender
安裝
Blender 3D 是一套免費的 3D 繪圖程式,由於此程式更新速度相當的快,Debian Linux 基本上沒有更新到最新版本,因此我們必須要自行安裝,請先下載最新版本,然後解壓縮至 /usr/local 目錄下,假設要安裝的版本為 2.76-rc1,其檔名為 blender-2.76-rc1-linux-glibc211-x86_64.tar.bz2,則安裝指令如下:
# tar xfva blender-2.76-rc1-linux-glibc211-x86_64.tar.bz2 -C /usr/local
安裝完畢後請至 /usr/local/bin 中新增一個連結:
/usr/local/bin# ln -sf ../blender-2.76-rc1-linux-glibc211-x86_64/blender
然後把系統原本的 blender 移除,指令如下:
# apt-get remove blender
然後再執行 blender 即可看到最新版本之 blender 畫面。
設定
要設定 blender 主要有幾個目的:
1. 調整 blender 選單字型大小 - 由於目前營幕主流是 Full HD,在這種情況下 blender 選單字型有時看起來會太小,因此要調整 blender 選單字型,才不會看到眼花。要調整選單字型前,必須先了解目前營幕的 DPI (Dots Per Inch),請執行
xdpyinfo
找到底下片段:
screen #0:
dimensions: 1920x1080 pixels (524x292 millimeters)
resolution: 93x94 dots per inch
depths (7): 24, 1, 4, 8, 15, 16, 32
root window id: 0x296
其中的 resolution 行即是告訴我們此營幕的解析度為 93x94 DPI,我們可以在 blender 的設定視窗中調整其 DPI 數值,此時 blender 的選單字型即會跟著調整。
2. 調整 blender 語系
blender 的主要顯示介面為英文,但是在網路上許多網友的協助下,目前已支援許多語系,其中包括繁體中文環境,要調整 blender 語系請至其設定畫面中點選 International fonts 選項,再選擇「正體中文(繁體中文)」,然後點選底下翻譯:欄位中的選項如「介面」、「提示框」、「新資料」等,其該選項之介面 即會變成繁體中文。
3. 啟動 3D 加速
要啟動 3D 加速,必須要在設定畫面中將 Compute Device 選擇 CUDA,萬一沒有 CUDA 選項的話,請參考調校系統效能。
Blender 3D 是一套免費的 3D 繪圖程式,由於此程式更新速度相當的快,Debian Linux 基本上沒有更新到最新版本,因此我們必須要自行安裝,請先下載最新版本,然後解壓縮至 /usr/local 目錄下,假設要安裝的版本為 2.76-rc1,其檔名為 blender-2.76-rc1-linux-glibc211-x86_64.tar.bz2,則安裝指令如下:
# tar xfva blender-2.76-rc1-linux-glibc211-x86_64.tar.bz2 -C /usr/local
安裝完畢後請至 /usr/local/bin 中新增一個連結:
/usr/local/bin# ln -sf ../blender-2.76-rc1-linux-glibc211-x86_64/blender
然後把系統原本的 blender 移除,指令如下:
# apt-get remove blender
然後再執行 blender 即可看到最新版本之 blender 畫面。
設定
要設定 blender 主要有幾個目的:
1. 調整 blender 選單字型大小 - 由於目前營幕主流是 Full HD,在這種情況下 blender 選單字型有時看起來會太小,因此要調整 blender 選單字型,才不會看到眼花。要調整選單字型前,必須先了解目前營幕的 DPI (Dots Per Inch),請執行
xdpyinfo
找到底下片段:
screen #0:
dimensions: 1920x1080 pixels (524x292 millimeters)
resolution: 93x94 dots per inch
depths (7): 24, 1, 4, 8, 15, 16, 32
root window id: 0x296
其中的 resolution 行即是告訴我們此營幕的解析度為 93x94 DPI,我們可以在 blender 的設定視窗中調整其 DPI 數值,此時 blender 的選單字型即會跟著調整。
2. 調整 blender 語系
blender 的主要顯示介面為英文,但是在網路上許多網友的協助下,目前已支援許多語系,其中包括繁體中文環境,要調整 blender 語系請至其設定畫面中點選 International fonts 選項,再選擇「正體中文(繁體中文)」,然後點選底下翻譯:欄位中的選項如「介面」、「提示框」、「新資料」等,其該選項之介面 即會變成繁體中文。
3. 啟動 3D 加速
要啟動 3D 加速,必須要在設定畫面中將 Compute Device 選擇 CUDA,萬一沒有 CUDA 選項的話,請參考調校系統效能。
2014年12月15日 星期一
uboot 常用指令介紹
U-Boot 是嵌入式系統上最常見的 Boot Loader,底下說明其常用指令:
U-Boot# help -> 列出可使用指令
U-Boot# version -> 觀看目前所使用 U-Boot 版本
U-Boot 2014.07 (Oct 14 2014 - 11:45:06)
arm-linux-gnueabi-gcc (Debian 4.4.5-8) 4.4.5
GNU ld (GNU Binutils for Debian) 2.20.1.20100303
U-Boot# bdinfo -> 觀看嵌入式電路板資訊
arch_number = 0x0000060A
boot_params = 0x80000100
DRAM bank = 0x00000000
-> start = 0x80000000
-> size = 0x08000000
DRAM bank = 0x00000001
-> start = 0x88000000
-> size = 0x08000000
eth0name = usb_ether
ethaddr = (not set)
current eth = usb_ether
ip_addr = <NULL>
baudrate = 115200 bps
TLB addr = 0x8FFF0000
relocaddr = 0x8FF4C000
reloc off = 0x0FE4C000
irq_sp = 0x8EF2BEE0
sp start = 0x8EF2BED0
U-Boot# mmc list -> 列出目前板子上面的 sdcard
OMAP SD/MMC: 0
U-Boot# mmcinfo -> 顯示(SD)記憶卡資訊,亦可以打成 mmc info
Device: OMAP SD/MMC
Manufacturer ID: aa
OEM: 5859
Name: QEMU!
Tran Speed: 25000000
Rd Block Len: 512
SD version 1.0
High Capacity: No
Capacity: 1 GiB
Bus Width: 4-bit
U-Boot# mmc part -> 觀看 MMC 上的分割區
Partition Map for MMC device 0 -- Partition Type: DOS
Part Start Sector Num Sectors UUID Type
1 2048 163840 8a5a18c6-01 0b Boot
2 165888 1931264 8a5a18c6-02 83
U-Boot# ls -> 可觀看目錄裡的檔案,底下介紹用法
ls - list files in a directory (default /)
Usage:
ls <interface> [<dev[:part]> [directory]]
- List files in directory 'directory' of partition 'part' on
device type 'interface' instance 'dev'.
U-Boot# ls mmc 0:1 -> 觀看第 0 個 MMC,第 1 個分割區之內容
2404728 uimage
51100 mlo
1853076 u-boot
392152 u-boot.bin
392216 u-boot.img
5 file(s), 0 dir(s)
U-Boot# ls mmc 0:2 -> 觀看第 0 個 MMC,第 2 個分割區 (rootfs) 之內容
U-Boot# fatinfo -> 觀看 FAT 檔案系統資訊
usage: fatinfo <interface> [<dev[:part]>]
U-Boot# fatinfo mmc 0:1 -> 觀看第 0 個 MMC,第 1 個分割區之資訊
Interface: MMC
Device 0: Vendor: Man 0000aa Snr adbeef00 Rev: 13.14 Prod: QEMU!
Type: Removable Hard Disk
Capacity: 1024.0 MB = 1.0 GB (2097152 x 512)
Filesystem: FAT16 " "
U-Boot# fatinfo mmc 0:2 -> 觀看第 0 個 MMC,第 2 個分割區,因此分割區為 ext3,故
無資料顯示。
** Unable to use mmc 0:2 for fatinfo **
U-Boot# fatls mmc 0:1 -> 觀看第 0 個 MMC,第 1 個分割區之內容
2404728 uimage
51100 mlo
1853076 u-boot
392152 u-boot.bin
392216 u-boot.img
5 file(s), 0 dir(s)
U-Boot# ext2ls mmc 0:2 -> 觀看第 0 個 MMC,第 2 個分割區(ext3)之內容
** 所有 ls 指令如 fatls、ext2ls .. 等均可以直接用 ls 指令來代替,語法一樣 **
U-Boot# reset
resetting ...
U-Boot# usb -> USB 操作相關指令
usb - USB sub-system
Usage:
usb start - start (scan) USB controller
usb reset - reset (rescan) USB controller
usb stop [f] - stop USB [f]=force stop
usb tree - show USB device tree
usb info [dev] - show available USB devices
usb test [dev] [port] [mode] - set USB 2.0 test mode
(specify port 0 to indicate the device's upstream port)
Available modes: J, K, S[E0_NAK], P[acket], F[orce_Enable]
usb storage - show details of USB storage devices
usb dev [dev] - show or set current USB storage device
usb part [dev] - print partition table of one or all USB storage devices
usb read addr blk# cnt - read `cnt' blocks starting at block `blk#'
to memory address `addr'
usb write addr blk# cnt - write `cnt' blocks starting at block `blk#'
from memory address `addr'
U-Boot# usb info -> 觀看 USB 資訊,不過因為還沒啟動,所以沒資訊
USB is stopped. Please issue 'usb start' first.
U-Boot# usb start -> 啟動 USB 裝置
(Re)start USB...
USB0: USB EHCI 0.00
scanning bus 0 for devices... 1 USB Device(s) found
scanning usb for storage devices... 0 Storage Device(s) found
scanning usb for ethernet devices... 0 Ethernet Device(s) found
此時再執行 usb info 可以看到 USB 裝置
U-Boot# usb info
1: Hub, USB Revision 2.0
- u-boot EHCI Host Controller
- Class: Hub
- PacketSize: 64 Configurations: 1
- Vendor: 0x0000 Product 0x0000 Version 1.0
Configuration: 1
- Interfaces: 1 Self Powered 0mA
Interface: 0
- Alternate Setting 0, Endpoints: 1
- Class Hub
- Endpoint 1 In Interrupt MaxPacket 8 Interval 255ms
U-Boot# printenv -> 列出開機環境設定,請全部複製下來修改
arch=arm
baudrate=115200
beaglerev=C4
board=beagle
board_name=beagle
bootargs=console=ttyO2,115200n8 mpurate=auto buddy=none camera=none vram=12M omapfb.mode=dvi:640x480MR-16@60 omapdss.def_disp=dvi root=ubi0:rootfs ubi.mtd=4 rootfstype=ubifs
bootcmd=run findfdt; mmc dev ${mmcdev}; if mmc rescan; then if run userbutton; then setenv bootenv uEnv.txt;else setenv bootenv user.txt;fi;echo SD/MMC found on device ${mmcdev};if run loadbootenv; then echo Loaded environment from ${bootenv};run importbootenv;fi;if test -n $uenvcmd; then echo Running uenvcmd ...;run uenvcmd;fi;if run loadimage; then run mmcboot;fi;fi;run nandboot;setenv bootfile zImage;if run loadimage; then run loadfdt;run mmcbootz; fi;
bootdelay=1
bootdir=/boot
bootenv=uEnv.txt
bootfile=zImage
bootpart=0:2
buddy=none
camera=none
console=ttyO2,115200n8
cpu=armv7
defaultdisplay=dvi
dieid#=51454d5551454d555400000051454d55
dvimode=640x480MR-16@60
ethact=usb_ether
fdt_high=0xffffffff
fdtaddr=0x80f80000
fdtfile=omap3-beagle.dtb
findfdt=if test $beaglerev = AxBx; then setenv fdtfile omap3-beagle.dtb; fi; if test $beaglerev = Cx; then setenv fdtfile omap3-beagle.dtb; fi; if test $beaglerev = C4; then setenv fdtfile omap3-beagle.dtb; fi; if test $beaglerev = xMAB; then setenv fdtfile omap3-beagle-xm-ab.dtb; fi; if test $beaglerev = xMC; then setenv fdtfile omap3-beagle-xm.dtb; fi; if test $fdtfile = undefined; then echo WARNING: Could not determine device tree to use; fi;
importbootenv=echo Importing environment from mmc ...; env import -t $loadaddr $filesize
loadaddr=0x80200000
loadbootenv=fatload mmc ${mmcdev} ${loadaddr} ${bootenv}
loadfdt=run validatefdt; load mmc ${bootpart} ${fdtaddr} ${bootdir}/${fdtfile}
loadimage=load mmc ${bootpart} ${loadaddr} ${bootdir}/${bootfile}
loadramdisk=load mmc ${bootpart} ${rdaddr} ${bootdir}/${ramdisk}
mmcargs=setenv bootargs console=${console} ${optargs} mpurate=${mpurate} buddy=${buddy} camera=${camera} vram=${vram} omapfb.mode=dvi:${dvimode} omapdss.def_disp=${defaultdisplay} root=${mmcroot} rootfstype=${mmcrootfstype}
mmcboot=echo Booting from mmc ...; run mmcargs; bootm ${loadaddr}
mmcbootz=echo Booting with DT from mmc${mmcdev} ...; run mmcargs; bootz ${loadaddr} - ${fdtaddr}
mmcdev=0
mmcroot=/dev/mmcblk0p2 rw
mmcrootfstype=ext3 rootwait
mpurate=auto
nandargs=setenv bootargs console=${console} ${optargs} mpurate=${mpurate} buddy=${buddy} camera=${camera} vram=${vram} omapfb.mode=dvi:${dvimode} omapdss.def_disp=${defaultdisplay} root=${nandroot} rootfstype=${nandrootfstype}
nandboot=echo Booting from nand ...; run nandargs; nand read ${loadaddr} 280000 400000; bootm ${loadaddr}
nandroot=ubi0:rootfs ubi.mtd=4
nandrootfstype=ubifs
ramargs=setenv bootargs console=${console} ${optargs} mpurate=${mpurate} buddy=${buddy} vram=${vram} omapfb.mode=dvi:${dvimode} omapdss.def_disp=${defaultdisplay} root=${ramroot} rootfstype=${ramrootfstype}
ramboot=echo Booting from ramdisk ...; run ramargs; bootm ${loadaddr}
ramdisk=ramdisk.gz
ramroot=/dev/ram0 rw ramdisk_size=65536 initrd=0x81000000,64M
ramrootfstype=ext2
rdaddr=0x81000000
soc=omap3
stderr=serial
stdin=serial
stdout=serial
usbtty=cdc_acm
userbutton=if gpio input 173; then run userbutton_xm; else run userbutton_nonxm; fi;
userbutton_nonxm=gpio input 7;
userbutton_xm=gpio input 4;
validatefdt=if test $beaglerev = xMAB; then if test ! -e mmc ${bootpart} ${bootdir}/${fdtfile}; then setenv fdtfile omap3-beagle-xm.dtb; fi; fi;
vendor=ti
ver=U-Boot 2014.07 (Oct 14 2014 - 11:45:06)
vram=12M
Environment size: 3604/131068 bytes
U-Boot# help -> 列出可使用指令
U-Boot# version -> 觀看目前所使用 U-Boot 版本
U-Boot 2014.07 (Oct 14 2014 - 11:45:06)
arm-linux-gnueabi-gcc (Debian 4.4.5-8) 4.4.5
GNU ld (GNU Binutils for Debian) 2.20.1.20100303
U-Boot# bdinfo -> 觀看嵌入式電路板資訊
arch_number = 0x0000060A
boot_params = 0x80000100
DRAM bank = 0x00000000
-> start = 0x80000000
-> size = 0x08000000
DRAM bank = 0x00000001
-> start = 0x88000000
-> size = 0x08000000
eth0name = usb_ether
ethaddr = (not set)
current eth = usb_ether
ip_addr = <NULL>
baudrate = 115200 bps
TLB addr = 0x8FFF0000
relocaddr = 0x8FF4C000
reloc off = 0x0FE4C000
irq_sp = 0x8EF2BEE0
sp start = 0x8EF2BED0
U-Boot# mmc list -> 列出目前板子上面的 sdcard
OMAP SD/MMC: 0
U-Boot# mmcinfo -> 顯示(SD)記憶卡資訊,亦可以打成 mmc info
Device: OMAP SD/MMC
Manufacturer ID: aa
OEM: 5859
Name: QEMU!
Tran Speed: 25000000
Rd Block Len: 512
SD version 1.0
High Capacity: No
Capacity: 1 GiB
Bus Width: 4-bit
U-Boot# mmc part -> 觀看 MMC 上的分割區
Partition Map for MMC device 0 -- Partition Type: DOS
Part Start Sector Num Sectors UUID Type
1 2048 163840 8a5a18c6-01 0b Boot
2 165888 1931264 8a5a18c6-02 83
U-Boot# ls -> 可觀看目錄裡的檔案,底下介紹用法
ls - list files in a directory (default /)
Usage:
ls <interface> [<dev[:part]> [directory]]
- List files in directory 'directory' of partition 'part' on
device type 'interface' instance 'dev'.
U-Boot# ls mmc 0:1 -> 觀看第 0 個 MMC,第 1 個分割區之內容
2404728 uimage
51100 mlo
1853076 u-boot
392152 u-boot.bin
392216 u-boot.img
5 file(s), 0 dir(s)
U-Boot# ls mmc 0:2 -> 觀看第 0 個 MMC,第 2 個分割區 (rootfs) 之內容
U-Boot# fatinfo -> 觀看 FAT 檔案系統資訊
usage: fatinfo <interface> [<dev[:part]>]
U-Boot# fatinfo mmc 0:1 -> 觀看第 0 個 MMC,第 1 個分割區之資訊
Interface: MMC
Device 0: Vendor: Man 0000aa Snr adbeef00 Rev: 13.14 Prod: QEMU!
Type: Removable Hard Disk
Capacity: 1024.0 MB = 1.0 GB (2097152 x 512)
Filesystem: FAT16 " "
U-Boot# fatinfo mmc 0:2 -> 觀看第 0 個 MMC,第 2 個分割區,因此分割區為 ext3,故
無資料顯示。
** Unable to use mmc 0:2 for fatinfo **
U-Boot# fatls mmc 0:1 -> 觀看第 0 個 MMC,第 1 個分割區之內容
2404728 uimage
51100 mlo
1853076 u-boot
392152 u-boot.bin
392216 u-boot.img
5 file(s), 0 dir(s)
U-Boot# ext2ls mmc 0:2 -> 觀看第 0 個 MMC,第 2 個分割區(ext3)之內容
** 所有 ls 指令如 fatls、ext2ls .. 等均可以直接用 ls 指令來代替,語法一樣 **
U-Boot# reset
resetting ...
U-Boot# usb -> USB 操作相關指令
usb - USB sub-system
Usage:
usb start - start (scan) USB controller
usb reset - reset (rescan) USB controller
usb stop [f] - stop USB [f]=force stop
usb tree - show USB device tree
usb info [dev] - show available USB devices
usb test [dev] [port] [mode] - set USB 2.0 test mode
(specify port 0 to indicate the device's upstream port)
Available modes: J, K, S[E0_NAK], P[acket], F[orce_Enable]
usb storage - show details of USB storage devices
usb dev [dev] - show or set current USB storage device
usb part [dev] - print partition table of one or all USB storage devices
usb read addr blk# cnt - read `cnt' blocks starting at block `blk#'
to memory address `addr'
usb write addr blk# cnt - write `cnt' blocks starting at block `blk#'
from memory address `addr'
U-Boot# usb info -> 觀看 USB 資訊,不過因為還沒啟動,所以沒資訊
USB is stopped. Please issue 'usb start' first.
U-Boot# usb start -> 啟動 USB 裝置
(Re)start USB...
USB0: USB EHCI 0.00
scanning bus 0 for devices... 1 USB Device(s) found
scanning usb for storage devices... 0 Storage Device(s) found
scanning usb for ethernet devices... 0 Ethernet Device(s) found
此時再執行 usb info 可以看到 USB 裝置
U-Boot# usb info
1: Hub, USB Revision 2.0
- u-boot EHCI Host Controller
- Class: Hub
- PacketSize: 64 Configurations: 1
- Vendor: 0x0000 Product 0x0000 Version 1.0
Configuration: 1
- Interfaces: 1 Self Powered 0mA
Interface: 0
- Alternate Setting 0, Endpoints: 1
- Class Hub
- Endpoint 1 In Interrupt MaxPacket 8 Interval 255ms
U-Boot# printenv -> 列出開機環境設定,請全部複製下來修改
arch=arm
baudrate=115200
beaglerev=C4
board=beagle
board_name=beagle
bootargs=console=ttyO2,115200n8 mpurate=auto buddy=none camera=none vram=12M omapfb.mode=dvi:640x480MR-16@60 omapdss.def_disp=dvi root=ubi0:rootfs ubi.mtd=4 rootfstype=ubifs
bootcmd=run findfdt; mmc dev ${mmcdev}; if mmc rescan; then if run userbutton; then setenv bootenv uEnv.txt;else setenv bootenv user.txt;fi;echo SD/MMC found on device ${mmcdev};if run loadbootenv; then echo Loaded environment from ${bootenv};run importbootenv;fi;if test -n $uenvcmd; then echo Running uenvcmd ...;run uenvcmd;fi;if run loadimage; then run mmcboot;fi;fi;run nandboot;setenv bootfile zImage;if run loadimage; then run loadfdt;run mmcbootz; fi;
bootdelay=1
bootdir=/boot
bootenv=uEnv.txt
bootfile=zImage
bootpart=0:2
buddy=none
camera=none
console=ttyO2,115200n8
cpu=armv7
defaultdisplay=dvi
dieid#=51454d5551454d555400000051454d55
dvimode=640x480MR-16@60
ethact=usb_ether
fdt_high=0xffffffff
fdtaddr=0x80f80000
fdtfile=omap3-beagle.dtb
findfdt=if test $beaglerev = AxBx; then setenv fdtfile omap3-beagle.dtb; fi; if test $beaglerev = Cx; then setenv fdtfile omap3-beagle.dtb; fi; if test $beaglerev = C4; then setenv fdtfile omap3-beagle.dtb; fi; if test $beaglerev = xMAB; then setenv fdtfile omap3-beagle-xm-ab.dtb; fi; if test $beaglerev = xMC; then setenv fdtfile omap3-beagle-xm.dtb; fi; if test $fdtfile = undefined; then echo WARNING: Could not determine device tree to use; fi;
importbootenv=echo Importing environment from mmc ...; env import -t $loadaddr $filesize
loadaddr=0x80200000
loadbootenv=fatload mmc ${mmcdev} ${loadaddr} ${bootenv}
loadfdt=run validatefdt; load mmc ${bootpart} ${fdtaddr} ${bootdir}/${fdtfile}
loadimage=load mmc ${bootpart} ${loadaddr} ${bootdir}/${bootfile}
loadramdisk=load mmc ${bootpart} ${rdaddr} ${bootdir}/${ramdisk}
mmcargs=setenv bootargs console=${console} ${optargs} mpurate=${mpurate} buddy=${buddy} camera=${camera} vram=${vram} omapfb.mode=dvi:${dvimode} omapdss.def_disp=${defaultdisplay} root=${mmcroot} rootfstype=${mmcrootfstype}
mmcboot=echo Booting from mmc ...; run mmcargs; bootm ${loadaddr}
mmcbootz=echo Booting with DT from mmc${mmcdev} ...; run mmcargs; bootz ${loadaddr} - ${fdtaddr}
mmcdev=0
mmcroot=/dev/mmcblk0p2 rw
mmcrootfstype=ext3 rootwait
mpurate=auto
nandargs=setenv bootargs console=${console} ${optargs} mpurate=${mpurate} buddy=${buddy} camera=${camera} vram=${vram} omapfb.mode=dvi:${dvimode} omapdss.def_disp=${defaultdisplay} root=${nandroot} rootfstype=${nandrootfstype}
nandboot=echo Booting from nand ...; run nandargs; nand read ${loadaddr} 280000 400000; bootm ${loadaddr}
nandroot=ubi0:rootfs ubi.mtd=4
nandrootfstype=ubifs
ramargs=setenv bootargs console=${console} ${optargs} mpurate=${mpurate} buddy=${buddy} vram=${vram} omapfb.mode=dvi:${dvimode} omapdss.def_disp=${defaultdisplay} root=${ramroot} rootfstype=${ramrootfstype}
ramboot=echo Booting from ramdisk ...; run ramargs; bootm ${loadaddr}
ramdisk=ramdisk.gz
ramroot=/dev/ram0 rw ramdisk_size=65536 initrd=0x81000000,64M
ramrootfstype=ext2
rdaddr=0x81000000
soc=omap3
stderr=serial
stdin=serial
stdout=serial
usbtty=cdc_acm
userbutton=if gpio input 173; then run userbutton_xm; else run userbutton_nonxm; fi;
userbutton_nonxm=gpio input 7;
userbutton_xm=gpio input 4;
validatefdt=if test $beaglerev = xMAB; then if test ! -e mmc ${bootpart} ${bootdir}/${fdtfile}; then setenv fdtfile omap3-beagle-xm.dtb; fi; fi;
vendor=ti
ver=U-Boot 2014.07 (Oct 14 2014 - 11:45:06)
vram=12M
Environment size: 3604/131068 bytes
2014年12月1日 星期一
建立一個 br10 橋接網路介面
#2019/09/23 修訂
192.168.10.0/24 -> IP 範圍為 192.168.10.0 ~ 192.168.10.255
Netmask為 255.255.255.0 (24 bit)
Gateway ?
DNS ?
Bridge 命名方式:最好可以一眼看出此橋之網路設定,例如:
br0 -> 192.168.0.0/24
br1 -> 192.168.1.0/24
br2 -> 192.168.2.0/24
..
br10 -> 192.168.10.0/24
我們可以執行底下指令新增 br10
# brctl addbr br10
# ifconfig br10
br10 Link encap:Ethernet HWaddr 52:55:ae:8e:ad:d0
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
現在可以看到 br10 沒有 IP,接下來可以指定 192.168.10.1/24 作為 br10 的 IP,指令如下:
# ifconfig br10 192.168.10.1/24 up
或是
# ifconfig br10 192.168.10.1 netmask 255.255.255.0
接著可以觀察 br10 的 IP,如下所示:
# ifconfig br10
br10 Link encap:Ethernet HWaddr 52:55:ae:8e:ad:d0
inet addr:192.168.10.1 Bcast:192.168.10.255 Mask:255.255.255.0
inet6 addr: fe80::5055:aeff:fe8e:add0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:508 (508.0 B)
此時我們可以 ping 192.168.10.1 看看其輸出:
$ ping 192.168.10.1
PING 192.168.10.1 (192.168.10.1) 56(84) bytes of data.
64 bytes from 192.168.10.1: icmp_seq=1 ttl=64 time=0.024 ms
64 bytes from 192.168.10.1: icmp_seq=2 ttl=64 time=0.023 ms
64 bytes from 192.168.10.1: icmp_seq=3 ttl=64 time=0.045 ms
^C
--- 192.168.10.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2051ms
rtt min/avg/max/mdev = 0.023/0.030/0.045/0.012 ms
這表示 192.168.10.1 這個介面已經被我們「無中生有」製造出來,這就是虛擬的橋接網路介面。
如果要刪除此網路介面的話,可以用 root 權限執行:
# brctl delbr br10
bridge br10 is still up; can't delete it
此時會有錯誤訊息,告訴我們 br10 還在使用中,不能刪除。因此要用 root 權限關閉此網路介面,指令如下:
# ifconfig br10 down
接著再執行
# brctl delbr br10
即可刪除此網路介面,我們可以使用 brctl show 來觀察 br10 是否仍然存在。
使用 brctl 建立 br10 有個缺點,那就是 br10 在系統重開後就會不見,因此我們要建立一個永久的 br10 介面。在本課程,我們建立一個 192.168.10.0/24 之橋接網路介面,其
/etc/network/interfaces 之設定如下:
auto br10
iface br10 inet static
address 192.168.10.1 # 橋接網路介面之 IP
netmask 255.255.255.0 # NetMask
gateway 120.117.72.71 # eth0 IP,亦即橋接網路介面之 gateway。
bridge_ports tap0 # 初始 tap,之後 br10 會自動新增其它 tap。
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off
設定完之後,重新啟動網路介面,或是執行底指令:
# ifconfig br10 up
# ifup br10
即可啟動 br10,我們可以執行
# ifconfig br10
來觀看其輸出,如底下所示:
br10 Link encap:Ethernet HWaddr 8e:03:1e:8e:fe:99
inet addr:192.168.10.1 Bcast:192.168.10.255 Mask:255.255.255.0
inet6 addr: fe80::8c03:1eff:fe8e:fe99/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:648 (648.0 B)
接下來要將 /usr/local/libexec/qemu-bridge-helper 這個檔案 setuid,指令如下:
# cd /usr/local/libexec
# chmod u+s qemu-bridge-helper
# ls -l qemu-bridge-helper
-rwsr-xr-x 1 root staff 39680 10月 21 10:46 qemu-bridge-helper
^
此檔現在具有 u+s 屬性。
然後要修改 /usr/local/etc/qemu/bridge.conf 這個檔案,若此檔不存在的話,請自行新增,加入一行:
allow br10
接著請建立 ~/qemu_stretch 目錄,再在其中新增 buildpxe.sh 這個檔案,其內容如下:
# IP=192.168.10.254 pxeserver.my.com
CPU=host
SMP=2
MEMORY=1024
HDA=pxeserver.img
#HDA=pxe2.img
HDA_SIZE=4G
MAC="DE:AD:BE:CF:EC:B7"
BRIDGE=br10
CDROM=/opt/iso/debian-stretch-DI-rc2-amd64-netinst.iso
[ -f $HDA ] && mv $HDA ${HDA}.`date +%Y%m%d`
qemu-img create $HDA $HDA_SIZE -f qcow2
qemu-system-x86_64 -enable-kvm -cpu $CPU -smp $SMP -m $MEMORY \
-drive file=$HDA,format=qcow2 -vga qxl \
-cdrom $CDROM -boot d \
-net nic,macaddr=$MAC -net bridge,br=$BRIDGE
請注意 debian 的安裝 iso 檔要放在 /opt/iso 目錄下,不然上面這個 script 檔要修改才可以執行。
接著我們要把 runpxe.sh 改成底下格式:
# IP=192.168.10.254 pxeserver.example.org
CPU=host
SMP=2
MEMORY=1024
HDA=pxeserver.img
HDB=hdb.img
MAC="DE:AD:BE:CF:EC:B7"
BRIDGE=br10
qemu-system-x86_64 -enable-kvm -cpu $CPU -smp $SMP -m $MEMORY \
-drive file=$HDA,format=raw \
-boot c \
-net nic,macaddr=$MAC -net bridge,br=$BRIDGE
接著,我們要將 ARM 虛擬機接上 br10 這個橋接網路介面,請在 runarm.sh 中修改為:
qemu-system-arm -M versatilepb -m 512 \
-kernel ./vmlinuz-3.2.0-4-versatile \
-initrd ./initrd.img-3.2.0-4-versatile \
-net nic,macaddr="52:54:00:12:34:56" -net bridge,br=br10 \
-hda arm.img \
-append "root=/dev/sda1"
全部設定完畢後,我們即可執行 sh runarm.sh 來看看新的 ARM 虛擬環境是否有在
192.168.10.0/24 之網段內。在此可以先執行
# brctl show br10
bridge name bridge id STP enabled interfaces
br10 8000.fe624e24d08c no tap0
上述輸出告訴我們 br10 目前有一台虛擬機器掛上。接著修改虛擬 ARM 機器之 IP 設定,>在 /etc/network/interfaces 中,如底下所示:
# The primary network interface
allow-hotplug eth0
#iface eth0 inet dhcp
iface eth0 inet static
address 192.168.10.20
netmask 255.255.255.0
gateway 120.117.72.71 # gateway IP
然後重啟虛擬機之網路,一直到執行 ifconfig 可以看到本機之 IP 為 192.168.10.20。
接下作簡單驗證:
在實體機上執行:
ping 192.168.10.20
在虛擬機上執行:
ping 192.168.10.1
如果都可以 ping 得到機器的話,再在實體機上執行 iceweasel 看是否能打開 192.168.10.20 之網頁,如果可以的話表示設定沒問題。反之,請 debug !
訂閱:
文章 (Atom)
