嵌入式Linux之QEMU模擬器】4、使用busybox制作根文件系統(tǒng)

      網(wǎng)友投稿 1307 2025-04-03

      文件系統(tǒng):對存儲設(shè)備上的數(shù)據(jù)進行組織的機制。


      根文件系統(tǒng)【root_fs】

      linux內(nèi)核啟動后第一個掛載的文件系統(tǒng)

      主要由基本的shell命令、各種庫、字符設(shè)備、配置腳本組成

      提供了根目錄/

      根文件系統(tǒng)【簡稱RFS】可以放在:nor/nand flash、SD卡、磁盤、網(wǎng)絡(luò)空間上

      busybox

      一個集成100多個linux常用命令和工具的軟件

      一個適合制作嵌入式文件系統(tǒng)的軟件工具

      下載<鏈接>

      一、創(chuàng)建shell命令

      1、下載busybox

      可以到上面的<官網(wǎng)>進行下載,當然也可以到<這里>提取碼:7j6b

      2、修改Makefile

      ①、下載完畢后將其拖曳到ubuntu中,進行解壓tar xvf busybox-1.27.0.tar.bz2

      ②、解壓完畢后,進入該文件夾后,輸入vi Makefile進行修改Makefile。在vi的一般模式下輸入/ARCH,進行搜索。

      下面所說多少行是以我的上述版本為例

      164行 CROSS_COMPILE ?=arm-linux-gnueabi-

      190行 ARCH ?= arm

      3、配置

      ①、輸入make defconfig,進行配置

      ②、圖形化配置

      輸入apt install libncurses5-dev安裝必須的庫

      輸入make menuconfig

      選中“Busybox Settings”,然后回車。

      找到下圖所示選項,然后按空格,讓其前面出現(xiàn)*

      退出

      4、編譯

      輸入make -j4

      (漫長等待…)【貌似有好多警告???】

      5、安裝

      輸入make install

      編譯后會在 ./_install的目錄下生成各種

      命令

      。分別放到了4個文件bin linuxrc sbin usr里。

      bin目錄下,主要是一些常用的命令

      sbin目錄下,也是一些命令

      linuxrc目錄下,是linuxrc

      usr目錄下,也是一些命令

      前面說過,

      根文件系統(tǒng)主要由基本的shell命令、各種庫、字符設(shè)備、配置腳本組成

      幾個部分組成,現(xiàn)在已經(jīng)具備了shell命令了,接著制作!

      二、創(chuàng)建各種庫

      1、創(chuàng)建根文件系統(tǒng)總文件夾,這里我把/home/clay/QEMU目錄下的rootfs文件夾作為總文件夾!

      2、拷貝剛剛_install文件中的全部命令到該文件中!

      進入rootfs文件后,輸入cp -r ../busybox/busybox-1.27.0/_install/* .將剛剛生成的所有命令拷貝到要制作的根文件系統(tǒng)總文件夾中!【-r參數(shù)表示連帶子目錄也一同拷貝】

      3、在rootfs文件夾中,新建lib文件夾。

      ①、進入rootfs文件目錄后,輸入mkdir lib創(chuàng)建文件夾!

      ②、將交叉編譯器的庫,拷到/rootfs/lib文件夾中

      進入lib文件夾,輸入cp -p /usr/arm-linux-gnueabi/lib/* .【-p參數(shù)表示保留源文件或目錄的屬性】

      三、創(chuàng)建字符設(shè)備

      設(shè)備文件,跟用戶、底層進行交互的接口,這些接口以文件節(jié)點的形式存在!讀寫文件,直接讀寫對應(yīng)的結(jié)點即可!

      1、在rootfs目錄下,創(chuàng)建./dev文件夾,用以存放各種目錄結(jié)點!

      進入rootfs目錄,輸入mkdir dev新建文件夾

      2、依次輸入下面命令,創(chuàng)建4個串口結(jié)點

      mknod -m 666 tty1 c 4 1 mknod -m 666 tty2 c 4 2 mknod -m 666 tty3 c 4 3 mknod -m 666 tty4 c 4 4

      1

      【嵌入式Linux之QEMU模擬器】4、使用busybox制作根文件系統(tǒng)

      2

      3

      4

      mknod -m 666 tty1 c 4 1命令中

      mknod表示創(chuàng)建結(jié)點

      -m設(shè)置權(quán)限為666

      tty表示串口

      c表示字符設(shè)備

      4表示主設(shè)備號,1表示次設(shè)備號

      3、創(chuàng)建工作臺結(jié)點,mknod -m 666 console c 5 1

      4、創(chuàng)建null結(jié)點,mknod -m 666 null c 1 3

      四、制作SD卡文件系統(tǒng)鏡像

      根文件系統(tǒng)放到SD卡里,內(nèi)核啟動后,從SD卡掛載根文件系統(tǒng)

      1、退回./QEMU目錄,輸入dd if=/dev/zero of=rootfs.ext3 bs=1M count=32,生成根文件系統(tǒng)鏡像rootfs.ext3。

      命令中的bs表示緩沖區(qū)大小,count表示塊大小

      直接把rootfs.ext3看成一個SD卡即可

      2、格式化rootfs.ext3,輸入mkfs.ext3 rootfs.ext3

      3、將各種文件拷貝到文件系統(tǒng)鏡像中

      需要注意的是,塊設(shè)備不能直接讀寫,需要掛載到目錄,然后對目錄進行一些相應(yīng)的操作!

      ①、輸入mount -t ext3 rootfs.ext3 /mnt/ -o loop

      mount [-fnrsvw] [-t vfstype] [-o options] device dir

      -t ext3,表示文件系統(tǒng)是ext3格式

      其中-o loop=:使用 loop 模式用來將一個檔案當成硬盤分割掛上系統(tǒng)。

      ②、掛載完畢,然后輸入ls /mnt查看SD卡內(nèi)容,里面自然是空的!

      ③、拷貝文件到SD卡中

      輸入cp -r rootfs/* /mnt/

      ④、卸載SD卡

      輸入umount /mnt

      五、啟動內(nèi)核,掛載rootfs

      輸入qemu-system-arm -M vexpress-a9 -m 512M -dtb ./test/vexpress-v2p-ca9.dtb -kernel ./test/zImage -nographic -append "root=/dev/mmcblk0 rw console=ttyAMA0" -sd rootfs.ext3

      上述命令過長,也可采用上節(jié)最后介紹的技巧2,修改./QEMU目錄下的boot.sh文件為:

      qemu-system-arm\ -M vexpress-a9\ -m 512M\ -dtb ./test/vexpress-v2p-ca9.dtb\ -kernel ./test/zImage\ -nographic\ -append "root=/dev/mmcblk0 rw console=ttyAMA0"\ -sd rootfs.ext3

      1

      2

      3

      4

      5

      6

      7

      8

      然后再控制臺輸入./boot.sh即可運行!

      注意:

      啟動后,也許會發(fā)現(xiàn)有一個錯誤。

      這個是因為,目前做的文件系統(tǒng)是最簡陋的文件系統(tǒng),還缺少很多東西。所以暫時忽略,關(guān)鍵是當輸入ls時,是否會出現(xiàn)相應(yīng)內(nèi)容呢?如下圖所示。

      若可以,則沒有問題!

      如何消除這個警報呢?下面提供兩種方法,一種在簡陋的根文件系統(tǒng)內(nèi)部修改,一種從簡陋的根文件系統(tǒng)外部修改!

      方法一:在簡陋的根文件系統(tǒng)內(nèi)部修改

      ①、mkdir創(chuàng)建etc文件夾

      ②、進入etc,mkdir創(chuàng)建init.d文件夾

      ③、進入init.d,touch創(chuàng)建rcS文件

      ④、輸入chmod a+x rcS,添加可運行權(quán)限

      ⑤、輸入vi rcS,編輯腳本文件

      echo "-----------------------------------------"I echo "Welcome to A9 vexpress board" echo "------------------------------------------"

      1

      2

      3

      4

      5

      6

      7

      8

      ⑥、從/etc/init.d目錄,退回到根目錄。

      輸入兩次cd ..

      ⑦、開啟另一個終端,輸入ps -a,查看qemu-system-arm對應(yīng)的進程PID號,然后輸入kill ×××

      ⑧、回到原終端,輸入啟動命令qemu-system-arm -M vexpress-a9 -m 512M -dtb ./test/vexpress-v2p-ca9.dtb -kernel ./test/zImage -nographic -append "root=/dev/mmcblk0 rw console=ttyAMA0" -sd rootfs.ext3

      或者輸入./boot.sh

      重新啟動查看rcS顯示效果

      方法二:從簡陋的根文件系統(tǒng)外部修改

      ①、進入rootfs,在rootfs下創(chuàng)建etc文件夾,mkdir etc

      ②、進入etc,在etc下創(chuàng)建init.d文件夾,mkdir init.d

      ③、進入init.d,在init.d下創(chuàng)建rcS文件,touch rcS。同時加上可運行權(quán)限,chmod a+x rcS

      ④、編輯rcS如下內(nèi)容,vi rcS

      echo "-----------------------------------------"I echo " Hello world! " echo "-----------------------------------------"

      1

      2

      3

      4

      5

      6

      7

      8

      ⑤、重新將內(nèi)容拷貝到SD卡!

      掛載SD卡

      退回QEMU所在目錄,輸入mount -t ext3 rootfs.ext3 /mnt/ -o loop

      拷貝所有文件到掛載目錄

      輸入cp -r rootfs/* /mnt

      卸載SD卡

      輸入umount /mnt

      ⑥、重新啟動,輸入qemu-system-arm -M vexpress-a9 -m 512M -dtb ./test/vexpress-v2p-ca9.dtb -kernel ./test/zImage -nographic -append "root=/dev/mmcblk0 rw console=ttyAMA0" -sd rootfs.ext3

      或者輸入./boot.sh

      可以看到內(nèi)容已經(jīng)變更!

      目前的情況來看,完善我們的文件系統(tǒng)還是蠻不方便的,后期當我們掛載到NFS上,可直接在主機進行修改,到那時便會方便許多,繼續(xù)往下看咯!

      注:上面都是命令行啟動內(nèi)核,若想圖形化啟動【LCD】可執(zhí)行下面代碼進行啟動!

      qemu-system-arm -M vexpress-a9 -m 512M -dtb ./test/vexpress-v2p-ca9.dtb -kernel ./test/zImage -append "root=/dev/mmcblk0 rw console=tty0" -sd rootfs.ext3

      1

      【上述代碼是一行完成!】

      或者再新建腳本boot_with_lcd.sh為以下內(nèi)容【制作方法可參考上節(jié)最后的技巧2】

      qemu-system-arm \ -M vexpress-a9 \ -m 512M\ -dtb ./test/vexpress-v2p-ca9.dtb\ -kernel ./test/zImage\ -append "root=/dev/mmcblk0 rw console=tty0"\ -sd rootfs.ext3\

      1

      2

      3

      4

      5

      6

      7

      8

      LCD啟動后,關(guān)閉LCD可直接關(guān)閉對應(yīng)進程!

      ARM Linux 嵌入式

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:如何添加Excel下拉菜單?
      下一篇:BI報表圖表,精準可視化數(shù)據(jù)分析的利器
      相關(guān)文章
      亚洲国产高清精品线久久| 亚洲一区二区影视| 亚洲av无码一区二区三区四区| 亚洲视频精品在线| 亚洲成AV人片在线观看| 国产午夜亚洲不卡| 亚洲欧洲自拍拍偷午夜色无码| 国产亚洲精品拍拍拍拍拍| 亚洲国产综合无码一区二区二三区| 99亚洲男女激情在线观看| 豆国产96在线|亚洲| 国产偷国产偷亚洲高清人| 日本系列1页亚洲系列| 国产AV无码专区亚洲AV麻豆丫| 亚洲AV无码专区亚洲AV桃| 亚洲AV无码AV男人的天堂不卡| 亚洲av无码一区二区三区四区| 日批日出水久久亚洲精品tv| 亚洲AV无码一区二区三区国产 | 亚洲va中文字幕| 一区国严二区亚洲三区| 亚洲国产精品碰碰| 在线a亚洲v天堂网2019无码| 亚洲国产精品无码一线岛国 | 亚洲AV无码一区二区三区电影| 亚洲av永久中文无码精品综合| 亚洲av乱码中文一区二区三区| 亚洲av午夜精品一区二区三区| 国产成人综合亚洲绿色| 国产偷国产偷亚洲高清日韩| 亚洲毛片αv无线播放一区| 亚洲电影一区二区三区| 亚洲成A∨人片在线观看无码| 亚洲综合校园春色| 亚洲成a∨人片在无码2023| 亚洲精品专区在线观看| 国产亚洲无线码一区二区 | 久久噜噜噜久久亚洲va久| 91大神亚洲影视在线| 亚洲最大中文字幕无码网站| 色偷偷亚洲男人天堂|