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

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

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

嵌入式Linux開發(fā)-busybox根文件系統(tǒng)制作

DS小龍哥-嵌入式技術(shù) ? 來源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2022-08-14 08:51 ? 次閱讀

1. 前言

如果大家做過linux系統(tǒng)移植、或者Linux相關(guān)開發(fā),對(duì)根文件系統(tǒng)這個(gè)名詞應(yīng)該很熟悉,在搭建嵌入式開發(fā)環(huán)境過程中,移植bootloader,移植kernel制作根文件系統(tǒng)是必須要做3件事情。

根文件系統(tǒng)是內(nèi)核啟動(dòng)時(shí)所掛載mount的第一個(gè)文件系統(tǒng),系統(tǒng)引導(dǎo)啟動(dòng)程序會(huì)在根文件系統(tǒng)掛載之后從中把一些基本的初始化腳本和服務(wù)等加載到內(nèi)存中去運(yùn)行。

Linux啟動(dòng)時(shí),第一個(gè)必須掛載的是根文件系統(tǒng);若系統(tǒng)不能從指定設(shè)備上掛載根文件系統(tǒng),則系統(tǒng)會(huì)出錯(cuò)而退出啟動(dòng)。成功之后可以自動(dòng)或手動(dòng)掛載其他的文件系統(tǒng)。因此,一個(gè)系統(tǒng)中可以同時(shí)存在不同的文件系統(tǒng)。根文件系統(tǒng)作為系統(tǒng)的,系統(tǒng)啟動(dòng)之后為完成一些初始化配置,操作。比如:系統(tǒng)登錄輸入的開機(jī)密碼、開機(jī)賬戶這些信息就是存放在根文件系統(tǒng)里的。

根文件系統(tǒng)掛載的流程:先運(yùn)行uboot引導(dǎo)內(nèi)核,內(nèi)核啟動(dòng)完成之后,根據(jù)配置的環(huán)境變量,找到根文件系統(tǒng)的位置,將/dev/xxx掛載,然后執(zhí)行/linuxrc程序,等其執(zhí)行完后。切換根目錄,再掛載具體的根文件系統(tǒng),根文件系統(tǒng)執(zhí)行完之后,執(zhí)行init的進(jìn)程,也就第一個(gè)用戶進(jìn)程,對(duì)系統(tǒng)進(jìn)行各種初始化的操作。

上面說的/dev/xxx 是根文件系統(tǒng)存放位置的設(shè)備節(jié)點(diǎn),根文件系統(tǒng)支持從SD卡、光盤、EMMC、NFS網(wǎng)絡(luò)位置進(jìn)行掛載。/linuxrc 是根文件系統(tǒng)制作之后,在頂層目錄生成的文件。

根文件系統(tǒng)必須具備的幾個(gè)重要目錄:/bin、/etc、/lib、/dev

其中/bin目錄存放系統(tǒng)的基本命令,比如:ls 這些命令就放在這里面。

/etc存放系統(tǒng)的配置文件,根文件系統(tǒng)掛載之后會(huì)執(zhí)行/etc下的配置文件完成對(duì)系統(tǒng)初始化。

/lib目錄下存放系統(tǒng)運(yùn)行需要的共享庫(kù)文件,也就是動(dòng)態(tài)庫(kù). 格式是: xxx.so

/dev目錄下存放內(nèi)核生成的設(shè)備節(jié)點(diǎn),這個(gè)目錄下的文件是內(nèi)核自動(dòng)生成的。

2. 根文件系統(tǒng)制作

制作根文件系統(tǒng),需要用到Busybox工具包。

BusyBox 是一個(gè)集成了三百多個(gè)最常用Linux命令和工具的軟件。BusyBox 包含了一些簡(jiǎn)單的工具,例如ls、cat和echo等等,還包含了一些更大、更復(fù)雜的工具,例grep、find、mount以及telnet。有些人將 BusyBox 稱為 Linux 工具里的瑞士軍刀。簡(jiǎn)單的說BusyBox就好像是個(gè)大工具箱,它集成壓縮了 Linux 的許多工具和命令,也包含了 Linux 系統(tǒng)的自帶的shell。

Busybox下載地址: busybox.net/

image-20220124091505384

接下來對(duì)Busybox進(jìn)行配置、交叉編譯、安裝,生成根文件系統(tǒng)需要的基本目錄文件。

我這里用到的版本是1.23.2,下載之后,解壓busybox-1.23.2.tar.bz2 到Linux系統(tǒng)指定目錄下。

下面是操作的步驟:

