1. 前言
如果大家做過linux系統(tǒng)移植、或者Linux相關(guān)開發(fā),對根文件系統(tǒng)這個名詞應(yīng)該很熟悉,在搭建嵌入式開發(fā)環(huán)境過程中,移植bootloader,移植kernel制作根文件系統(tǒng)是必須要做3件事情。
根文件系統(tǒng)是內(nèi)核啟動時所掛載mount
的第一個文件系統(tǒng),系統(tǒng)引導(dǎo)啟動程序會在根文件系統(tǒng)掛載之后從中把一些基本的初始化腳本和服務(wù)等加載到內(nèi)存中去運行。
Linux啟動時,第一個必須掛載的是根文件系統(tǒng);若系統(tǒng)不能從指定設(shè)備上掛載根文件系統(tǒng),則系統(tǒng)會出錯而退出啟動。成功之后可以自動或手動掛載其他的文件系統(tǒng)。因此,一個系統(tǒng)中可以同時存在不同的文件系統(tǒng)。根文件系統(tǒng)作為系統(tǒng)的根
,系統(tǒng)啟動之后為完成一些初始化配置,操作。比如:系統(tǒng)登錄輸入的開機密碼、開機賬戶這些信息就是存放在根文件系統(tǒng)里的。
根文件系統(tǒng)掛載的流程:先運行uboot引導(dǎo)內(nèi)核,內(nèi)核啟動完成之后,根據(jù)配置的環(huán)境變量,找到根文件系統(tǒng)的位置,將/dev/xxx掛載,然后執(zhí)行/linuxrc程序,等其執(zhí)行完后。切換根目錄,再掛載具體的根文件系統(tǒng),根文件系統(tǒng)執(zhí)行完之后,執(zhí)行init的進程,也就第一個用戶進程,對系統(tǒng)進行各種初始化的操作。
上面說的/dev/xxx 是根文件系統(tǒng)存放位置的設(shè)備節(jié)點,根文件系統(tǒng)支持從SD卡、光盤、EMMC、NFS網(wǎng)絡(luò)位置進行掛載。/linuxrc 是根文件系統(tǒng)制作之后,在頂層目錄生成的文件。
根文件系統(tǒng)必須具備的幾個重要目錄:/bin、/etc、/lib、/dev
其中/bin目錄存放系統(tǒng)的基本命令,比如:ls 這些命令就放在這里面。
/etc存放系統(tǒng)的配置文件,根文件系統(tǒng)掛載之后會執(zhí)行/etc下的配置文件完成對系統(tǒng)初始化。
/lib目錄下存放系統(tǒng)運行需要的共享庫文件,也就是動態(tài)庫. 格式是: xxx.so
/dev目錄下存放內(nèi)核生成的設(shè)備節(jié)點,這個目錄下的文件是內(nèi)核自動生成的。
2. 根文件系統(tǒng)制作
制作根文件系統(tǒng),需要用到Busybox工具包。
BusyBox 是一個集成了三百多個最常用Linux命令和工具的軟件。BusyBox 包含了一些簡單的工具,例如ls、cat和echo等等,還包含了一些更大、更復(fù)雜的工具,例grep、find、mount以及telnet。有些人將 BusyBox 稱為 Linux 工具里的瑞士軍刀。簡單的說BusyBox就好像是個大工具箱,它集成壓縮了 Linux 的許多工具和命令,也包含了 Linux 系統(tǒng)的自帶的shell。
Busybox下載地址: busybox.net/
接下來對Busybox進行配置、交叉編譯、安裝,生成根文件系統(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ù)制代碼
安裝完成之后,在配置的目錄下就可以看到生成的文件了。
3. 完善根文件系統(tǒng)
上面busybox生成的文件只是根文件系統(tǒng)的基本文件,接下來還需要自己做一些完善,比如: 修改etc配置、拷貝動態(tài)庫等等。
(1). 拷貝動態(tài)庫
[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表示需要按下回車才可以進入系統(tǒng) respawn表示開機直接進入系統(tǒng)
::ctrlaltdel:/sbin/reboot #指定重啟命令
::shutdown:/bin/umount -a -r #指定關(guān)機時執(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)境變量。
審核編輯:湯梓紅
-
嵌入式
+關(guān)注
關(guān)注
5095文章
19189瀏覽量
307960 -
Linux
+關(guān)注
關(guān)注
87文章
11351瀏覽量
210497 -
busybox
+關(guān)注
關(guān)注
0文章
22瀏覽量
11315
發(fā)布評論請先 登錄
相關(guān)推薦
根文件系統(tǒng)的制作
嵌入式文件系統(tǒng)構(gòu)建
嵌入式-根文件系統(tǒng)制作
嵌入式-根文件系統(tǒng)制作
嵌入式Linux根文件系統(tǒng)怎么制作?
如何使用QEMU搭建u-boot+Linux+NFS嵌入式開發(fā)環(huán)境呢
用Busybox制作嵌入式Linux根文件系統(tǒng)
基于zynq的Linux根文件系統(tǒng)生成
![基于zynq的<b class='flag-5'>Linux</b><b class='flag-5'>根</b><b class='flag-5'>文件系統(tǒng)</b>生成](https://file1.elecfans.com//web2/M00/A6/AB/wKgZomUMP4CAUEX9AAAUCK7ctMY803.jpg)
你知道嵌入式Linux內(nèi)核?文件系統(tǒng)的制作也是有密切關(guān)聯(lián)的
了解并學(xué)習(xí)嵌入式linux根文件系統(tǒng)制作
![了解并學(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>](https://file.elecfans.com/web1/M00/90/E6/o4YBAFzOXRWAbyQGAAF04gipzxw825.png)
i.MX6ULL嵌入式Linux開發(fā)5-根文件系統(tǒng)完善
![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>完善](https://file.elecfans.com/web2/M00/35/BF/poYBAGIuj_eAHJU8AAEDRF0DnFQ413.png)
嵌入式Linux開發(fā)-根文件系統(tǒng)NFS網(wǎng)絡(luò)掛載
rootfs根文件系統(tǒng)制作
使用BusyBox構(gòu)建根文件系統(tǒng)
![使用<b class='flag-5'>BusyBox</b>構(gòu)建<b class='flag-5'>根</b><b class='flag-5'>文件系統(tǒng)</b>](https://file1.elecfans.com/web2/M00/82/12/wKgaomQ_Wn2AZ31jAABmb9f_k1A269.jpg)
評論