1. 程式人生 > >ELDK中文開發手冊(源自DENX,看不懂E文的福音)

ELDK中文開發手冊(源自DENX,看不懂E文的福音)

2. 緒論
     首先,我們介紹如何安裝交叉編譯開發工具Embedded Linux Development Kit(ELDK),這個開發套件你很有可能會用到——至少當你在標準的x86 PC上使用Linux或者Sun Solaris系統作為開發環境的時候,你會需要它的。
     然後,我們會闡述通過串列埠與你的目標板連線:你需要配置一個終端控制程式,如cu或者kermit。
     你常常需要通過網線把映像檔案下載到你的目標板上。為了實現這個目的,你需要TFTP和DHCP/BOOTP伺服器。文件中提供了簡要的相關配置說明。
     接下來則是描述如何配置和編譯U-Boot使之適用於某個特定的平臺,以及如何安裝和在該硬體平臺上執行。
     下一步的工作是配置、建立和安裝Linux。我們使用SELF(Simple Embedded Linux Framework)來展示如何建立一個開發環境(包括通過NFS掛載的根檔案系統)和一個嵌入式目標板配置(從基於busybox的ramdisk映像 檔案中執行)。
     本文件不會給出如何把U-Boot或者Linux移植到一個新的硬體平臺,而是預設你的開發板已經被U-Boot和Linux所支援。
    本手冊各種文件格式的最新版本可以從以下網址獲取:
       · HTML http://www.denx.de/wiki/publish/DULG/DULG-canyonlands.html
       · plain ASCII text http://www.denx.de/wiki/publish/DULG/DULG-canyonlands.txt
       · PostScript European A4 format http://www.denx.de/wiki/publish/DULG/DULG-canyonlands.ps
       · PDF European A4 format http://www.denx.de/wiki/publish/DULG/DULG-canyonlands.pdf

3. 嵌入式Linux開發工具套件
      嵌入式Linux開發工具套件(ELDK)包括GNU交叉開發工具,如編譯器、binutils、gdb等工具,和一些已經編譯好的目標工具以及負責提供 在目標平臺上函式呼叫的庫檔案。還免費提供了所有的原始碼,包括全部補丁、擴充套件檔案、以及用於編譯開發工具使用的程式和指令碼。安裝包都是基於RPM包管理 器。
3.1 獲取ELDK
    可以通過以下方式獲得ELDK。
    ·DENX計算機系統光碟
    ·從以下伺服器中下載
        FTP方式
           ftp://mirror.switch.ch/mirror/eldk/eldk/            
ftp://sunsite.utk.edu/pub/linux/eldk/ 
ftp://ftp.sunet.se/pub/Linux/distributions/eldk/ 
           ftp://ftp.leo.org/pub/eldk/
        HTTP方式 
           http://mirror.switch.ch/ftp/mirror/eldk/eldk/
           http://ftp.sunet.se/pub/Linux/distributions/eldk/
           http://archiv.leo.org/pub/comp/os/unix/linux/eldk/
3.2 初始安裝
    初始安裝可以使用放在ELDK目錄樹根目錄下的安裝工具。安裝工具使用語法如下;
$ ./install [-d <dir>] [<cpu_family1>] [<cpu_family2>] …
-d <dir> 確定ELDK安裝在哪個目錄。如果省略ELDK會安裝在當前目錄。
<cpu_family> 確定目標平臺的CPU。如果此項設定了一項以上的引數,則會將這些CPU的支援都安裝。如果省略將會安裝所有CPU的支援。你也可以把ELDK安裝到任何 空目錄下,這麼做的唯一條件是你有那個目錄的寫和執行許可權。安裝過程並不需要超級使用者的特權。由安裝時的引數決定安裝幾個目標元件集合。ELDT包是肯定 會安裝的。
$ export CROSS_COMPILE=ppc_4xx-          //加入環境變數
$ PATH=$PATH:/opt/eldk/usr/bin:/opt/eldk/bin     //加入PATH
這樣加入的話,每次重啟系統 後必須重新加入,一勞永逸的辦法是編輯/root/.bashrc
加上
export CROSS_COMPILE=ppc_4xx-         
export PATH=$PATH:/opt/eldk/usr/bin:/opt/eldk/bin
重啟系統後即可使用ELDK。

4. 系統設定
      在目標平臺上安裝和配置U-Boot和Linux需要一些工具。特別是在開發過程中,你需要和目標平臺保持聯絡。這一節將告訴你如何配置你的主機以達到上 述目的。
