0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何完善根文件系統(tǒng)

CHANBAEK ? 來(lái)源:嵌入式攻城獅 ? 作者:安迪西 ? 2023-04-18 15:26 ? 次閱讀

1. 完善根文件系統(tǒng)

在用 BusyBox 構(gòu)建根文件系統(tǒng)一文中介紹了根文件系統(tǒng)的制作,rootfs制作完成后測(cè)試時(shí),提示無(wú)法運(yùn)行“/etc/init.d/rcS”這個(gè)文件,說(shuō)明rootfs仍然不夠完善,下面將介紹如何完善根文件系統(tǒng)。

1.1 創(chuàng)建 /etc/init.d/rcS 文件

rcS 是個(gè) shell腳本,Linux內(nèi)核啟動(dòng)后需要啟動(dòng)一些服務(wù),rcS就是規(guī)定啟動(dòng)哪些文件的腳本文件。 在 rootfs中創(chuàng)建 /etc/init.d/rcS文件,命令如下:

mkdir -p etc/init.d/
cd etc/init.d/
touch rcS

然后在rcS文件中輸入如下內(nèi)容:

1 #!/bin/sh 
2 
3 PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH 
4 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib 
5 export PATH LD_LIBRARY_PATH 
6 
7 mount -a 
8 mkdir /dev/pts 
9 mount -t devpts devpts /dev/pts 
10 
11 echo /sbin/mdev > /proc/sys/kernel/hotplug 
12 mdev -s
  • 第 1 行,表示這是一個(gè) shell 腳本
  • 第 3 行,PATH 環(huán)境變量保存著可執(zhí)行文件可能存在的目錄
  • 第 4 行,LD_LIBRARY_PATH 環(huán)境變量保存著庫(kù)文件所在的目錄
  • 第 5 行,使用 export 來(lái)導(dǎo)出上面這些環(huán)境變量,相當(dāng)于聲明“全局變量”
  • 第 7 行,使用 mount 命令來(lái)掛載所有的文件系統(tǒng),這些文件系統(tǒng)由文件 /etc/fstab來(lái)指定,所以后續(xù)還要?jiǎng)?chuàng)建 /etc/fstab文件
  • 第 8 和 9 行,創(chuàng)建目錄/dev/pts,然后將 devpts掛載到 /dev/pts目錄中
  • 第 11 和 12 行,使用 mdev 來(lái)管理熱插拔設(shè)備,通過(guò)這兩行,內(nèi)核就可以在 /dev 目錄下自動(dòng)創(chuàng)建設(shè)備節(jié)點(diǎn)

創(chuàng)建好rcS文件后,賦予其可執(zhí)行權(quán)限:

chmod 777 rcS

1.2 創(chuàng)建 /etc/fstab 文件

fstab文件是在 Linux開(kāi)機(jī)以后自動(dòng)配置哪些需要自動(dòng)掛載的分區(qū),格式如下:

<file system> <mount point> <type> <options> <dump> <pass>
  • file system:要掛載的特殊的設(shè)備,也可以是塊設(shè)備,比如/dev/sda 等
  • mount point:掛載點(diǎn)必須為已經(jīng)存在的目錄
  • type:文件系統(tǒng)類(lèi)型,比如 ext2、ext3、proc、romfs、tmpfs 等
  • options:掛載選項(xiàng),用于設(shè)置掛載參數(shù),一般使用 defaults默認(rèn)選項(xiàng)
    – defaults:rw, suid, dev, exec, auto, nouser, and async
    – auto:系統(tǒng)自動(dòng)掛載,fstab默認(rèn)就是這個(gè)選項(xiàng)
    – noauto :開(kāi)機(jī)不自動(dòng)掛載
    – nouser:只有超級(jí)用戶(hù)可以?huà)燧d
    – ro:按只讀權(quán)限掛載
    – rw:按可讀可寫(xiě)權(quán)限掛載
    – user:任何用戶(hù)都可以?huà)燧d
  • dump:為 1 表示允許備份,為 0 不備份,一般設(shè)置為 0
  • pass:磁盤(pán)檢查設(shè)置,為 0 表示不檢查。 根目錄‘/’設(shè)置為 1,其他的都不能設(shè)置為 1,其他的分區(qū)從 2 開(kāi)始。 一般不在 fstab 中掛載根目錄,因此這里一般設(shè)置為 0

