文件系統是對一個存儲設備上的數據和元數據進行組織的機制。這種機制有利於用戶和操做系統的交互。
嵌入式Linux系統由Linux內核和根文件系統兩部分組成,二者缺一不可。
內核製做:
1. 清除全部配置和中間文件
X86:make distclean
Arm: make distclean
2. 配置內核
X86:make menuconfig
Arm: make menuconfig ARCH=arm
3. 編譯內核
X86:make bzImage
Arm: make uImage ARCH=arm CROSS_COMPILE=arm-linux-
make -j4 bzImage //表示用4線程編譯
根文件系統: Linux啓動時,使用的第一個文件系統。
根文件系統的製做:
1.建立根文件系統的目錄
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
2. 建立設備文件
cd dev/
mknod -m 666 console c 5 1
mknod -m 666 null c 1 3
cd ..
3. 安裝/etc
tar etc.tar.gz -C /xxxx/rootfs
這是利用已有的etc配置目錄,固然也能夠本身新建這些配置文件。
4. 編譯內核模塊
進入到編譯內核的內核源碼頂層目錄中。
make modules ARCH=arm CROSS_COMPILE=arm-linux-
5. 安裝內核模塊
make modules_install ARCH=arm INSTALL_MOD_PATH=
/xxxx/rootfs
該命令只是將上一步編譯生成的內核模塊,從內核源碼中相應目錄拷貝到/xxxx/rootfs/lib/modules目錄下。
6. 配置busybox
進入busybox源碼目錄
配置:
make menuconfig
7. 編譯、安裝busybox
make ARCH=arm CROSS_COMPILE=arm-linux-
make install
NFS啓動設置
若是想使用nfs做爲根文件系統,
則要
1. 修改Linux內核源碼中.config中的啓動參數即修改其中的CONFIG_CMDLINE變量爲以下:
CONFIG_CMDLINE="root=/dev/nfs rw nfsroot=192.168.0.10:/home/xgm/rootfs ip=192.168.0.13 console=ttySAC0 mem=64M"
註釋:
root=/dev/nfs : 指明使用使用哪一種文件系統做爲根文件系統,這裏表示使用nfs做爲根文件系統,
若root=/dev/ram,表示使用ramdisk做爲根文件系統
rw : 權限,可讀,可寫。
nfsroot=192.168.0.10:/home/xgm/rootfs:根文件系統存儲的位置,
192.168.0.10爲存儲根文件系統的計算機的IP
/home/xgm/rootfs爲根文件的目錄。
ip=192.168.0.13:開發板啓動後的IP地址。
console=ttySAC0:代表使用串口0做爲控制檯。
mem=64M:開發板內存的大小。
2. 從新編譯內核。
製做Ramdisk
基於前面步驟製做好的根文件系統
/xxxx/rootfs
。
1. genext2fs -b 8192 -d /xxxx/rootfs ramdisk
genext2fs爲製做ramdisk的工具,也可用其餘工做來製做。
2. 壓縮
gzip -9 -f ramdisk
Ramdisk啓動設置:
1. 修改Linux內核源碼中.config中的啓動參數即修改其中的CONFIG_CMDLINE變量爲以下:
CONFIG_CMDLINE="root=/dev/ram rw console=ttySAC0 mem=64M"
2. 從新編譯內核。
製做Initramfs
1.配置內核,使其支持Initramfs
進入內核源碼目錄,執行
make menuconfig ARCH=arm
在General Setup菜單下,將"Initial RAM filesystem and RAM disk(initramfs/initrd) support"
選項給選中。
並將上圖中藍色部分中的"../../rootfs"修改成你製做的rootfs文件目錄/xxxx/rootfs,注意並不是ramdisk目錄。
2. 進入製做好的根文件系統(/xxxx/rootfs)中,執行
ln -s ./bin/busybox init
3. 修改Linux內核源碼中.config中的啓動參數即修改其中的CONFIG_CMDLINE變量爲以下:
CONFIG_CMDLINE="console=ttySAC0 mem=64M"
具體修改參數,根據不一樣的硬件,不一樣。
4. 從新編譯內核。
注意:使用Initramfs時,內核和根文件系統是一塊兒編譯成了一個文件了的。
vmlinux:原始的,未壓縮的內核鏡像
zImage:壓縮過的vmlinux內核鏡像,文件開始爲一段解壓程序,故可自解壓。
uImage:uboot引導的zImage