4.1 設定串列埠
      為了更好地使用U-Boot和Linux,你需要通過串列埠將目標板和你的主機連線。U-Boot和Linux可以配置成自動執行而不需要任何使用者的干涉。
      通過串列埠有很多種方法來控制你的目標板,比如說使用終端伺服器。不過最常見的做法是使用你本機的串列埠,這時,你主機需要安裝一個終端程式,如cu或者 kermit。
4.2 配置“kermit”
kermit這個名字就代表了它是連線串列埠和網路的通訊軟體。事實上在很多計算機和作業系統 上使用它,能夠很好地滿足我們的目的。
kermit在執行其它命令之前,會執行你的使用者目錄下的初始檔案.kermrc,所以可以非常簡單的通過 初始化命令來定製kermit。下面是使用U-Boot和Linux時推薦配置:
~/.kermrc:
set line /dev/ttyS0
set speed 115200
set carrier-watch off
set handshake none
set flow-control none
robust
set file type bin
set file name lit
set rec pack 1000
set send pack 1000
set window 5
這 個設定假定你使用的是主機第一個串列埠(/dev/ttyS0),以115200這個波特率與目標板的串列埠連線。
然後你可以連線目標板了:
$ kermit -c
Connecting to /dev/ttyS0, speed 115200.
The escape character is Ctrl-/ (ASCII 28, FS)
Type the escape character followed by C to get back,
or followed by ? to see other options.
—————————————————-
下 載kermit這個軟體時,你會發現有兩個kermit包。你只需要安裝ckermit。其中gkermit僅僅是實現kermit傳輸協議的一個命令列 工具。如果你主機上的Linux系統沒有安裝kermit,你可以到kerimt的官方網站 http://www.columbia.edu/kermit/ 下載。
4.3 使用minicom
      minicom是另外一種非常流行的串列埠通訊終端。很遺憾的是,很多使用者發現在使用U-Boot和Linux時,minicom有很多問題,尤其是試圖使 用它來下載image的時候。因此,不推薦大家使用minicom。
4.4 配置TFTP伺服器
    使用U-Boot下載Linux核心或者應用程式的最快捷的方法是通過網路傳輸。為了這一目的,U-Boot實現了TFTP協議(參見U-Boot中的 tftpboot命令)。為了使主機支援TFTP,你必須確保TFTP後臺程式/usr/sbin/in.tftpd已經安裝。在RedHat系統中,你 可以執行下面的命令來確認:
$ rpm -q tftp-server
如果沒有安裝,請從你的Linux安裝盤或者其它媒介安裝。
大 多數的Linux發行版都預設關閉TFTP服務。以RedHat系統為例,如果要使能TFTP服務,編輯檔案/etc/xinetd.d/tftp,移除 這一行:
disable = yes
或者註釋掉它,或者修改disable = no
此外,確保/tftpboot目錄存在,而 且有訪問許可權(至少應該"dr-xr-xr-x")。

5. Das U-Boot
5.1 當前版本
Das U-Boot(或者簡稱“U-Boot”)是針對嵌入式PowerPC, ARM, MIPS和x86處理器的開放原始碼軟體。U-Boot專案已經在Sourceforge設立,你可以訪問這個官方網 站:http://www.denx.de/wiki/UBoot
U-Boot最新版的原始碼可以在Sourcefoge通過匿名CVS得到。當 要求輸入匿名使用者anonymous的密碼時只需要直接按下回車鍵。
$ cvs -d:pserver:[email protected]:/cvsroot login
$ cvs -z6 -d:pserver:[email protected]:/cvsroot co -P u-boot
官方釋出的U-Boot也可以 通過FTP方式獲取。你可以到ftp://ftp.denx.de/pub/u-boot/下載tar形式的壓縮包。
或者通過git的方式獲取:
git clone git://www.denx.de/git/u-boot.git u-boot/
git clone http://www.denx.de/git/u-boot.git u-boot/
git clone rsync://www.denx.de/git/u-boot.git u-boot/
5.2 原始碼包的解壓
如果你是通過CVS得到 的U-Boot原始碼,你可以跳過這一步,因為你得到的已經是解壓後的目錄樹了。如果你是從FTP伺服器上下載的tar壓縮包,那麼你需要按照以下步驟解 壓:
$ cd /opt/eldk/usr/src
$ wget ftp://ftp.denx.de/pub/u-boot/u-boot-1.3.2.tar.bz2
$ rm -f u-boot
$ bunzip2 < u-boot-0.4.5.tar.bz2 | tar xf -
$ ln -s u-boot-0.4.5 u-boot
$ cd u-boot
5.3 配置
$ export BUILD_DIR=/opt/eldk/build  //指定編譯的輸出目錄
    進入U-Boot原始碼根目錄後,可以先使用如下命令確保已經清除以前編譯的結果:
