• 正文
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

飛凌嵌入式ElfBoard ELF 1板卡-busybox構(gòu)建根文件系統(tǒng)之添加必要目錄和庫

06/23 17:47
385
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

一、添加目錄

使用mkdir分別建立lib、dev、proc、mnt、sys、tmp、root、usr/lib文件夾:

elf@ubuntu:~/nfs_rootfs/rootfs$ mkdir lib

elf@ubuntu:~/nfs_rootfs/rootfs$ mkdir dev

elf@ubuntu:~/nfs_rootfs/rootfs$ mkdir proc

elf@ubuntu:~/nfs_rootfs/rootfs$ mkdir mnt

elf@ubuntu:~/nfs_rootfs/rootfs$ mkdir sys

elf@ubuntu:~/nfs_rootfs/rootfs$ mkdir tmp

elf@ubuntu:~/nfs_rootfs/rootfs$ mkdir root

elf@ubuntu:~/nfs_rootfs/rootfs$ mkdir usr/lib

elf@ubuntu:~/nfs_rootfs/rootfs$ ls

bin ?dev ?lib ?linuxrc ?mnt ?proc ?root ?sbin ?sys ?tmp ?usr

二、添加lib庫內(nèi)容

在rootfs目錄中,使用如下命令,將交叉編譯工具中的lib庫復(fù)制到lib下:

