當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導讀] 一、編譯1.busybox簡介熟悉嵌入式Linux的人對busybox一定不會陌生。它被非常形象地稱為嵌入式Linux系統(tǒng)中的“瑞士軍刀”,因為它將許多常用的UNIX命令和工具結合

 一、編譯

1.busybox簡介

熟悉嵌入式Linux的人對busybox一定不會陌生。它被非常形象地稱為嵌入式Linux系統(tǒng)中的“瑞士軍刀”,因為它將許多常用的UNIX命令和工具結合到了一個單獨的可執(zhí)行程序中。雖然與相應的GNU工具比較起來,busybox所提供的功能和參數(shù)略少,但在比較小的系統(tǒng)(例如啟動盤)或者嵌入式系統(tǒng)中,已經足夠了。

下面就來一步步地用busybox從無到有地建立一個全新的Linux文件系統(tǒng)。

2. 編譯busybox

完整的源代碼可以從http://www.busybox.net下載,壓縮包大小為1.3 MB左右。將源碼解壓之后,進入到busybox1.00目錄中,運行make menuconfig可以打開它的編譯界面。這個界面和Linux內核編譯有些接近。在這個菜單界面中除了可以對最終編譯到可執(zhí)行文件中的命令進行選擇外,還有很多其他設置也是非常重要的。下面三個目錄是很多人都會感興趣的:

我改變了以下選項:

General Configuration --->

[*] Support for devfs

Build Options --->

[ ] Build BusyBox as a static binary (no shared libs)

[*] Do you want to build BusyBox with a Cross Compiler?

/usr/local/arm/3.4.1/bin/arm-linux-

(/usr/local/arm/3.4.1/bin/arm-linux-) Cross Compiler prefix

Installation Options --->

(./_install) BusyBox installation prefix

然后到當前目錄建立一個_install的文件夾。

Linux Ext2 FS Progs --->

[*] e2fsck

Linux Module Utilities --->

[*] insmod

[*] rmmod

[ ] lsmod

[ ] modprobe

--- Options common to multiple modutils

[*] Support tainted module checking with new kernels (NEW)

[ ] Support version 2.2.x to 2.4.x Linux kernels

[*] Support version 2.6.x Linux kernels (NEW)

注意此處的選擇,可能會影響到編譯不過。

Networking Utilities --->

[*] ftpget

[*] ftpput

...

[*] wget

...

[*] telnet

[*] Pass TERM type to remote host (NEW)

[*] Pass USER type to remote host (NEW)

[*] telnetd

注釋:tlenetd命令是一個遠程登錄服務程序,把它編譯進busybox中會為將來的調試提供很多的方便。

Shells --->

[*] Enable builtin version of 'echo'

Linux System Utilities --->

[*] mount

[*] Support mounting NFS file systems

注釋:這個比較重要,否則會在后來的mount時候出現(xiàn)mount program didn't pass remote address的錯誤。

在Installation Options里面可以設置安裝的路徑,即設置為新文件系統(tǒng)的根目錄。當然也可以用缺省的 _install目錄,安裝之后再復制到新文件系統(tǒng)中去。

在設置Login/Password Management Utilities的時候,為了免去配置glibc的麻煩,最好設置使用busybox自己的password和shadow文件的功能(Use internal password and group functions rather than system functions)。

busybox提供的命令無疑比較全面,但它的缺省配置還不能構成一個功能比較完備的文件系統(tǒng)。必須要添加的命令有Login/Password Management Utilities里面的getty、login和passwd,這些命令從前是由另外一個軟件包tinylogin所提供的。當然,如果不需要一個交互的登錄界面,這些命令也可以去掉。通過設定內核參數(shù)init=/bin/sh可以在系統(tǒng)啟圖1busybox的編譯配置界面動后直接得到一個shell。

設置完畢后保存、退出,執(zhí)行make; make install命令,busybox將在未來的根文件系統(tǒng)中建立/usr、/bin、/sbin等目錄。從中可以看到,編譯好的busybox可執(zhí)行文件和其他應用命令的符號鏈接。典型的busybox文件大小在動態(tài)鏈接的情況下是300 KB左右,靜態(tài)鏈接為800 KB左右,用它實現(xiàn)的文件系統(tǒng)完全可以控制在1 MB以下。但就目前為止,得到的還不是一個完整可用的文件系統(tǒng),必須要在這個基礎上添加一些必要的文件,讓它可以工作。