$ make distclean
    下一步是為Makalu板配置U-Boot:
$ make makalu_config
(譯者注:應 該根據你自己的具體開發板配置,如$ make <yourboard>_config,如果沒有相應的開發板,應該自己照著建立相應的目錄和配置檔案。)
    最後我們可以開始編譯U-Boot了:
 $ make all
5.4 安裝
5.4.1 動手之前
5.4.1.1 安裝所需
    以下的章節假定你的開發板使用flash作為儲存裝置。如果不是,則以下的指令不會工作。如果你想使用U-Boot,需要換掉儲存裝置。
5.4.1.2 開發板識別資料
所有的Makalu開發板使用一個序列號加以識別。而且開發板需要分配一個乙太網MAC地址。如果這些資料丟失,你可能會失去授 權。在安裝U-Boot或者改變開發板的配置之前,你需要蒐集足夠的資訊。
5.4.2 使用BDM/JTAG偵錯程式安裝U-Boot.bin
    把資料燒入flash中的一個簡單而又快速的辦法是通過BDM或者JTAG介面的偵錯程式或者flash燒寫器。當flash中沒有任何資料(比如說一塊新 的開發板),這種方法是唯一的選擇。
    我們(強烈推薦)使用Abatron公司的BDI2000(見http://www.abatron.ch/BDI/bdiGDB.html )。
    其它的BDM/JTAG偵錯程式也可以使用,但是如何操作它們不是本文件要討論的範圍。如果你想使用別的工具請參照它們的說明文件。(我沒有使用 BDI2000,故略去操作BDI2000的方法。我燒寫u-boot.bin就是簡單地通過JTAG口。)
5.4.3 使用U-Boot安裝U-Boot.bin
    如果U-Boot已經在你的板子上安裝執行,你可以使用這些命令來下載新的U-Boot映像來代替當前的。
    警告:在你安裝新的映像之前,你必須擦除當前的u-boot.bin。如果出現什麼差錯,你的開發板將不能執行。因此強烈建議:
    做一個能工作的U-Boot映像檔案的備份;
    你清楚如何在一個新的開發板上安裝u-boot.bin。
    過程如下:
=> tftp 100000 /tftpboot/uboot.bin
ARP broadcast 1
TFTP from server 10.0.0.2; our IP address is 10.0.0.100
Filename ””/tftpboot/uboot.bin””.
Load address: 0×100000
Loading: ###############################
done
Bytes transferred = 155376 (25ef0 hex)
=> protect off 40000000 4003FFFF
Un-Protected 5 sectors
=> era 40000000 4003FFFF
Erase Flash from 0×40000000 to 0×4003ffff
……… done
Erased 5 sectors
=> cp.b 100000 40000000 $(filesize)
Copy to Flash… done
=> setenv filesize
=> saveenv
Saving Enviroment to Flash…
Un-Protected 1 sectors
Erasing Flash…
.. done
Erased 1 sectors
Writing to Flash… done
Protected 1 sectors
=> reset
5.5 工具的安裝
    U-Boot載入Linux核心、Ramdisk或者其它映像時使用一種特殊的映像格式。這種格式包含了一些資訊,如建立時間、作業系統、壓縮格式、映像 型別、映像名和CRC32校驗和。
    mkimage用來建立這種格式的映像檔案或者顯示它包含的資訊。如果使用ELDK,那麼mkimage這個命令已經包含在ELDK中。
    如果你不想使用ELDK,你應該把mkimage安裝在某個能夠直接執行的目錄裡,比如:
$ cp tools/mkimage /usr/local/bin/
5.6 初始化
    初始化你的Makalu板上的U-Boot,你需要通過終端連線板子的串列埠。
    Makalu板的串列埠預設配置是波特率為115200/8N1(115200bps,每個字元8bit,無奇偶校驗,1bit停止位,無握手)。
    如果你的主機是Linux作業系統,我們建議你用kermit或者cu作為終端控制程式。確定硬體和軟體控制流都已經關閉。
5.7 開始的步驟
    在預設配置中,U-Boot執行在一種互動模式,它通過串列埠“UART1”提供命令列形式的使用者介面。
    這意味著U-Boot顯示一個提示符(預設是:=>),等待著接受使用者的輸入。然後你輸入一個命令,按下回車鍵。U-Boot將執行這個命令,然後 又出現提示符等待下一條命令。
    你可以使用help(或者簡單地一個?)來檢視所有的U-Boot命令。它將會列出在你當前配置下所有支援的命令。[請注意到儘管U-Boot提供了很多 配置選項,並不是所有選項都支援各種處理器和開發板,有些選項可能在你的配置中並沒有被選上。]
=> help
? - alias for ‘help’
askenv - get environment variables from stdin
autoscr - run script from memory
base - print or set address offset
bdinfo - print Board Info structure
boot - boot default, i.e., run ‘bootcmd’
bootd - boot default, i.e., run ‘bootcmd’
bootelf - Boot from an ELF image in memory
bootm - boot application image from memory
bootp - boot image via network using BootP/TFTP protocol
bootstrap - program the I2C bootstrap EEPROM
bootvx - Boot vxWorks from an ELF image
cmp - memory compare
coninfo - print console devices and information
cp - memory copy
crc32 - checksum calculation
date - get/set/reset date & time
dhcp - invoke DHCP client to obtain IP/boot params
dtt - Digital Thermometer and Thermostat
echo - echo args to console
eeprom - EEPROM sub-system
erase - erase FLASH memory
exit - exit script
ext2load- load binary file from a Ext2 filesystem
ext2ls - list files in a directory (default /)
fatinfo - print information about filesystem
fatload - load binary file from a dos filesystem
fatls - list files in a directory (default /)
fdt - flattened device tree utility commands
flinfo - print FLASH memory information
getdcr - Get an AMCC PPC 4xx DCR’s value
getidcr - Get a register value via indirect DCR addressing
go - start application at address ‘addr’
help - print online help
icrc32 - checksum calculation
iloop - infinite loop on address range
imd - i2c memory display
iminfo - print header information for application image
imls - list all images found in flash
imm - i2c memory modify (auto-incrementing)
imw - memory write (fill)
imxtract- extract a part of a multi-image
inm - memory modify (constant address)
iprobe - probe to discover valid I2C chip addresses
irqinfo - print information about IRQs
isdram - print SDRAM configuration information
itest - return true/false on integer compare
loadb - load binary file over serial line (kermit mode)
loads - load S-Record file over serial line
loady - load binary file over serial line (ymodem mode)
loop - infinite loop on address range
loopw - infinite write loop on address range
md - memory display
mdc - memory display cyclic
mii - MII utility commands
mm - memory modify (auto-incrementing)
mtest - simple RAM test
mw - memory write (fill)
mwc - memory write cyclic
nand - NAND sub-system
nboot - boot from NAND device
nfs - boot image via network using NFS protocol
nm - memory modify (constant address)
pci - list and access PCI Configuration Space
ping - send ICMP ECHO_REQUEST to network host
printenv- print environment variables
protect - enable or disable FLASH write protection
rarpboot- boot image via network using RARP/TFTP protocol
reginfo - print register information
reset - Perform RESET of the CPU
run - run commands in an environment variable
saveenv - save environment variables to persistent storage
setdcr - Set an AMCC PPC 4xx DCR’s value
setenv - set environment variables
setidcr - Set a register value via indirect DCR addressing
sleep - delay execution for some time
test - minimal test like /bin/sh
tftpboot- boot image via network using TFTP protocol
usb - USB sub-system
usbboot - boot from USB device
version - print monitor version
=>使用 help <command>你可以得到更多的命令資訊:
=> help tftpboot
tftpboot [loadAddress] [[hostIPaddr:]bootfilename]
=>
=> help setenv printenv
setenv name value …
- set environment variable ‘name’ to ‘value …’
setenv name
- delete environment variable ‘name’
printenv
- print values of all environment variables
printenv name …
- print value of environment variable ‘name’
=>
大多數命令可以縮寫,只要字串的內容仍然可以 被確定:
=> help fli tftp
flinfo
- print information for all FLASH memory banks
flinfo N
- print information for FLASH memory bank # N
tftpboot [loadAddress] [[hostIPaddr:]bootfilename]
=>
5.8 首次上電
把主機指定的串列埠和在Makalu板上標有UART1的埠連線,執行終端程式,給Makalu板接上電源。你可以看到如下資訊:
=> reset
U-Boot 1.3.3-rc2-01466-g4f27098 (May 1 2008 - 13:57:57)
CPU: AMCC PowerPC 460EX Rev. A at 600 MHz (PLB=200, OPB=100, EBC=100 MHz)
Security/Kasumi support
Bootstrap Option H - Boot ROM Location I2C (Addr 0×52)
Internal PCI arbiter disabled
32 kB I-Cache 32 kB D-Cache
Board: Canyonlands - AMCC PPC460EX Evaluation Board, 2*PCIe, Rev. 13
I2C: ready
DTT: 1 is 48 C
DRAM: 256 MB (ECC not enabled, 400 MHz, CL3)
FLASH: 64 MB
NAND: 32 MiB
PCI: Bus Dev VenId DevId Class Int
PCIE0: link is not up.
PCIE0: initialization as root-complex failed
PCIE1: link is not up.
PCIE1: initialization as root-complex failed
Net: ppc_4xx_eth0, ppc_4xx_eth1
Type run flash_nfs to mount root filesystem over NFS
Hit any key to stop autoboot: 0
=>
=>
你 可以按下任意鍵來中止倒計數。如果你不那麼做,你可能會看到一些(無關緊要的)錯誤,因為系統沒有初始化。
有時你可能會看到一種資訊:
*** Warning - bad CRC, using default environment
    這條資訊沒有害處,只要你初始化和儲存環境變數之後,它就不會出現了。
    首先,你必須輸入你的開發板的序列號和網絡卡地址。需要特別注意的是,這些引數是防寫的,一旦儲存了就無法改變(通常製造商已經設定好了)。使用U- Boot的setenv命令可以輸入資料,命令後面跟上變數名和值,引數之間用空格(或者Tab符)隔開。例如,使用變數名serial#設定開發板的 ID或者說序列號,變數名ethaddr用於設定乙太網地址:
=> => setenv ethaddr !!!!!!FILL_THIS!!!!!!
=> setenv serial# CF56-216F-400A
    使用printenv確認你已經輸入正確的值:
=> printenv serial# ethaddr
## Error: "serial#" not defined
ethaddr=5e:ed:18:38:81:85
=>
    請仔細核查顯示值是否正確!等儲存之後你將不能更正任何錯誤。如果發現錯誤,請重新啟動開發板。如果檢查無誤,你可以使用saveenv命令永久儲存這些 引數。
=> saveenv
Saving Environment to Flash…
Un-Protected 1 sectors
Un-Protected 1 sectors
Erasing Flash…
. done
Erased 1 sectors
Writing to Flash… done
Protected 1 sectors
Protected 1 sectors
=>
5.9 U-Boot命令介紹
    這一節將介紹U-Boot中最重要的指令。U-Boot可配置性非常強,所以並不是所有的命令都已經在你的硬體平臺上安裝,此外可能也有這兒沒提到的命 令。你可以使用help命令來顯示根據你的配置所有可用的命令列表。
    對於大多數命令,你不必打全這些命令,只需輸入一些字元足以。比如,help可以簡寫為h。
    一些命令的執行依賴於U-Boot的配置以及U-Boot中一些環境變數的定義。
    所有的U-Boot命令都把輸入的數字當作十六進位制的格式。
    不要使用除了退格鍵之外的其它編輯鍵,因為在諸如環境變數中隱藏的字元是很難被發現的。
具體命令略

6. Linux核心的編譯
6.1 下載Linux核心
可以通過git下載到最新的核心,命令如下:
$ cd /opt/eldk/usr/src
$ git clone git://www.denx.de/git/linux-2.6-denx.git linux-2.6-denx
$ cd linux-2.6-denx
6.2 核心的配置及編譯
下面的步驟需要powerpc的交叉開發工具,所以您必須確認您的PATH變數中 有ELDK的編譯工具的地址。
首先使用下面的命令清除以前的編譯資訊:
$ make mrproper
使用下面的命令匯入適合 Makalu開發板的預設配置,這些配置是經過官方多次測試的:
$ make ARCH=powerpc CROSS_COMPILE=ppc_4xx- makalu_defconfig     //匯入預設配置
注:這些預設的配置檔案位於 arch/powerpc/configs/XXX_defconfig ,根據您的開發板的型號選擇。如果找不到相應的配置檔案,可以去arch/ppc/configs/中尋找相應的配置檔案,那裡還有一些。 makalu_defconfig這個就是位於arch/ppc/configs/下面,而arch/powerpc/configs/中沒有。
當 然您還可以自己去修改核心的配置,使用如下命令:
$ make ARCH=powerpc CROSS_COMPILE=ppc_4xx- config           //手動改動配置
或者
$ make ARCH=powerpc CROSS_COMPILE=ppc_4xx- menuconfig           //手動改動配置
注:因為一些問題(尤其是老版本的 核心),"make xconfig"這個命令不被推薦
使用下面的命令編譯核心:
$ make ARCH=powerpc CROSS_COMPILE=ppc_4xx- uImage               //編譯
編譯生成的目標檔案uImage是通過 mkimage(位於U-Boot包中) 建立的,位於/opt/eldk/usr/src/linux-2.6-denx/arch/powerpc/boot/uImage,它可以通過U- Boot來下載和引導
配置和安裝模組使用如下命令:
$ make ARCH=powerpc CROSS_COMPILE=ppc_4xx- modules
$ make ARCH=powerpc CROSS_COMPILE=ppc_4xx- INSTALL_MOD_PATH=/opt/eldk/ppc_4xx modules_install
6.3 安裝
將檔案複製到tftpboot目錄下面,然後通過tftp燒寫:
$ cp arch/powerpc/boot/uImage /tftpboot/uImage

7. 根檔案系統的設計與編譯
7.1 根檔案系統的設計
嵌入式開發中根檔案系統的設計並不是很容易的事,主要的問題是:
(1) 裡面要包括哪些內容
(2)使用哪種檔案系統型別
(3)怎樣儲存和引導
現在假設根檔案系統中的內容我們已經知道,那麼我們主要關注 後面兩點。
我們使用ELDK安裝時生成的映象 SELF (Simple Embedded Linux Framework),它位於 /opt/eldk/<architecture>/images/ 資料夾下,ramdisk_image.gz這個檔案便是。
(1) 解壓ramdisk:
$ gzip -d -c -v /opt/eldk/ppc_4xx/images/ramdisk_image.gz >/tmp/ramdisk_image    //解壓
(2)掛載ramdisk
$ mount -o loop /tmp/ramdisk_image /mnt/tmp                                      //掛載
(3) 建立壓縮檔案,為了避免下面步驟需要root許可權,不包括裝置檔案
$ cd /mnt/tmp
$ tar -zc –exclude=’dev/*’ -f /tmp/rootfs.tar.gz *                            //建立tarball,為了避免下面步驟需要root許可權,不包括裝置檔案
(4)將裝置檔案建立成單獨的壓縮檔案(使用cramfs)
$ tar -zcf /tmp/devices.tar.gz dev/                //將裝置檔案建立成單獨的tarball
$ cd /tmp
(5)取消掛載
$ umount /mnt/tmp               //取消掛載
7.2 根檔案系統的編譯
我們使用ramdisk的形式來生成根檔案系統的映象檔案,一般情況下,它使用ext2檔案系統。
(1)建立目錄,解壓 壓縮檔案
$ cd /opt/eldk/
$ mkdir rootfs
$ cd rootfs
$ tar zxf /tmp/rootfs.tar.gz
(2)我們使用genext2fs來建立ramdisk映象檔案,因為它使用一個簡單的文字檔案來描述設 備,因而不需要root許可權。使用裝置表rootfs_devices.tab:
#<name> <type> <mode> <uid> <gid> <major> <minor> <start> <inc> <count>
/dev d 755 0 0 - - - - -
/dev/console c 640 0 0 5 1 - - -
/dev/fb0 c 640 0 0 29 0 - - -
/dev/full c 640 0 0 1 7 - - -
/dev/hda b 640 0 0 3 0 - - -
/dev/hda b 640 0 0 3 1 1 1 16
/dev/kmem c 640 0 0 1 2 - - -
/dev/mem c 640 0 0 1 1 - - -
/dev/mtd c 640 0 0 90 0 0 2 16
/dev/mtdblock b 640 0 0 31 0 0 1 16
/dev/mtdr c 640 0 0 90 1 0 2 16
/dev/nftla b 640 0 0 93 0 - - -
/dev/nftla b 640 0 0 93 1 1 1 8
/dev/nftlb b 640 0 0 93 16 - - -
/dev/nftlb b 640 0 0 93 17 1 1 8
/dev/null c 640 0 0 1 3 - - -
/dev/ptyp c 640 0 0 2 0 0 1 10
/dev/ptypa c 640 0 0 2 10 - - -
/dev/ptypb c 640 0 0 2 11 - - -
/dev/ptypc c 640 0 0 2 12 - - -
/dev/ptypd c 640 0 0 2 13 - - -
/dev/ptype c 640 0 0 2 14 - - -
/dev/ptypf c 640 0 0 2 15 - - -
/dev/ram b 640 0 0 1 0 0 1 2
/dev/ram b 640 0 0 1 1 - - -
/dev/rtc c 640 0 0 10 135 - - -
/dev/tty c 640 0 0 4 0 0 1 4
/dev/tty c 640 0 0 5 0 - - -
/dev/ttyS c 640 0 0 4 64 0 1 8
/dev/ttyp c 640 0 0 3 0 0 1 10
/dev/ttypa c 640 0 0 3 10 - - -
/dev/ttypb c 640 0 0 3 11 - - -
/dev/ttypc c 640 0 0 3 12 - - -
/dev/ttypd c 640 0 0 3 13 - - -
/dev/ttype c 640 0 0 3 14 - - -
/dev/ttypf c 640 0 0 3 15 - - -
/dev/zero c 640 0 0 1 5 - - -
具體的格式描述請參見genext2fs的幫助文件。
(3) 使用genext2fs來建立一個ext2檔案系統的映象:
$ ROOTFS_DIR=/opt/eldk/rootfs # 路徑
$ ROOTFS_SIZE=8192 # 檔案系統映象的大小,如果此值太小,當生成的檔案超過此值時,會報錯
$ ROOTFS_FREE=100 # free space wanted
$ ROOTFS_INODES=380 # number of inodes
$ ROOTFS_DEVICES=rootfs_devices.tab # device description file
$ ROOTFS_IMAGE=ramdisk.img # generated file system image
$ genext2fs -U /
-d ${ROOTFS_DIR} /
-D ${ROOTFS_DEVICES} /
-b ${ROOTFS_SIZE} /
-r ${ROOTFS_FREE} /
-i ${ROOTFS_INODES} /
${ROOTFS_IMAGE}
(4)壓縮檔案
$ gzip -v9 ramdisk.img
(5)建立適合U-Boot的images:
$ mkimage -T ramdisk -C gzip -n ‘Test Ramdisk Image’ />
  -d ramdisk.img.gz uRamdisk

至此,ELDK的開發環境便基本搭建完成.

相關推薦

ELDK中文開發手冊源自DENX,E福音

2. 緒論      首先,我們介紹如何安裝交叉編譯開發工具Embedded Linux Development Kit(ELDK),這個開發套件你很有可能會用到——至少當你在標準的x86 PC上使用Linux或者Sun Solaris系統作為開發環境的時候,你會需要它的。      然後,我們會闡述

MVC路由學習:自定義路由參數用戶到參數名,重新定義路由規則

route sys 工具 str optional href clas local amp 一,項目有需求將項目地址中的參數名不顯示給用戶看 在MVC定義一個方法:     public ActionResult GetUserInfo(string Name, str

curl -l的資訊詳解這樣還,就沒天理了

[[email protected] ~]# curl -I "http://www.baidu.com" HTTP/1.1 200 OK Accept-Ranges: bytes Cache-Control: private, no-cache, no-store, proxy-reva

NGUI panel裁剪shader解讀一般人估計,慎點

單層panel邊緣漸隱 ClipRange: 1/cy.z,1/cr.w,cr.x/cr.z,cr.y/cr.w 解讀:cr.x cr.y panel的中心座標, cr.z半寬,cr.w 半高 ClipArgs: cr.z/softness.x, cr.

有了四步解題法模板,再也害怕動態規劃!算我輸

導言 動態規劃問題一直是演算法面試當中的重點和難點,並且動態規劃這種通過空間換取時間的演算法思想在實際的工作中也會被頻繁用到,這篇文章的目的主要是解釋清楚 什麼是動態規劃,還有就是面對一道動態規劃問題,一般的 思考步驟 以及其中的注意事項等等,最後通過幾道題目將理論和實踐結合。 什麼是動態規劃 如果你還沒有聽

英文件,是我們英語太差嗎?

      最近在與同事交流中,談論到了一個常見的問題,閱讀英文技術文件,為什麼不行呢?是英語太差嗎?經過一番的討論,我們發現似乎也不是那麼的一回事。       我們在一些技術群中,總會經常遇到一些同行朋友問一些:redis怎麼用?mybatis怎麼使?spring原始碼

IntelliJ IDEA 插件 阿裏巴巴Java開發手冊Alibaba Java Coding Guidelines

修改 rdquo 點擊 就會 mic 綠色 ips 異常 pan 以前看到過個:Java開發手冊(阿裏巴巴-公開版),這是個pdf文檔,裏面描述了一些Java開發的規約,裏面確實有很多好用的規約,要是在學校就有機會看看的話,那麽,在畢業之後,實際工作中就會少很多坑。現在,阿

【Hadoop】HDFS開發手冊JavaAPI

文章目錄 前言 準備 Core Code 建立資料夾 建立新檔案 讀取檔案 檔案是否存在 下載檔案從指定目錄 上傳檔案到指定目錄 刪除檔案或資料夾 追加內容 重新命名檔案或資

【Spark】SparkRDD開發手冊JavaAPI函數語言程式設計

文章目錄 前言 遇到的大坑! 裝備 Core Github 總結 前言 不用怕,問題不大~ github已更新 scala版過段時間會再更新 自誇一下… 老實說,相比那些抄襲來抄襲去的

iOS開發手冊精華篇

1.專案基礎 1.1 專案新建資訊 Product Name:工程名。 Team:開發者賬號資訊,沒有選擇None,個人開發者賬號(含Personal Team),公司/企業賬號(如:XXX Co.,LTD),也可以暫時選擇None,後續再配置除錯。 Organi

Mysql 中文參考手冊摘錄1 --資料庫連線

序論:         本文摘自網路,但暫時還沒有找到作者的署名,所以暫時空缺原作者,若有侵權行為請作者及時與我聯絡。         這是一個MySQL 5.7 的中文參考手冊,翻譯自官方文件,需要更詳細、準確的資訊 請查閱官方文件。 連線和斷開伺服器:  啟動m

全棧工程師開發手冊原創

最近開始轉行做大資料,大資料中很重要的一部分是資料的收集,我們公司主要用的資料收集工具是Fluentd,由於Fluentd的配置比較多,有可能配置過一次後就會忘了。我這邊在學習Fluentd配置的同時也對這些配置進行一些記錄,方便後面再用到時可以快速的查詢。

opentcs 夜光開發手冊【針對最新4.12版本】

夜光序言: 我是人間惆悵客, 知君何事淚縱橫, 斷腸聲裡憶平生。     正文: 新特性: 為車輛引入一個顯式整合級別屬性,該屬性表示車輛應該整合到系統中的程度。(將整合級別設定為TO_BE_UTILIZED,取代了以前用於整合車輛的手動

全棧工程師開發手冊原創全棧工程師,前端工程師,後端工程師,架構師,爬蟲工程師,資料分析師,大資料工程師,資料探勘工程師,機器學習工程師,欒鵬全棧

matlab2c資料分析 原創開發matlab2c動態連結庫,使用c++實現matlab函式,包含matlab中函式的使用,c++的實現原始碼,函式的呼叫示例。對於資料分析,機器學習有很大幫助

java開發手冊阿裏巴巴——編程規約部分

commit save inf 可見 抽取 config 多個 doc rop (一)命名風格 3. 【強制】類名使用 UpperCamelCase 風格,但以下情形例外:DO / BO / DTO / VO / AO / PO / UID 等。 正例:MarcoPolo

TensorRT4.0開發手冊1

第一章 綜述NVIDIA的TensorRT是一個基於GPU高效能前向運算的C++庫。TensorRT匯入網路定義,通過合併tensors與layers,權值轉換,選擇高效中間資料型別,基於層引數與效能評估的選擇,來進行網路優化。TensorRT提供模型匯入途徑來幫助你對訓練好

aurelia中文開發手記:寫在前面

5月中旬開始學習前端,從大神處獲得一套有如神助的框架叫aurelia(奧瑞利亞)。學習筆記開始。 以前我開發桌面小應用開始,使用了visual studio,不得不說,這個軟體確實整合度高的令人髮指,

ES6讓普通JS開發的基本語法快速上手ES6

ES6 簡介 ECMAScript和JavaScript的關係是,前者是後者的規格,後者是前者的一種實現。一般來說,這兩個詞是可以互換的。 let命令 ES6新增了let命令,用來宣告變數,它的用法類似於var,但是所宣告的變數,只在let

《阿里巴巴Java開發手冊正式版》--MySQL規約

(一)建表規約 1.【強制】表達是與否概念的欄位,必須使用 is_xxx的方式命名,資料型別是 unsigned tinyint( 1表示是,0表示否),此規則同樣適用於 odps建表。 說明:任何欄位如果為非負數,必須是 unsigned。 個人備註:

TensorRT3.0開發手冊 SamplePlugin:Implementing A Custom Layer

3.8 SamplePlugin:Implementing A Custom LayerSamplePlugin例程展示瞭如何在TensorRT中新增一個使用者自定義層。例程中實現瞭如何將MNIST例程中原本直接cuBLAS庫實現的最後全卷積層進行替換。注:當前Plugin層