roofs 根文件系統簡介制作(下)
1.根文件系統簡介
?根文件系統首先是內核啟動時所mount的第一個文件系統,內核代碼映像文件保存在根文件系統中,而系統引導啟動程序會在根文件系統掛載之后從中把一些基本的初始化腳本和服務等加載到內存中去運行。文件系統是對一個存儲設備上的數據和元數據進行組織的機制。這種機制有利于用戶和操作系統的交互。文件是用戶和操作系統之間交互的主要工具。
Linux啟動時,第一個必須掛載的是根文件系統;若系統不能從指定設備上掛載根文件系統,則系統會出錯而退出啟動。成功之后可以自動或手動掛載其他的文件系統。因此,一個系統中可以同時存在不同的文件系統。
??接下來以busybox-1.30.1版本為例實現根文件系統制作。
2.根文件系統制作
開發平臺:ubuntu18.04.6 開發板:Cortex-A9 tiny4412 BusyBox版本:1.30.1 交叉編譯器:arm-linux-gcc |
2.1 現在busybox源碼,配置環境,編譯源碼
??(1)下載busybox源碼,解壓到用戶目錄下。
[wbyq@wbyq src_pack]$ tar xvf /mnt/hgfs/ubuntu/software_pack/busybox-1.30.1.tar.bz2
??(2)配置編譯環境
[wbyq@wbyq src_pack]$ cd busybox-1.30.1/ [wbyq@wbyq busybox-1.30.1]$ make menuconfig Settings ---> (arm-linx-) Cross compiler prefix (NEW) (/home/wbyq/src_pack/rootfs) Destination path for 'make install'
??配置好后保存退出,make編譯。
2.2 編碼源碼
[wbyq@wbyq busybox-1.30.1]$ make
2.2.1 編譯錯誤1
??編譯過程中若出現以下錯誤,則重新打開配置菜單,將syncfs屏蔽即可。
[wbyq@wbyq busybox-1.30.1]$ make menuconfig
??修改完成后保存退出,再次重新編譯。
2.2.2 編譯錯誤2
??編譯過程中若出現以下錯誤,則重新打開配置菜單,將setns屏蔽即可。
[wbyq@wbyq busybox-1.30.1]$ make menuconfig
??解決錯誤后重新編譯安裝。
[wbyq@wbyq busybox-1.30.1]$ make && make install -j8
??編譯安裝成功。
2.3 完善根文件系統
??進入到rootfs安裝目錄下,進行根文件系統完善。
[wbyq@wbyq busybox-1.30.1]$ cd /home/wbyq/src_pack/rootfs/ [wbyq@wbyq rootfs]$ ls bin linuxrc sbin usr
2.3.1 參考ubuntu根目錄,創建必要目錄
[wbyq@wbyq rootfs]$ mkdir etc lib lost+found proc snap tmp boot home media root srv cdrom mnt run dev opt sys
2.3.2 創建必要文件
??創建 etc/profile 文件、 etc/init.d 目 錄、 etc/init.d/rcS 文件
[wbyq@wbyq rootfs]$ touch etc/profile [wbyq@wbyq rootfs]$ mkdir etc/init.d [wbyq@wbyq rootfs]$ touch etc/init.d/rcS [wbyq@wbyq init.d]$ chmod +x rcS
2.3.3 完善etc目錄
[wbyq@wbyq rootfs]$ cp /etc/passwd etc/ [wbyq@wbyq rootfs]$ cp /etc/group etc/ [wbyq@wbyq rootfs]$ cp /etc/fstab etc/ [wbyq@wbyq rootfs]$ cp ../busybox-1.30.1/examples/inittab etc/
2.3.4 修改 inittab 文件
??修改 etc/inittab文件,只保留下面內容:
::sysinit:/etc/init.d/rcS #設置初始化執行的文件 #需要加上 console askfirst 表示需要按下回車才可以進入系統 #respawn 表示開機直接進入系統 console::askfirst:-/bin/sh ::ctrlaltdel:/sbin/reboot #指定重啟命令 ::shutdown:/bin/umount -a -r #指定關機時執行的命令
2.3.5 編寫/etc/init.d/rcS啟動腳本文件
mount -a mkdir /dev/pts mount -a mkdir /dev/pts mount -t devpts devpts /dev/pts echo /sbin/mdev > /proc/sys/kernel/hotplug mdev -s /bin/hostname wbyq #設置主機名稱
rcS文件相關命令介紹
mount -a
mkdir /dev/pts
/dev/pts 是遠程登陸(telnet,ssh 等)后創建的控制臺設備文件所在的目錄。由于可能有好幾千個用戶登陸,所以/dev/pts 其實是動態生成的, 不象其他設備文件是構建系統時就已經產生的硬盤節點.
mount -t devpts devpts /dev/pts
內核虛擬文件。和 proc 一樣,Linux 提供給管理員通過文件系統和內核進行溝通( 讀\寫)的一種渠道。 pts 是遠程虛擬終端。 devpts 即遠程虛擬終端文件設備。 通過/dev/pts 可以了解目前遠程虛擬終端的基本情況。
echo /sbin/mdev > /proc/sys/kernel/hotplug
linux系統對于熱插拔事件的產生默認都是調用 /sbin/hotplug, 該程序通過加載驅動程序, 創建設備節點,掛載分區等。 如果系統中不是/sbin/hotplug 來執行,而是 mdev,那么用戶應當在早期啟 動的時候將改執行檔( 包含絕對位置)設置進去,于是有了上面的echo/sbin/mdev> /proc/sys/kernel/hotplug 我們可以在腳本中注釋掉該命令行,重新開機后 cat/proc/sys/kernel/hotplug 就會發現返回來的是/sbin/hotplug 說明系統默認都是調用這個。 這個配置在內核編譯的時候寫好的在內核 目錄下的.config可以看到有個配置叫做 CONFIG_UEVENT_HELPER_PATH=“/sbin/hotplug”
mdev -s #生成設備節點
/bin/hostname wbyq #設置主機名稱
2.3.6 編寫 profile 文件 gedit etc/profile
USER="id-un" #id -un 是獲得當前登陸的用戶名稱,USER="`id -un`" 則是將 id -un 的返回值賦值給變量 USER LOGNAME=$USER #用于顯示用戶名稱 PS1='[\u@\h \W]\$ ' #命令行樣式環境變量, 查看系統命令行樣式 echo $PS1 PATH=$PATH HOSTNAME='/bin/hostname' export USER LOGNAME PS1 PATH HOSTNAME
2.3.7 拷貝必要動態庫文件
[wbyq@wbyq rootfs]$ cp ../arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib/* ./lib/ -rfdv [wbyq@wbyq rootfs]$ cp ../arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/lib/* ./lib/ -rfdv [wbyq@wbyq rootfs]$ cp ../arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/sys-root/usr/lib/* ./lib/ -rfdv
2.3.8 完善dev目錄,創建設備節點
[wbyq@wbyq rootfs]$ sudo mknod dev/null c 1 3
2.4 設置NFS共享
??添加NFS共享目錄
[wbyq@wbyq rootfs]$ sudo vim /etc/exports /home/wbyq/src_pack/rootfs *(rw,no_root_squash,sync,insecure)
2.5 配置網絡
2.6 IP設置
??若開發板和電腦直連,則可設置為靜態IP方式,若是經過路由器,則可使用動態IP方式。
3.配置開發板環境變量
setenv bootargs root=/dev/nfs nfsroot=192.168.10.123:/home/wbyq/src_pack/rootfs ip=192.168.10.106:192.168.10.123:192.168.10.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0 lcd=S702
192.168.1.123:/home/xsw/linux_work/rootfs —服務器 IP 與共享目 錄
192.168.1.106 —開發板 IP 地址
192.168.1.123:192.168.1.1:255.255.255.0 —主機 IP、 子網掩碼、 網關
在uboot命令行執行,配置完后重啟開發板。
3.1 開發板啟動掛載NFS失敗問題
??若開發板引導內核后出現無法通過NFS掛載rootfs,則是由于開發板nfs版本協議和ubuntu的nfs協議不兼容。
??解決辦法:修改/etc/default/nfs-kernel-server 文件,添加協議版本支持。
[wbyq@wbyq rootfs]$ sudo vim /etc/default/nfs-kernel-server RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog"
??保存后重啟NFS服務,重啟開發板。
3.2開發板啟動掛載進入命令行報錯
??原因:主要是etc/fstab文件格式不對,fstab文件報錯磁盤掛載信息。
??解決辦法:修改rootfs下的/etc/fstab文件
[wbyq@wbyq rootfs]$ gedit etc/fstab /dev/mapper/vg_wbyq-lv_swap swap swap defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0
啟動成功
?至此,根文件系統制作完成,開發板啟動成功。接下來將正式進入驅動開發之旅。
審核編輯:劉清
-
Linux
+關注
關注
87文章
11304瀏覽量
209483 -
根文件系統
+關注
關注
0文章
25瀏覽量
11980 -
rootfs
+關注
關注
0文章
19瀏覽量
4666
發布評論請先 登錄
相關推薦
評論