Linux制作根文件系統筆記


測試平台

宿主機平台:Ubuntu 12.04.4 LTS

目標機:Easy-ARM IMX283

目標機內核:Linux 2.6.35.3

交叉編譯器:arm-linux-gcc 4.4.4

 

Busybox簡介

關於busybox的原理及代碼分析推薦 busybox詳解

Busybox是一個開源項目,遵循GPL v2協議。Busybox將眾多的UNIX命令集合進一個很小的可執行程序中,可以用來替代GNU fileutils、shellutils等工具集。Busybox中各種命令與相應的GNU工具相比,所能提供的選項比較少,但是也足夠一般的應用了。Busybox主要用於嵌入式系統。

 

 

 

 

Busybox構建基礎文件系統

下載 busybox

備注:2.6的內核不要使用太高版本busybox,會出現不兼容情況

wget https://busybox.net/downloads/busybox-1.22.1.tar.bz2

解壓

tar xjvf busybox-1.22.1.tar.bz2

cd busybox-1.22.1

編譯配置

make menuconfig

下面記錄一下我主要配置的地方

1.Build Options

1)設置為靜態編譯,反正也不太大,共享庫的話還得拷貝動態庫文件

2)交叉編譯工具,也可在make時使用 make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-

 

2.Installation Options

安裝路徑設置,最好放在支持nfs掛載的目錄里面,因為后面文件系統需要通NFS掛載來測試

 

剩下的都是一些工具集的配置,剛開始使用默認配置即可;

編譯與安裝

make

make install

 

開始構建文件系統

1.完善文件系統

查看安裝文件夾,發現之后 bin sbin usr 這三個文件夾,我們在此基礎上添加其他文件夾

mkdir dev etc lib proc sys tmp var

 

2.添加C運行庫

C運行庫可以直接從使用的交叉編譯工具中獲取,一般在 /arm-none-linux-gnueabi/libc/lib/

cp -av /home/ctools/arm-2011.03/arm-none-linux-gnueabi/libc/lib/* lib/

 

3.添加初始化腳本

初始化腳本放置在 etc 目錄下,  先從busybox中拷貝初始化腳本模板

cp -av /home/vmuser/wtools/busybox-1.22.1/examples/bootfloppy/etc/* etc/

 

初始化腳本文件修改

1)打開 myrootfs/etc/inittab, 注釋第三行,因為我們不是使用tty2

 

 

最小文件系統掛載測試

NFS根文件系統設置

1)開機按空格,進入Uboot

2)修改內核啟動參數變量 bootargs ,設置為內核 nfs 啟動

setenv bootargs 'root=/dev/nfs rw console=ttyAM0,115200n8 nfsroot=192.168.1.123:/home/vmuser/workspace/myrootfs ip=192.168.1.124:192.168.1.123:192.168.1.254:255.255.255.0:epc.zlgmcu.com:eth0:off mem=64M'
saveenv
reset

3)復位,內核啟動正常

 

文件系統增加功能

上面的系統啟動后,發現僅掛載了 proc文件系統

/etc/fstab是用來存放文件系統的靜態信息的文件,當系統啟動的時候,系統會自動地從這個文件讀取信息,並且會自動將此文件中指定的文件系統掛載到指定的目錄。

/etc/fstab文件主要包括6段,依次是:

<file system>  <dir>  <type>  <options>  <dump>  <pass>

<file system> 要掛載的分區或存儲設備
<dir>  掛載的目錄位置
<type> 掛載分區的文件系統類型,比如:ext3、ext4、xfs、swap
<options> 掛載使用的參數有哪些。舉例如下:
  auto - 在啟動時或鍵入了 mount -a 命令時自動掛載。
  noauto - 只在你的命令下被掛載。
  exec - 允許執行此分區的二進制文件。
  noexec - 不允許執行此文件系統上的二進制文件。
  ro - 以只讀模式掛載文件系統。
  rw - 以讀寫模式掛載文件系統。
  user - 允許任意用戶掛載此文件系統,若無顯示定義,隱含啟用 noexec, nosuid, nodev 參數。
  users - 允許所有 users 組中的用戶掛載文件系統.
  nouser - 只能被 root 掛載。
  owner - 允許設備所有者掛載.
  sync - I/O 同步進行。
  async - I/O 異步進行。
  dev - 解析文件系統上的塊特殊設備。
  nodev - 不解析文件系統上的塊特殊設備。
  suid - 允許 suid 操作和設定 sgid 位。這一參數通常用於一些特殊任務,使一般用戶運行程序時臨時提升權限。
  nosuid - 禁止 suid 操作和設定 sgid 位。
  noatime - 不更新文件系統上 inode 訪問記錄,可以提升性能。
  nodiratime - 不更新文件系統上的目錄 inode 訪問記錄,可以提升性能(參見 atime 參數)。
  relatime - 實時更新 inode access 記錄。只有在記錄中的訪問時間早於當前訪問才會被更新。(與 noatime 相似,但不會打斷如 mutt 或其它程序探測文件在上次訪問后是否被修改的進程。),可以提升性能。
  flush - vfat 的選項,更頻繁的刷新數據,復制對話框或進度條在全部數據都寫入后才消失。
  defaults - 使用文件系統的默認掛載參數,例如 ext4 的默認參數為:rw, suid, dev, exec, auto, nouser, async.
<dump>  dump 工具通過它決定何時作備份. dump 會檢查其內容,並用數字來決定是否對這個文件系統進行備份。 允許的數字是 010 表示忽略, 1 則進行備份。大部分的用戶是沒有安裝 dump 的 ,對他們而言 <dump> 應設為 0<pass> fsck 讀取 <pass> 的數值來決定需要檢查的文件系統的檢查順序。允許的數字是0, 1, 和2。 根目錄應當獲得最高的優先權 1, 其它所有需要被檢查的設備設置為 2. 0 表示設備不會被 fsck 所檢查。

 

我們參照模板添加 sysfs tmpfs devfs的支持

 

動態創建設備節點

修改 /etc/init.d/rcS

#! /bin/sh

/bin/mount -a
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

 

 然后重新啟動,增加的文件系統均已支持

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM