嵌入式 根文件 系統

創建根目錄

嵌入式linux系統可以包含多個文件系統,但是必須包含根文件系統,“根”的意思就是“第一個”,必須要有第一個文件系統。

文件系統包含兩層含義,一是系統中的一系列文件目錄,二是嵌入式系統掛載文件目錄的方式。

創建目錄:
創建目錄非常簡單,只是批量創建出一系列的文件夾。
mkdir rootfs
cd rootfs
mkdir bin dev etc lib proc sbin sys usr mnt tmp var
mkdir usr/bin usr/lib usr/sbin lib/modules

創建設備文件:
相關的設備在系統中以文件的方式存在。
cd rootfs/dev
mknod -m 666 console c 5 1
mknod -m 666 null c 1 3
創建兩個必須的設備文件。c 代表字符設備,然後分別爲主設備號,次設備號。

加入配置文件:
配置文件與系統無關,可以採用軟件包。
tar etc.tar.gz
mv etc/* …/rootfs/etc/ -rf

添加內核模塊
cd …/linux進入內核代碼文件
make modules ARCH=arm CROSS_COMPILE=arm-linux-
make modules_ install ARCH=arm INSTALL_ MOD_ PATH=…/rootfs製作的根文件系統路徑,將編譯好的內核模塊.ko文件搬移到根文件目錄中的/lib/modules/目錄下。

編譯/安裝busybox

Busybox:嵌入式開發中的瑞士軍刀,可以爲根文件系統提供Linux中的相關命令。

1、配置busybox
解壓busybox壓縮包,進入busybox文件根目錄,執行命令:make menuconfig
在圖形界面下對如下選項進行配置:

Busybox Settings - - - -> build Options- - - ->

  • 選中 “Build busybox as a static binary”, 靜態鏈接
  • Cross Compiler prefix (arm-linux-)

Busybox Settings- -> Installation Options- ->

  • 選中 “Don‘t use /usr”, 選中該項可以避免busybox 被安裝到宿主系統的/usr目錄下,破壞宿主系統。
  • Busybox Installation Prefix (/xxx/rootfs) 該選項表明編譯後的busybox的安裝位置。

如下圖所示:
這裏寫圖片描述

2. 編譯、安裝busybox
編譯:make
安裝:make install

掛載根文件系統

根據存儲設備的硬件特性、系統需求,不同的文件系統類型有不同的應用場合。在嵌入式Linux應用中,主要的存儲設備爲 RAM 和FLASH,常用的基於存儲設備的文件系統類型包括:jffs2, yaffs2, ubifs, ramdisk等

文件系統類型
這裏寫圖片描述
可以多種文件系統複用。

使用Initramfs方式來掛載文件系統
1、 cd …/rootfs/
ln –s ./bin/busybox init 建立軟連接init,它連接到bin文件下的busybox
2、配置Linux內核,使內核支持initramfs
在 general setup –> 中
還要設置根文件系統目錄的路徑,如下圖所示:
這裏寫圖片描述
3、 編譯內核,將內核文件拷貝到需要的地方,把內核下載到開發板中。
4、 利用嵌入式系統中的uboot指令來設置環境變量,
setenv bootargs noinitrd console=ttySAC0,115200

這樣就可以將根文件系統掛載到linux系統中。

使用NFS方式掛載文件系統

network file system 網絡文件系統,根據上面的步驟,如果採用initramfs方式,不採用網絡的方式,如果文件系統發生改變則需要重新編譯內核,如果在開發階段每次修改文件就重新編譯內核就非常麻煩,採用NFS方式就可以變得很簡單。

1、配置Linux內核,使內核支持initramfs
注意在 general setup –> 中,去掉上一部分選中的initramfs選項。
在 file system- - >network file system- -> 中
這裏寫圖片描述

2、編譯內核

3、在uboot界面設置環境變量啓動參數
setenv bootargs noinitrd
console=ttySAC0,115200 init=/init (串口)

root=/dev/nfs rw (採用nfs設備)

nfsroot=192.168.1.3:/home/xxxx,proto=tcp,nfsvers=3
(nfs服務器的ip地址:根文件系統rootfs的路徑)

ip=192.168.1.6:192.168.1.3:192.168.1.1:255.255.255.0::eth0:off
(開發板的ip地址:服務器的ip地址:網關:掩碼:網卡名不寫:將ip地址給eth0:關閉動態ip獲取)
注意:上面的粗體字爲需要根據實際來進行修改的內容。

4、確保作爲服務器的Linux主機的NFS服務器是開啓的。
5、下載內核、啓動系統。

發佈了5 篇原創文章 · 獲贊 60 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章