在 rootfs根文件系統(tǒng)中創(chuàng)建 /etc/fstab文件:

cd etc/
touch fstab

fstab文件內(nèi)容如下:

#
proc 		 /proc 	 proc 	 defaults  0 	    0
sysfs 		 /sys 		 sysfs  defaults  0 	    0
tmpfs 		 /tmp 		 tmpfs  defaults  0 	    0

1.3 創(chuàng)建/etc/inittab文件

inittab 的詳細(xì)內(nèi)容可以參考 busybox 下的文件 examples/inittab。 init 程序會(huì)讀取/etc/inittab這個(gè)文件,inittab 由若干條指令組成。 每條指令的結(jié)構(gòu)都是一樣的,由以“ : ”分隔的 4 個(gè)段組成,格式如下:

:::
  • id:每個(gè)指令的標(biāo)識(shí)符,不能重復(fù)。 對(duì)于 busybox的 init而言是用來(lái)指定啟動(dòng)進(jìn)程的控制 tty,一般將串口或者 LCD屏幕設(shè)置為控制 tty
  • runlevels:對(duì) busybox 來(lái)說(shuō)此項(xiàng)完全沒(méi)用,所以空著
  • action:動(dòng)作關(guān)鍵字,用于指定 process 可能用到的動(dòng)作
  • process:具體的動(dòng)作,比如程序、腳本或命令等

參考 busybox的 examples/inittab文件,在 rootfs根文件系統(tǒng)中創(chuàng)建 /etc/inittab文件:

cd etc
touch inittab

inittab文件內(nèi)容如下:

1 #etc/inittab
2 ::sysinit:/etc/init.d/rcS
3 console::askfirst:-/bin/sh
4 ::restart:/sbin/init
5 ::ctrlaltdel:/sbin/reboot
6 ::shutdown:/bin/umount -a -r 
7 ::shutdown:/sbin/swapoff -a
  • 第 2 行,系統(tǒng)啟動(dòng)以后運(yùn)行/etc/init.d/rcS 這個(gè)腳本文件
  • 第 3 行,將 console 作為控制臺(tái)終端,也就是 ttymxc0
  • 第 4 行,重啟的話(huà)運(yùn)行/sbin/init
  • 第 5 行,按下 ctrl+alt+del 組合鍵就運(yùn)行/sbin/reboot,用于重啟系統(tǒng)
  • 第 6 行,關(guān)機(jī)的時(shí)候執(zhí)行/bin/umount,也就是卸載各個(gè)文件系統(tǒng)
  • 第 7 行,關(guān)機(jī)的時(shí)候執(zhí)行/sbin/swapoff,也就是關(guān)閉交換分區(qū)

/etc/inittab 文件創(chuàng)建好以后重啟開(kāi)發(fā)板即可,至此! 根文件系統(tǒng)要?jiǎng)?chuàng)建的文件就已經(jīng)全部完成了。 接下來(lái)就要對(duì)根文件系統(tǒng)進(jìn)行其他的測(cè)試,比如我們自己編寫(xiě)的軟件運(yùn)行是否正常、是否支持軟件開(kāi)機(jī)自啟動(dòng)、中文支持是否正常以及能不能鏈接等

2. 根文件系統(tǒng)其他功能測(cè)試

根文件系統(tǒng)已經(jīng)完善了,接下來(lái)繼續(xù)測(cè)試根文件系統(tǒng)是否好用

2.1 軟件運(yùn)行測(cè)試

編寫(xiě)一個(gè)簡(jiǎn)單的c語(yǔ)言程序運(yùn)行一下,驗(yàn)證庫(kù)文件是否能用

在ubuntu的 rootfs中創(chuàng)建一個(gè)hello.c

#include 

int main(void){
  while(1){
    printf("hello world!\\r\\n"); //打印
    sleep(2); //休眠2秒
  }
}