編譯的時候可能出錯:variable or field '__user' declared void

可以將

/usr/local/arm/3.4.1/arm-linux/sys-include/linux/fd.h

中修改下面的語句,編譯完成后再修改回去。

//void __user *data;

void *data;

3. 安裝

make install

二、制作文件系統(tǒng)

用已經編譯好的busybox制作完善的能自啟動的文件系統(tǒng)

1、建立文件夾arm2410-root-1.0:

mkdir /ebutek/arm2410-root-1.0

export ARM2410HOME=/ebutek/arm2410-root-1.0

export BUSYBOXHOME=/ebutek/busybox-1.1.0

2、將busybox編譯后的文件拷貝到arm2410-root-1.0.

cp -fr $BUSYBOXHOME/_install/* $arm2410HOME

拷貝后可以看到$arm2410HOME下的文件如下:

ls -all $arm2410HOME

總計 20

drwxr-xr-x 5 root root 4096 01-24 13:58 .

drwxr-xr-x 16 root root 4096 01-24 13:56 ..

drwxr-xr-x 2 root root 4096 01-24 13:58 bin

lrwxrwxrwx 1 root root 11 01-24 13:58 linuxrc -> bin/busybox

drwxr-xr-x 2 root root 4096 01-24 13:58 sbin

drwxr-xr-x 4 root root 4096 01-24 13:58 usr

3、創(chuàng)建其它文件夾:

cd $arm2410HOME

mkdir mnt root var tmp proc boot etc lib dev

mkdir var/{lock,log,mail,run,spool}

3、將交叉編譯器中的busybox需要的lib庫文件拷貝過來。

在/usr/local/arm/3.4.1/arm-linux/lib中找到如下文件和鏈接:

-rwxrwxrwx 192519 ld-2.3.2.so

lrwxrwxrwx 111 ld-linux.so.2 -> ld-2.3.2.so

-rwxrwxrwx 1 1190032 libc-2.3.2.so

lrwxrwxrwx 113 libc.so.6 -> libc-2.3.2.so

-rwxr-xr-x 118348 libcrypt-2.3.2.so[!--empirenews.page--]

lrwxrwxrwx 117 libcrypt.so.1 -> libcrypt-2.3.2.so

將其拷貝到$arm2410HOME/lib中。

(可以編寫一個腳本:vi envCp,將下面的命令拷貝至腳本然后執(zhí)行即可:執(zhí)行chmod u+rx envCp,然后./envCp)

cp -l /usr/local/arm/3.4.1/arm-linux/lib/ld-2.3.2.so $arm2410HOME/lib

cp -l /usr/local/arm/3.4.1/arm-linux/lib/ld-linux.so.2 $arm2410HOME/lib

cp -l /usr/local/arm/3.4.1/arm-linux/lib/libc-2.3.2.so $arm2410HOME/lib

cp -l /usr/local/arm/3.4.1/arm-linux/lib/libc.so.6 $arm2410HOME/lib

cp -l /usr/local/arm/3.4.1/arm-linux/lib/libcrypt-2.3.2.so $arm2410HOME/lib

cp -l /usr/local/arm/3.4.1/arm-linux/lib/libcrypt.so.1 $arm2410HOME/lib

拷貝后檢查一下:

ls -all $arm2410HOME/lib,應該和上面相同,包括文件及其鏈接。

4、設定etc,準備啟動:

將busybox源代碼 example/bootfloopy/etc目錄中的文件拷貝過來到$arm2410HOME/etc。

cp -fr $BUSYBOXHOME/examples/bootfloppy/etc/* $arm2410HOME/etc

etc文件夾是許多系統(tǒng)配置文件保存的地方。這些文件非常重要,如果配置錯誤,就可能影響系統(tǒng)的啟動。busybox源代碼 example/bootfloopy/etc目錄中的文件算是一個簡單的例子,可以把其中的文件拷貝過來作為基礎。(在 example/bootfloopy目錄中的一些腳本和文檔也很值得閱讀)

首先inittab文件是系統(tǒng)啟動后所訪問的第一個腳本文件,后續(xù)啟動的文件都由它指定。這個文件的格式和普通微機Linux上的inittab是有區(qū)別的,其具體含義可以參考busybox的文檔。下面是一個比較簡單的例子:

::sysinit:/etc/init.d/rcS

tty0::respawn:/sbin/getty 38400 tty0

tty2::askfirst:/bin/sh

::ctrlaltdel:/sbin/reboot

::shutdown:/bin/umount ar

::shutdown:/bin/mount / o remount,ro

其中第一行指定了系統(tǒng)的啟動腳本為/etc/init.d/rcS;第二行指定在第一個虛擬終端打開一個登錄會話;第三行指定在第三個虛擬終端打開一個無須登錄驗證的shell;第四行指定了當按下ctrl+alt+del組合鍵時的執(zhí)行命令;最后兩行指定了關機時執(zhí)行的操作。

fstab文件定義了文件系統(tǒng)的各個“掛接點”,需要與實際的系統(tǒng)相配合。一個簡單的fstab文件如下:proc/procprocdefaults00

/dev/hda1/ext2rw,noauto01

devpts/dev/ptsdevptsdefaults00

其中第三行是為UNIX PTYs準備的,telnetd要用到。

profile 文件是終端登錄之后首先運行的腳本,這里可以不去管它。我們比較關心的是系統(tǒng)在無人登錄的情況下有哪些程序要執(zhí)行。從inittab文件可以看出系統(tǒng)啟動之后要運行/etc/init.d/rcS腳本,需要啟動的程序和需要進行的設置都可以寫在這里面。一個可能的rcS文件如下:

#! /bin/sh

echo e 'Starting System'

ifconfig lo 127.0.0.1

ifconfig eth0 192.168.0.100

hostname F /etc/hostname

/bin/mount / o remount,rw

/bin/mount /proc

/bin/mount /dev/pts

/usr/sbin/telnetd

dmesg > /var/log/dmesg

為了滿足終端登錄用戶驗證的要求,etc目錄下還需要有passwd、group和shadow (在編譯busybox時如果不選擇shadow功能將不需要這個文件)。這些文件至少要包含 root用戶的定義,如下所示:

passwd:

root:x:0:0:root:/root:/bin/sh

group:

root:x:0:

shadow:

root::12179:0:99999:7:::

其中,如果shadow (對于不支持shadow的系統(tǒng)則是passwd )文件的第一個冒號和第二個冒號之間沒有內容,表示這個用戶登錄不需要密碼。如果需要設定密碼或者增加新的登錄用戶,就可以參考開發(fā)主機上的相應文件,或者在目標系統(tǒng)啟動之后用passwd命令和adduser命令完成。

最后還可以給目標機起一個名字,在/etc目錄下建立文件hostname,將起好的名字寫到里面。前面介紹的啟動腳本rcS,通過hostname命令把文件的內容設置為機器名。

5、制作yaffs文件系統(tǒng):

找到y(tǒng)affs制作工具mkyaffsimage,將其拷貝到/bin目錄下,以便于利用系統(tǒng)環(huán)境變量能找到,然后用下面的命令:

mkyaffsimage filesystem root.yaffs

就可以filesystem目錄制作成一個名叫root.yaffs的映像。

6、用uboot將yaffs文件系統(tǒng)下載到目標板:

(1)準備tftp下載

將制作好的yaffs文件系統(tǒng)映像拷貝到/tftpboot下,修改其權限至少為755, 然后重新啟動 xinetd 服務。

chmod 755 root.yaffs

/etc/init.d/xinetd restart

(2)下載到目標板

啟動目標板到uboot,在minicom下輸入以下命令:

tftp 33000000 root.yaffs

下載完成后uboot會返回文件的大小,假設為x

nand erase 230000 3dcc000(此處擦除的要比較大,因為內核要掛載一些文件)

nand write.yaffs 33000000 230000 x

重新啟動目標板,如果能啟動到busybox提示符即可。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