檔案系統製作 NFS

2021-06-20 03:09:23 字數 4488 閱讀 8808

1.核心怎樣啟動第乙個應用程式

(1)開啟乙個裝置

open("/dev/console");

sys_dup(0);

sys_dup(0);

注釋:open函式開啟乙個檔案(第乙個檔案標號為0),sys_dup(0)表示複製第乙個檔案,所以printf,scanf,err三個都指向終端/dev/console。

(2)通過run_init_process來啟動程式,這個函式如果傳入的命令死迴圈命令,這個函式將不會返回,系統中這個優先執行init=***x,也就是命令列傳入的引數(是uboot傳給核心的),如果沒有傳入引數,則還有幾個預設的命令,依次往下執行,直到有乙個成功。

2.通過securecrt連線開發板之後,使用者可以在電腦上輸入命令和開發板進行互動,這是因為在開發板的linux系統上執行著乙個shell程式,即終端程式。

3.busybox:是眾多命令的集合,集合了linux系統中基本的命令,ls命令等其實是乙個鏈結指向busybox,執行ls命令的時候其實就是執行busybox(等同於執行busybox ls)。在busybox的源**中就包含了ls.c,copy.c等等。

4.init程式(也就是0號程序)應該去讀取乙個配置檔案,然後解析配置檔案,最後根據配置檔案執行使用者程式。這樣可以達到不同的系統系統啟動之後能夠實現不同的功能。

5.呼叫關係

busybox-->init_main

parse_inittab(解析init)

file=fopen(inittab, "r");//開啟配置檔案/etc/inittab

new_init_action  //(1)建立乙個init_action結構,並填充

//(2)把這個結構放入init_action_list鍊錶

run_actions(sysinit);

waitfor(a,0);  //執行應用程式,等待它執行完畢

run(a);  //建立process子程序

waitpid(runpid,&status,0);  //等待結束                   

delete_init_action(a);  //在init_action_list鍊錶中刪除

run_actions(wait);

waitfor(a,0);  //執行應用程式,等待它執行完畢

run(a);  //建立process子程序

waitpid(runpid,&status,0);  //等待結束                   

delete_init_action(a);  //在init_action_list鍊錶中刪除

run_actions(once);

run(a);  //建立process子程序                   

delete_init_action(a);  //在init_action_list鍊錶中刪除

while(1)

run_actions(askfirst);

if(a->pid == 0)

wpid = wait(null);  //等待子程序退出

while(wpid > 0)

}new_init_action(askfirst,bb_default_login_shell,vc_2);

||new_init_action(askfirst,"-/bin/sh","/dev/tty2");

static void new_init_action(int action, const char*command, const char *cons)

預設的配置要執行的操作:

格式::::

::ctrlaltdel:reboot

::shutdown:umount -a -r

::restart:init

::asdfirst:-/bin/sh

tty2::asdfirst:-/bin/sh

tty3::asdfirst:-/bin/sh

tty4::asdfirst:-/bin/sh

::sysinit:/etc/init.d/rcs

inittab配置檔案的格式:

:::id=>/dev/id,用做終端:stdin,stdout,stderr:printf,scanf,err

runlevels:忽略掉

action:指示何時執行:包括sysinit,respawn,askfirst,wait,once,restart,ctrlaledel,and shutdown.

process:應用程式或指令碼

6.最小根檔案系統

(1)/dev/console以及/dev/null

(2)init應用程式=>busybox

(3)/etc/inittab

(4)配置指定的應用程式

(5)c庫

7.busybox資料夾中的install檔案有如何編譯的教程

編譯器需要在makefile中指定

最後不能直接在pc上安裝!需要使用:

make conifg_prefix=/usr/myfs install

這個命令執行之後,在myfs資料夾中就有了bin、usr之類的資料夾。

8.建立裝置檔案

# mkdir dev

# sudo mknod console c 5 1

# sudo mknod null 1 3

9.構造inittab

# mkdir etc

# vi etc/inittab

conosle::askfirst:-/bin/sh

解析:這是乙個最簡單的配置檔案

10.c庫安裝

拷貝c庫的時候加-d引數,是讓系統將鏈結檔案拷貝為鏈結檔案,而不要拷貝為實際的檔案。

# mkdir /lib

# cp *.so* /usr/lib -d

11.製作映像檔案

yaffs1是針對小頁的nand flash,每一頁512位元組,每頁2kb的nand flash要使用yaffs2。

製作yaffs2檔案系統可以使用工具:yaffs_source_util_larger_small_page_nand.tar.bz2

# mkyaffs2image myfs my_fs.yaffs2

將生成的檔案系統燒寫到nand flash中。

12.這樣製作好的檔案系統是不能使用ps命令的,修改方法

# mkdir proc

# mount -t proc none /proc

13.12點是針對手動加上的,可以在修改配置檔案中

配置檔案中加入

::sysinit:/etc/init.d/rcs

# mkdir etc/init.d

# vi etc/init.d/rcs

mount -t proc none /proc

chmod +x etc/init.d/rcs

14.在13中也可以將mount -t proc none /proc替換為mount -a,mount -a這個命令會依賴乙個檔案etc/fstab

fstab的格式:

device mount-point type options dump fsck order

所以在fstab中寫入:

proc /proc proc defaults 0 0

vi編輯儲存後,使用cat命令列印出來檢查一下:

# cat etc/init.d/rcs

注釋:mount -a會去讀取fstab這個檔案,根據檔案的指示去掛載相應的檔案系統。

15.# cat /proc/mounts

檢視當前掛載了那些系統

16.dev目錄下應該有很多裝置的驅動,如果每乙個驅動都手動去建立,將會非常麻煩,所以linux提供了udev機制來解決這個問題。udev用來自動建立/dev/裝置節點,busybox裡面有乙個mdev,是udev的簡化版本。

mdev -s:表示將已有的裝置節點先建立出來

在linux中,很多程式都必須先配置,然後才能編譯

# ./configure --shared --prefix=/usr

--shared:表示會編譯出動態庫

--prefix:表示安裝在usr目錄下

17.nfs檔案系統

(1)伺服器允許某個目錄被掛接:/etc/exports中定義這個目錄

# sudo vi etc/exports

加入:/usr/myfs *(rw_sync_no_root_squash)

# sudo /etc/init.d/nfs-kernel-server restart

# sudo mount -t nfs 192.168.1.4:

/usr/myfs /mnt

檢查能否自己掛載(pc機)

(2)開發板去掛接

# mkdir /mnt

# mount -t nfs -o nolock 192.168.1.19:/usr/myfs /mnt

18.nfs掛載啟動

(1)伺服器ip、目錄

(2)開發板的ip

NFS檔案系統製作

在前面的一章中已經實現了initramfs檔案系統,但是由於開發的需要,nfs檔案系統更加適合,因此,需要使用nfs檔案系統。那需要怎麼做呢?1 配置linux核心以支援nfs檔案系統,同時需要將initramfs的選項去掉 make menuconfig general setup initial...

檔案系統製作

1 建立目錄 mkdir rootfs cd rootfs mkdir bin dev etc lib proc sbin sys usr mnt var mkdir usr bin usr lib usr sbin lib modules 2 建立裝置檔案 cd rootfs dev mknod ...

檔案系統製作步驟

magicarm270 開發平台上cramfs 根檔案系統的製作 1 將光碟附帶的rootfs.cramfs linux linux images 目錄下 拷貝到任意目錄下 2 在該目錄下建立兩個檔案 mkdir temp 建立目錄 temp mkdir cramfs 建立目錄 cramfs 3 將...