Linux根文件系統的構建

 首先,介紹下列幾個定義

根文件系統:系統啓動所必需的文件,如內核映像文件、內核啓動後運行的第一個程序(init)、給用戶提供操作界面的shell程序、應用程序所依賴的庫,這些必需、基本的文件合稱爲根文件系統。

掛接點或安裝點(mount point):Linux以樹狀結構管理所有目錄、文件,其他分區掛接在某個目錄上,這個目錄就稱爲掛接點或安裝點。

文件系統類型:分區上存儲文件時,要遵循一定的格式,這種格式稱爲文件系統類型。(fat16、fat32、ntfs、ext2、ext3、yaffs、jffs2等)(虛擬文件系統類型:proc、sysfs等),常常把文件系統類型簡稱爲“文件系統”。

FHS標準(Filesystem Hierarchy Standard,文件系統層次標準),定義了系統運行所需的最小文件、目錄的集合,並列舉了不遵循這些原則的例外情況及其原因。

    /
     |___ /bin                          存放所有用戶可以使用的、基本的命令。必須與根文件系統在同一個分區。
     |___ /sbin                        存放系統命令,管理員才能使用。還可存放在/usr/sbin、/usr/local/sbin,啓動、修復系統
     |___ /dev                         存放設備文件。通過讀寫某個設備文件操作某個具體的外設。
     |___ /etc                          存放各種配置文件。
     |___ /lib                           存放共享庫和可加載模塊(驅動程序)。
     |___ /home                      用戶目錄,可選。
     |___ /root                        根用戶目錄。
     |___ /usr                         可存放在另一個分區,存放的是共享、只讀的程序和數據。只讀。
     |___ /var                         存放可變的數據,如spool(mail、news、打印機等用的),log文件、臨時文件。
     |___ /proc                       空目錄,作爲proc文件系統掛接點。(常在/etc/fstab進行設置自動掛接)
     |___ /mnt                        通常爲空目錄,臨時掛接某個文件系統的掛接點。/mnt/cdrom、/mnt/hda1
     |___ /tmp                        存放臨時文件,通常爲空目錄。


在構造根文件系統時使用動態鏈接的busybox,構造根文件時需要在/lib目錄下面放置glibc庫文件。

1、編譯安裝busybox

首先修改busybox根目錄下的Makefile,使用交叉編譯器。在189行的ARCH?=$(SUBARCH)修改爲ARCH?=arm,在164行的CROSS_COMPILE?=修改爲CROSS_COMPILE?=arm-linux-修改後執行make;make install,在busybox的根目錄下有_install文件夾,裏面就是我們所生成的文件和目錄如下所示:

由於每個版本的配置選項組織有所不同。不管怎樣,我們注意以下選項就行了:

1) Support for devfs

2) Build BusyBox as a static binary ( no shared libs )  //將busybox編譯成靜態鏈接

3) Do you want to build busybox with a Cross Compile?

(/usr/local/arm/3.3.2/bin/arm-linux-) Cross Compile prefix  //指定交叉編譯器

4) init

5) Support reading an inittab file  //支持init讀取/etc/inittab 配置文件

6) (X) ash選中ash   //建立的rcS腳本才能執行

7)ash

8)cp  cat  ls  mkdir  mv   //可執行命令工具的選擇,自己看着辦吧,需要用到的就選上

9) mount

10) umount

11) Support loopback mounts

12) Support for the old /etc/mtab file

13) insmod

14) Support version 2.2.x to 2.4.x Linux kernels

15) Support version 2.6.x Linux kernels

16) vi

17)don’t use user

以上內容必須選上,其他可按默認值;如果要支持其他功能,如網絡支持等,可按需選擇.


2、建立root根目錄root_nfs

進入root_nfs目錄,通過mkdir dev etc home lib mnt opt proc root sys tmp var web目錄

同時將 _install文件夾下的內容也放到root_nfs下,如下所示:

3、創建etc目錄下的文件

3.1 創建etc/inittab文件

init進程根據/etc/inittab文件來創建其他子進程,比如調用腳本文件配置ip地址、掛接其他文件系統,最後啓動shell等。

參考busybox源碼下面的"examples/inittab"文件,創建inittab代碼如下:

::sysinit:/etc/init.d/rcS//指定系統啓動的腳本

::respawn:/bin/sh//打開一個登錄會話

ttySAC0::askfirst:/bin/sh//打開一個無需登陸驗證的shell,以ttySAC0作爲控制檯

::ctrlaltdel:/sbin/reboot//指定當按下ctrl+alt+del時執行命令

::shutdown:/bin/umount -a -r//關機時執行的操作

3.2 創建etc/init.d/rcS文件

rcS文件,藉助啓動腳本設置各種程序開機後自動運行,也可進行其他系統設置,創建的文件內容如下:

#! /bin/sh

ifconfig eth0 up XXX.XXX.XXX.XXX

mount -a

mk /dev/pts

mount -t devpts devpts /dev/pts

echo /sbin/mdev > /proc/sys/kernel/hotplug

mdev -s

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章