[wbyq@wbyq ~]$ mkdir ~/work/busybox -p
[wbyq@wbyq ~]$ tar xvf busybox-1.23.2.tar.bz2 -C ~/work/busybox/
[wbyq@wbyq ~]$ cd work/busybox/
[wbyq@wbyq busybox]$ cd busybox-1.23.2/
[wbyq@wbyq busybox-1.23.2]$ make menuconfig
?
 Busybox Settings --->  
  Build Options --->       
     (arm-linux-) Cross Compiler prefix 
  Installation Options ("make install" behavior) ---> 
     (/home/wbyq/work/rootfs) BusyBox installation prefix  
?
[wbyq@wbyq busybox-1.23.2]$ make && make install
復(fù)制代碼

安裝完成之后,在配置的目錄下就可以看到生成的文件了。

image-20220124092133428image-20220124092148935image-20220124092226635

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

上面busybox生成的文件只是根文件系統(tǒng)的基本文件,接下來還需要自己做一些完善,比如: 修改etc配置、拷貝動(dòng)態(tài)庫(kù)等等。

(1). 拷貝動(dòng)態(tài)庫(kù)

[wbyq@wbyq lib]$ cp ~/work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/lib/* ./ -rd
[wbyq@wbyq lib]$ cp ~/work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr/lib/* ./ -rd
[wbyq@wbyq lib]$ sudo cp ~/work/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib/* ./ -rd
復(fù)制代碼

(2).創(chuàng)建fstab文件,完善/etc目錄

[wbyq@wbyq rootfs]$ cp /etc/fstab etc/
[wbyq@wbyq rootfs]$ cp /etc/passwd etc/
[wbyq@wbyq rootfs]$ cp /etc/group etc/
復(fù)制代碼

(3). 創(chuàng)建inittab

cp busybox解壓目錄/examples/inittab /tiny4412/rootfs/etc/
[wbyq@wbyq rootfs]$ cp ../busybox/busybox-1.23.2/examples/inittab etc/
復(fù)制代碼

(4). 修改上面拷貝的inittab文件

::sysinit:/etc/init.d/rcS   #set初始化執(zhí)行的文件
console::askfirst:-/bin/sh  #需要加上console  askfirst表示需要按下回車才可以進(jìn)入系統(tǒng) respawn表示開機(jī)直接進(jìn)入系統(tǒng)
::ctrlaltdel:/sbin/reboot   #指定重啟命令
::shutdown:/bin/umount -a -r #指定關(guān)機(jī)時(shí)執(zhí)行的命令
復(fù)制代碼

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

[wbyq@wbyq rootfs]$ touch etc/init.d/rcS
[wbyq@wbyq rootfs]$ chmod 777 etc/init.d/rcS
[wbyq@wbyq rootfs]$ gedit etc/init.d/rcS
寫入以下代碼:
mount -a
mkdir /dev/pts                 
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
/bin/hostname wbyq
復(fù)制代碼

(6).創(chuàng)建 etc/profile文件

[wbyq@wbyq rootfs]$ touch etc/profile
[wbyq@wbyq rootfs]$ gedit etc/profile
編寫以下代碼:
USER="id-un"
LOGNAME=$USER
PS1='[\u@\h \W]$ '
PATH=$PATH
HOSTNAME='/bin/hostname'
export USER LOGNAME PS1 PATH HOSTNAME
復(fù)制代碼

參數(shù)解釋: PS1是命令行樣式設(shè)置的環(huán)境變量。

審核編輯:湯梓紅

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

    關(guān)注

    5059

    文章

    18973

    瀏覽量

    302024
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11207

    瀏覽量

    208716
  • busybox
    +關(guān)注

    關(guān)注

    0

    文章

    21

    瀏覽量

    11274
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    文件系統(tǒng)制作

    不可或缺的組件,在嵌入式Lin-ux中,內(nèi)核在啟動(dòng)期間進(jìn)行的最后操作之一就是安裝文件系統(tǒng)。Busybox是構(gòu)建嵌入式
    發(fā)表于 04-29 21:32

    嵌入式文件系統(tǒng)構(gòu)建

    文件系統(tǒng),因此非常適合嵌入式系統(tǒng)。要注意的是,不同的文件系統(tǒng)都有相應(yīng)的制作工具,但是其主要的原理和制作
    發(fā)表于 09-02 14:25

    嵌入式-文件系統(tǒng)制作

    文件系統(tǒng)制作一. busybox操作tar -xf busybox-1.19.4.tar.bz2cd busybox-1.19.4vim
    發(fā)表于 10-06 14:19

    嵌入式-文件系統(tǒng)制作

    文件系統(tǒng)制作 一. busybox操作 tar -xf busybox-1.19.4.tar.bz2 cd busybox-1.19.4
    發(fā)表于 07-05 09:52

    嵌入式Linux文件系統(tǒng)怎么制作?

    不可或缺的組件,在嵌入式Lin-ux中,內(nèi)核在啟動(dòng)期間進(jìn)行的最后操作之一就是安裝文件系統(tǒng)。Busybox是構(gòu)建嵌入式
    發(fā)表于 04-06 07:39

    如何使用QEMU搭建u-boot+Linux+NFS嵌入式開發(fā)環(huán)境呢

    使用QEMU搭建u-boot+Linux+NFS嵌入式開發(fā)環(huán)境1、搭建嵌入式基本開發(fā)環(huán)境2、QEMU安裝3、編譯Linux內(nèi)核和dtb
    發(fā)表于 11-05 08:21

    Busybox制作嵌入式Linux文件系統(tǒng)

    文件系統(tǒng)Linux 的運(yùn)行提供最基本的工具、庫(kù)、腳本和一些特殊文件的支持Busybox制作
    發(fā)表于 06-12 16:05 ?19次下載

    基于zynq的Linux文件系統(tǒng)生成

    Linux中Root Filesystem(文件系統(tǒng))是必不可少的,常用的是BusyBox,本節(jié)就介紹一下使用BusyBox
    發(fā)表于 02-10 15:58 ?5702次閱讀
    基于zynq的<b class='flag-5'>Linux</b><b class='flag-5'>根</b><b class='flag-5'>文件系統(tǒng)</b>生成

    實(shí)驗(yàn)五 基于busybox文件系統(tǒng)制作實(shí)驗(yàn)-2016

    基于busybox文件系統(tǒng)制作實(shí)驗(yàn)-2016
    發(fā)表于 09-15 08:52 ?10次下載

    你知道嵌入式Linux內(nèi)核?文件系統(tǒng)制作也是有密切關(guān)聯(lián)的

    嵌入式Linux系統(tǒng)使用的是Linux內(nèi)核,制作方法基本和X86平臺(tái)的Linux內(nèi)核一致,下面介
    發(fā)表于 04-28 15:13 ?664次閱讀

    了解并學(xué)習(xí)嵌入式linux文件系統(tǒng)制作

    首先,本文檔制作文件系統(tǒng),是用mkyaffsimage打包成了yaffs鏡像文件,也可以使用其他打包工具制作成其他形式的
    發(fā)表于 05-05 11:50 ?1041次閱讀
    了解并學(xué)習(xí)<b class='flag-5'>嵌入式</b><b class='flag-5'>linux</b><b class='flag-5'>根</b><b class='flag-5'>文件系統(tǒng)制作</b>

    i.MX6ULL嵌入式Linux開發(fā)5-文件系統(tǒng)完善

    上篇文章,使用BusyBox構(gòu)建了基礎(chǔ)的嵌入式Linux系統(tǒng)文件系統(tǒng),基本的功能可以正常運(yùn)行
    的頭像 發(fā)表于 03-14 08:44 ?1311次閱讀
    i.MX6ULL<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b><b class='flag-5'>開發(fā)</b>5-<b class='flag-5'>根</b><b class='flag-5'>文件系統(tǒng)</b>完善

    嵌入式Linux開發(fā)-文件系統(tǒng)NFS網(wǎng)絡(luò)掛載

    文件系統(tǒng)Linux內(nèi)核啟動(dòng)之后掛載的第一個(gè)文件系統(tǒng),上篇文章里已經(jīng)介紹過,如何使用busybox
    的頭像 發(fā)表于 08-14 08:57 ?1800次閱讀

    rootfs文件系統(tǒng)制作

    本文記錄了文件系統(tǒng)的一些知識(shí)點(diǎn),Busybox 工具的使用和 最小文件系統(tǒng)制作
    發(fā)表于 10-31 11:56 ?2次下載

    使用BusyBox構(gòu)建文件系統(tǒng)

    文件系統(tǒng)的構(gòu)建,是 Linux移植三大組成部分的最后一步,文件系統(tǒng)構(gòu)建好后,就構(gòu)成了一個(gè)基礎(chǔ)的、可以運(yùn)行的
    的頭像 發(fā)表于 04-19 11:20 ?1195次閱讀
    使用<b class='flag-5'>BusyBox</b>構(gòu)建<b class='flag-5'>根</b><b class='flag-5'>文件系統(tǒng)</b>