製作根檔案系統的經驗

2021-09-08 19:08:39 字數 3184 閱讀 5748

《嵌入式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...