《嵌入式linux應用開發完全手冊 第17章》
《farsight大綱ppt根檔案系統製作》
1.首先要知道各個檔案和資料夾及其意義。
1.1 必要的檔案和資料夾:
至少要在/bin, /dev, /etc, /lib, /sbin, /usr/bin, /usr/sbin這幾個目錄裡面填入原始的應用程、庫和初始化指令碼,才能使系統跑起來。
sys,proc,tmp, mnt是空的,沒必要往裡面塞東西,系統啟動後,核心會在裡面放系統檔案。
|--bin
|--dev
| |-- console
| `-- null
|--etc
| |-- fstab
| |-- init.d
| `-- inittab
|--lib
|--linuxrc -> bin/busybox
|-- mnt
|-- proc
|-- root
|--sbin
|-- sys
|-- tmp
`--usr
|-- bin
`-- sbin
1.2.科學地規劃程式檔案目錄:
/bin: 普通使用者和root使用者都能執行的基本程式。
/sbin: oot使用者都能執行的基本程式。
/usr/bin: 更多非必需的使用者程式。
/usr/sbin: 更多非必需的root工具程式。
1.3. 庫檔案的放置:
/lib: 系統和基本命令需要的動態庫
/usr/lib:所有的其他庫
/usr/lib/***: 一些工具包的私有庫,如/usr/lib/perl5
2.啟動過程
核心啟動的最後一步就是啟動init程序,**在init/main.c檔案中。
static int noinline init_post(void)
run_init_process("/sbin/init"); //run_init_process一旦發現並執行了init,就不會再執行下面的幾個init檔案了。如果沒有發現,就繼續在下乙個地方尋找init,依次類推。
run_init_process("/etc/init");
run_init_process("/bin/init");
run_init_process("/bin/sh");
panic("no init found. try passing init= option to kernel.");
}2.1 init程式執行的幾個階段: (farsight 《根檔案系統製作》 )
a, 設定init訊號控制代碼
b, 初始化consoles
c, 解析inittab, 若不存在這是用預設值。
# /etc/inittab::sysinit:/etc/init.d/rcs
s3c2410_serial0::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
d, 執行系統初始化指令碼/etc/init.d/rcs
這裡可以做很多事情:重新掛載根檔案系統,掛載附加的檔案系統,初始化並啟動網路介面,啟動一些系統守護程序和應用程式等。
# vi /etc/init.d/rcs#!/bin/sh
ifconfig eth0
192.168.2.111
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
mount -a 是自動掛載 /etc/fstab 裡面的東西。
# cat /etc/fstab# device mount-point type options dump fsck order
proc /proc proc defaults 0
0tmpfs /tmp tmpfs defaults 0
0sysfs /sys sysfs defaults 0
0tmpfs /dev tmpfs defaults 0
0
e, 執行inittab中所有action為wait的命令
f, 執行inittab中所有action為once的命令
g, 迴圈執行inittab所有action為respawn, askfirst的命令。
3. 如何部署lib中的動態庫檔案:
3.1 找出需要的庫檔案: arm-linux-readelf -a "your exe file" | grep "shared"
[root@localhost fs_mini_mdev]# arm-linux-readelf -a bin/busybox | grep "shared
"0x00000001 (needed) shared library: [libcrypt.so.1]
0x00000001 (needed) shared library: [libm.so.6]
0x00000001 (needed) shared library: [libc.so.6]
3.2 刪除庫檔案中的除錯段等資訊以縮小檔案系統的大小
cd "lib_dir"
arm-linux-strip *.so
製作根檔案系統
製作根檔案系統 目錄實驗內容2 實驗目的2 實驗材料2 實驗工具2 實驗步驟3 1 編譯 安裝 busybox busybox 1.16.0.tar.bz2 3 1.新增動態庫與載入器,5 3.構建 etc目錄,6 3.1建立 etc inittab檔案6 3.2建立 etc fstab檔案7 3....
根檔案系統的製作
靜態檔案系統的製作 一 建立掛載點ramfs 資料夾 相當u盤的名字 二 建立乙個大小6m的檔案initrd 相當與u盤的實體 dd if dev zero of initrd bs 1k count 6144 三 mke2fs f v m 0 initrd 四 掛載檔案initrd到ramfs 相...
製作最小根檔案系統
1.dev console dev null 2.init程序 一般 於busybox 3.etc inittab 4.配置檔案指定的程式 5.c庫 1.解壓busybox tar xjf busybox 1.20.0.tar.bz2 2.配置 make menuconfig 設定交叉編譯選項cro...