步驟跟編譯linux核心時很像#make menuconfig出現一個圖形介面,選擇Busybox Settings,這裡可以對編譯、安裝以及調試等模式進行配置。然後選擇Build Options,對交叉編譯器以及編譯方式進行配置。其中的第一項是Build Busybox as a static binary(no shared
libs),如果選擇上,則busybox將以靜態形式進行編譯,否則將以動態方式編譯。此外,還需要對交叉編譯環境進行配置,選擇其中的Cross
Compiler Perfix,輸入交叉編譯器的首碼,我們的嵌入式平台上使用的是arm-uclinux-linux的交叉編譯工具。這裡我們先選擇靜態編譯,動態方式的稍後再講,注意Build with Large File Support (for
accessing files > 2 GB)不要選(預設是選上的),否則編譯後會出現如下錯誤:miscutils/lib.a(readahead.):In function ‘readahead_main’readahead.(.text.readahead_main+0×70):undefined reference to
‘readahead’collect2:ld returned 1 exit statusmake :***[busybox_unstripped ]Error 1
3
調試時要通過串口發送訊息到終端顯示。因此串口控制台和終端2個裝置檔案是必不可少的。#mkdir dev#mknod dev/console c 5 1#mknod dev/ttyAMA0 c 204 64在啟動參數中,設定console=ttyAMA0
7
添加其他常用目錄
可以選擇home、root、proc、mnt、lib、var、opt、tmp。此時,一個基本的檔案系統的功能就已經完成了。可以採用NFS進行調試。但是,此時你可能會遇到如下問題,系統登入後終端上會不斷列印:cannot open /dev/ttyS2:No such file or directory.原因出在/etc目錄下的inittab檔案,我們看一下其內容:::sysint:/etc/init.d/rcS::respawn:-/bin/shtty2::askfirst:-/bin/sh::ctrlaltdel:/bin/umount –a -r這條語句表示在第3個虛擬終端開啟一個無須登入驗證的shell。而我們之前沒有建立這個tty2裝置,因此會出錯。解決的辦法有2個:一是屏
蔽該語句,二是建立該裝置節點。我們選擇將其屏蔽。
8
相關問題
8.1
使用動態方式編譯 busybox 進入Build Options時,不要選擇Build Busybox as a static
binary,其他所有操作步驟跟靜態編譯一樣,你會發現這樣建立的檔案系統無法啟動,終端上列印出如下訊息:Kernel panic-not synving:No init found. Try passing init=option to
kernel.為什麼會出現這種問題呢?這就得回到兩種編譯方式的特點上來。靜態編譯時間是將所用到的庫檔案一起編譯了進去,而動態編譯時間是在需要時才調用相應
的庫。我們選擇動態編譯後,沒有添加任何庫檔案就運行,顯然是會出錯的。那麼如何查看busybox可執行檔裡使用的庫呢。Readelf這個工具提供
瞭解決辦法。使用如下命令,參數d表示將檔案中所有的動態部分予以顯示。# arm-uclibc-linux-readelf -d busybox Dynamic section at offset 0xca014 contains 18 entries:
標記
類型