使用交叉編譯鏈來(lái)編譯程序

arm-linux-gnueabihf-gcc hello.c -o hello

編譯后會(huì)生成名為hello的可執(zhí)行文件,可以使用“file”命令查看文件類(lèi)型以及編碼格式,見(jiàn)下圖

圖片

可見(jiàn) hello是個(gè)32位的 LSB可執(zhí)行文件,ARM架構(gòu)的,并且是動(dòng)態(tài)鏈接的

重啟開(kāi)發(fā)板,在開(kāi)發(fā)板上運(yùn)行hello文件,程序每隔2秒打印一次,運(yùn)行正常,說(shuō)明根文件系統(tǒng)中的動(dòng)態(tài)庫(kù)沒(méi)有問(wèn)題,“ctrl+c”可中止程序

圖片

程序運(yùn)行起來(lái)后,會(huì)占用交互窗口,可在運(yùn)行時(shí)加上“&”,即:./hello&,讓其進(jìn)入后臺(tái)運(yùn)行

圖片

程序在后臺(tái)運(yùn)行時(shí),交互串口仍是有打印的,只是這時(shí)可以敲回車(chē)鍵來(lái)輸入命令了,與程序的輸出互不影響,唯一的影響是程序的輸出會(huì)打斷我們的輸入,但可以不理會(huì)打斷,繼續(xù)輸入仍可執(zhí)行命令的

后臺(tái)運(yùn)行的程序,可通過(guò) ps命令查看進(jìn)程id,然后使用 kill -9 pid(進(jìn)程ID)命令來(lái)關(guān)閉后臺(tái)運(yùn)行的程序。 如下圖,輸入ps命令,可見(jiàn) hello程序的進(jìn)程ID為92,輸入kill -9 92(不用理會(huì)被打斷)后回車(chē),就可看到hello進(jìn)程被關(guān)閉了

圖片

2.2 中文字符測(cè)試

在Ubuntu中的 rootfs目錄下新建一個(gè)“中文測(cè)試”文件夾,并新建一個(gè)“測(cè)試文檔.txt”,里面輸入任意中文,下載到開(kāi)發(fā)板后,在開(kāi)發(fā)板命令行模式中,使用cat命令查看中文是否顯示正確

圖片

2.3 開(kāi)機(jī)自啟動(dòng)測(cè)試

一般做好產(chǎn)品以后都是需要開(kāi)機(jī)自動(dòng)啟動(dòng)相應(yīng)的軟件,實(shí)現(xiàn)開(kāi)機(jī)自啟動(dòng)的原理也很簡(jiǎn)單,linux在啟動(dòng)時(shí),有一個(gè)默認(rèn)的開(kāi)機(jī)啟動(dòng)腳本(/etc/init.d/rcS這個(gè)shell文件),修改這個(gè)腳本,添加自啟動(dòng)相關(guān)內(nèi)容即可

########## /etc/init.d/rcS 文件代碼 ##########
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib
runlevel=S
umask 022
export PATH LD_LIBRARY_PATH runlevel

mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts

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

#開(kāi)機(jī)自啟動(dòng),先進(jìn)入hello所在文件夾再執(zhí)行
cd /drivers 
./hello &
cd /

自啟動(dòng)代碼添加完成以后,重啟開(kāi)發(fā)板,可以看到hello這個(gè)軟件已經(jīng)開(kāi)機(jī)時(shí)自動(dòng)運(yùn)行了:

圖片

2.4 外網(wǎng)連接測(cè)試

這里的外網(wǎng)是相對(duì)于局域網(wǎng)這個(gè)內(nèi)外而言的,即測(cè)試板子是否能訪(fǎng)問(wèn)百度、QQ這樣的網(wǎng)站,先使用ping指令來(lái)測(cè)試一下:

圖片

網(wǎng)絡(luò)連接正常的情況下,無(wú)法ping通這些網(wǎng)址,是因?yàn)槿鄙儆蛎馕龇?wù),需要配置域名解析服務(wù)器的IP地址。 一般域名可以設(shè)置為所處網(wǎng)絡(luò)的網(wǎng)關(guān)地址,比如我的局域網(wǎng)的網(wǎng)關(guān)是192.168.10.1,也可以設(shè)置為運(yùn)營(yíng)商的域名解析服務(wù)器地址:114.114.114.114