elf@ubuntu:~/nfs_rootfs/rootfs$ cp -d /opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi/lib/*so* ./lib

然后繼續(xù)以下操作,將lib中的ld-linux-armhf.so.3軟連接,更改為實體。

刪除軟連接:

elf@ubuntu:~/nfs_rootfs/rootfs$ rm lib/ld-linux-armhf.so.3

復(fù)制實體:

elf@ubuntu:~/nfs_rootfs/rootfs$ cp /opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi/lib/ld-linux-armhf.so.3 ./lib

三、添加usr/lib庫內(nèi)容

在rootfs目錄中,使用如下命令,將交叉編譯工具中的/usr/lib庫復(fù)制到/usr/lib下:

elf@ubuntu:~/nfs_rootfs/rootfs$ cp -rd /opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi/usr/lib/*so* ./usr/lib

四、添加啟動文件

在/busybox/examples/etc文件夾中存在有啟動相關(guān)的文件,我們將該etc文件夾復(fù)制到我們創(chuàng)建的文件系統(tǒng)中:

elf@ubuntu:~/nfs_rootfs/rootfs$ cp -rf /home/elf/work/busybox-1.32.1/examples/bootfloppy/etc/ .

復(fù)制完成之后,我們打開etc目錄:

elf@ubuntu:~/nfs_rootfs/rootfs$ ls etc/

fstab ?init.d ?inittab ?profile

其中:

inittab是一個存儲有初始化配置的文本文件,它有若干行指令所組成,這些指令都按照一定的格式進(jìn)行書寫。內(nèi)核在經(jīng)過一系列初始化工作之后,執(zhí)行的第一個用戶進(jìn)程是init進(jìn)程,該進(jìn)程執(zhí)行程序是sbin/目錄下的init程序。init程序會解析inittab文件,獲取其中的配置信息,并按照其中配置創(chuàng)建各種子進(jìn)程。

inittab文件中每個條目用來定義一個子進(jìn)程,并確定它的啟動方法,格式如下 :

Identifier:run_level:action:process

(一)Identifier:對于busybox來說,表示這個進(jìn)程要使用的控制臺(即標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出、標(biāo)準(zhǔn)錯誤設(shè)備)。如省略,則使用與init進(jìn)程一樣的控制臺。

(二)run_level:系統(tǒng)運(yùn)行級別,對于Busybox init程序,這個字段無意義,可以省略。

(三)action:表示init程序如何控制這個子進(jìn)程。

action字段一般有如下定義:

action定義 執(zhí)行說明
sysinit 系統(tǒng)啟動后最先執(zhí)行的進(jìn)程,init程序會等待它執(zhí)行完成之后,才能執(zhí)行下一進(jìn)程
wait Sysinit進(jìn)程執(zhí)行結(jié)束后執(zhí)行的第二個進(jìn)程,init程序會等待它執(zhí)行完成之后,才能執(zhí)行下一進(jìn)程
once Wait進(jìn)程執(zhí)行結(jié)束后,執(zhí)行的進(jìn)程,init程序會等待它執(zhí)行完成之后,才能執(zhí)行下一進(jìn)程
respawn Once進(jìn)程結(jié)束之后,init進(jìn)程監(jiān)測發(fā)現(xiàn)子進(jìn)程退出時,重新啟動子程序
askfirst 與respawn類似,也是在Once進(jìn)程結(jié)束之后,init進(jìn)程監(jiān)測發(fā)現(xiàn)子進(jìn)程退出時,重新啟動子程序,不過init進(jìn)程先輸出“Please press Enter to actvie this console”,等用戶輸入回車鍵之后才啟動子進(jìn)程
shutdown 重啟關(guān)閉系統(tǒng)命令時halt/reboot/poweroff/SIGQUIT啟動子進(jìn)程
restart 重啟時執(zhí)行子進(jìn)程
ctrlatldel 按下Ctr+Alt+del組合鍵時執(zhí)行子進(jìn)程

(四)<process>:要執(zhí)行的程序,它可以是可執(zhí)行程序,也可以是腳本

五、修改inittab文件

我們可以打開etc/inittab文件,詳細(xì)看一下:

::sysinit:/etc/init.d/rcs

::respawn:-/bin/sh

tty2::askfirst:-/bin/sh

::ctrlaltdel:/bin/umount -a -r

::sysinit:/etc/init.d/rcS表示系統(tǒng)啟動后會首先運(yùn)行etc/init.d/rcS文件,該文件是一個腳本文件,在此腳本文件中,我們可以執(zhí)行一系列初始化操作,比如設(shè)置環(huán)境變量路徑,開啟程序,掛載文件系統(tǒng)、配置網(wǎng)絡(luò)等等。

::respawn:-/bin/sh表示當(dāng)子進(jìn)程-/bin/sh退出之后,重新開啟。

tty2::askfirst:-/bin/sh表示-/bin/sh交互使用的控制臺是tty2,子進(jìn)程有"-"字符,表示這個程序是可交互的。

::ctrlaltdel:/sbin/unmount -a –r按下組合鍵后卸載文件系統(tǒng)。

我們將inittab文件進(jìn)行按照我們想要的功能進(jìn)行簡單修改:

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

ttymxc0::askfirst:-/bin/sh

::restart:/sbin/init

::crtlaltdel:/sbin/reboot

::shutdown:/sbin/unmount -a -r

::shutdown:/sbin/swaoff -a

然后我們打開init.d/rcS文件:

#! /bin/sh

/bin/mount -a

該腳本文件只有一行命令,我們進(jìn)行簡單修改,增加mdev系統(tǒng)功能,mdev系統(tǒng)啟動和熱插拔或動態(tài)加載驅(qū)動程序時,自動產(chǎn)生驅(qū)動程序所需的節(jié)點文件:

#! /bin/sh

mount -a

echo /sbin/mdev > /proc/sys/kernel/hotplug

mdev -s

#./usr/my_app

mount –a命令用于掛載文件系統(tǒng),掛載所有的應(yīng)該被掛載的文件系統(tǒng),在busybox中mount -a時busybox會去查找etc/fstab文件系統(tǒng)列表文件,這個文件按照一定的格式列出來所有應(yīng)該被掛載的文件系統(tǒng)。

接下來的兩行命令,是mdev系統(tǒng)功能,mdev系統(tǒng)啟動和熱插拔 或動態(tài)加載驅(qū)動程序時,自動創(chuàng)建設(shè)備節(jié)點。

最后的./usr/my_app是我添加的一個測試程序,系統(tǒng)啟動之后,會自動執(zhí)行該程序,這里先注釋掉。

剛才說執(zhí)行mount –a命令時,busybox會去查找etc/fstab文件系統(tǒng)列表文件,我們打開etc/fstab文件:

proc ??/proc ???proc ???defaults ???0 ???0

可以看到這里只列出一個proc文件系統(tǒng),我們繼續(xù)在此文件中添加:

proc ??/proc ???proc ???defaults ???0 ???0

sysfs ??????????/sys ???sysfs ??defaults ???0 ??0

tmpfs ??????????/tmp ???tmpfs ??defaults ???0 ??0

tmpfs ??????????/dev ???tmpfs ??defaults ???0 ??0

最后,在etc目錄下還有一個profile文件,增加關(guān)于應(yīng)用程序、庫文件的路徑環(huán)境變量配置:

PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib

export PATH LD_LIBRARY_PATH

相關(guān)推薦