在rootfs中新建文件/etc/resolv.conf,然后在里面輸入如下內(nèi)容:

nameserver 114.114.114.114
nameserver 192.168.10.1

修改保存退出,再次ping一下百度網(wǎng)站,可以看出 ping成功了!

圖片

至此! 根文件系統(tǒng)就徹底的制作完成。 uboot、kernel、rootfs這三個(gè)共同構(gòu)成了一個(gè)完整的 Linux系統(tǒng),這個(gè)系統(tǒng)是一個(gè)可以正常運(yùn)行的系統(tǒng),可以在這個(gè)系統(tǒng)上進(jìn)行 Linux驅(qū)動(dòng)開(kāi)發(fā)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1372

    瀏覽量

    40290
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11304

    瀏覽量

    209521
  • busybox
    +關(guān)注

    關(guān)注

    0

    文章

    21

    瀏覽量

    11294
  • 根文件系統(tǒng)
    +關(guān)注

    關(guān)注

    0

    文章

    25

    瀏覽量

    11981
  • rootfs
    +關(guān)注

    關(guān)注

    0

    文章

    19

    瀏覽量

    4666
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    使用i.MX6ULL開(kāi)發(fā)板進(jìn)行Linux根文件系統(tǒng)完善

    上一篇推文講了怎么移植根文件系統(tǒng),并在i.MX6ULL開(kāi)發(fā)板中運(yùn)行起來(lái),但是會(huì)出現(xiàn)一些提示,現(xiàn)在來(lái)進(jìn)行根文件完善。
    發(fā)表于 10-17 11:13 ?801次閱讀

    談?wù)勈裁词?b class='flag-5'>文件系統(tǒng) 文件系統(tǒng)的功能與特點(diǎn)

    文件系統(tǒng)的應(yīng)用非常廣泛,同時(shí)種類(lèi)也是特別的多,并且不同平臺(tái)也會(huì)使用不同性能和特點(diǎn)的文件系統(tǒng),比如查找效率、數(shù)據(jù)安全等級(jí)等等,如下面windows使用的NTFS:
    發(fā)表于 08-30 09:50 ?2925次閱讀
    談?wù)勈裁词?b class='flag-5'>文件系統(tǒng)</b> <b class='flag-5'>文件系統(tǒng)</b>的功能與特點(diǎn)

    申精:郭天祥ARM9視頻教程TX2440、S3C2440+光盤(pán)原理圖 全!!!6G...

    目錄結(jié)構(gòu)詳解3. 配置,編譯busybox4. 完善根文件系統(tǒng)5. 制作yaffs鏡像第十八講應(yīng)用程序的移植1. NFS文件系統(tǒng)的掛載2. 移植嵌入式web服務(wù)器Boa3. 移植madplay音樂(lè)播放器
    發(fā)表于 09-27 12:22

    [原創(chuàng)]【UT4418試用體驗(yàn)】busybox制作跟文件系統(tǒng)

    在當(dāng)前目錄下的 _install 目錄下。步驟4: 完善根文件系統(tǒng)與庫(kù)文件。# arm-none-linux-gnueabi-readelf -d命令查看需要依賴(lài)的庫(kù)文件。在
    發(fā)表于 10-20 22:04

    郭天祥ARM9視頻教程TX2440、S3C2440+光盤(pán)原理圖資料下載

    第十七講 用busybox制作根文件系統(tǒng) 1. 嵌入式文件系統(tǒng)介紹 2. Linux目錄結(jié)構(gòu)詳解 3. 配置,編譯busybox 4. 完善根文件系統(tǒng) 5. 制作yaffs鏡像 第十
    發(fā)表于 07-06 07:09

    Linux文件系統(tǒng)課程

    本章學(xué)習(xí)目標(biāo)理解什么是文件系統(tǒng)了解文件系統(tǒng)工作原理理解Fedora Core Linux文件系統(tǒng)的結(jié)構(gòu)掌握Fedora Core Linux文件系統(tǒng)的類(lèi)型、權(quán)限和修改方法掌握如何安裝、
    發(fā)表于 04-10 17:07 ?0次下載

    NTFS文件系統(tǒng),NTFS文件系統(tǒng)是什么意思

    NTFS文件系統(tǒng),NTFS文件系統(tǒng)是什么意思 NTFS是Windows NT以及之后的Windows 2000、Windows XP、Windows Server 2003、Windows Server 2008
    發(fā)表于 03-29 10:38 ?5969次閱讀

    XfS文件系統(tǒng),XfS文件系統(tǒng)是什么意思

    XfS文件系統(tǒng),XfS文件系統(tǒng)是什么意思 XfS文件系統(tǒng)是SGI開(kāi)發(fā)的高級(jí)日志文件系統(tǒng),XFS極具伸縮性,非常健壯。所幸的是SGI將其移植到了Lin
    發(fā)表于 03-29 10:39 ?4260次閱讀

    FatFs文件系統(tǒng)使用

    STM系列FatFs文件系統(tǒng)使用文件,希望對(duì)大家有幫助。
    發(fā)表于 11-06 18:10 ?8次下載

    《Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)詳解》第5章、Linux文件系統(tǒng)與設(shè)備文件系統(tǒng)

    《Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)詳解》第5章、Linux文件系統(tǒng)與設(shè)備文件系統(tǒng)
    發(fā)表于 10-27 14:13 ?0次下載
    《Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)詳解》第5章、Linux<b class='flag-5'>文件系統(tǒng)</b>與設(shè)備<b class='flag-5'>文件系統(tǒng)</b>

    文件系統(tǒng)是什么?淺談EXT文件系統(tǒng)歷史

    在先前關(guān)于Linux文件系統(tǒng)的文章中,我很想去深入地討論更多EXT文件系統(tǒng)的特性的信息。所以,首先讓我們來(lái)回答這個(gè)問(wèn)題:什么是文件系統(tǒng)?一個(gè)文件系統(tǒng)應(yīng)該遵循以下特點(diǎn)。
    發(fā)表于 06-28 09:03 ?5703次閱讀
    <b class='flag-5'>文件系統(tǒng)</b>是什么?淺談EXT<b class='flag-5'>文件系統(tǒng)</b>歷史

    Linux 內(nèi)核/sys 文件系統(tǒng)介紹

    linux2.6內(nèi)核引入sysfs文件系統(tǒng),sysfs可以看成與proc,devfs和devpty同類(lèi)別的文件系統(tǒng),該文件系統(tǒng)是虛擬的文件系統(tǒng),可以更方便對(duì)
    發(fā)表于 04-25 16:20 ?4294次閱讀
    Linux 內(nèi)核/sys <b class='flag-5'>文件系統(tǒng)</b>介紹

    FATFS文件系統(tǒng)詳解

    一、文件系統(tǒng)負(fù)責(zé)管理和存儲(chǔ)文件信息的軟件機(jī)構(gòu)稱(chēng)為文件管理系統(tǒng),簡(jiǎn)稱(chēng)文件系統(tǒng)。即在磁盤(pán)上組織文件
    發(fā)表于 11-29 09:51 ?29次下載
    FATFS<b class='flag-5'>文件系統(tǒng)</b>詳解

    FATFS文件系統(tǒng)原版文件下載

    FATFS文件系統(tǒng)原版文件下載
    發(fā)表于 06-25 09:02 ?0次下載

    Linux的文件系統(tǒng)特點(diǎn)

    Linux的文件系統(tǒng)特點(diǎn) 文件系統(tǒng)要有嚴(yán)格的組織形式,使得文件能夠以塊為單位進(jìn)行存儲(chǔ)。 文件系統(tǒng)中也要有索引區(qū),用來(lái)方便查找一個(gè)文件分成的多
    的頭像 發(fā)表于 11-09 14:48 ?1196次閱讀
    Linux的<b class='flag-5'>文件系統(tǒng)</b>特點(diǎn)