天天看點

yaffs2根檔案系統的建構過程

基于BusyBox-1.19.2

 (以其它作者的作為參考)

    1. 下載下傳BusyBox的源碼 http://busybox.net/

    2. 解壓#tar xvzf busybox-1.19.2.tgz (指令參數搞忘了,查一下tgz檔案解壓指令)

    3. 進入解壓目錄,對BusyBox進行配置

#make menuconfig

Busybox Settings  --->

         General Configuration  --->

                   [*]Don’t use /usr

BuildOptions  --->

             [] BuildBusyBox as a static binary (no shared libs)

(此項代表檔案系統是否要共享libs庫函數,如果選上,到最後就可以不用人為地添加libs庫檔案了,但是如果不添加libs庫檔案,以後的應用程式也要靜态編譯了)

             [*]Build shared libbusybox

             (/usr/local/arm/4.4.3/bin/arm-linux-)Cross Compiler prefix    

Installation Options (“make install” behavior) --->

(./_install) Busybox installation prefix (指定busybox的安裝路徑)

Busybox Library Tuning --->

       [*] vi-style line editing commands

       [*] Fancy shell prompts

(要選擇這個選項:“Fancy shell prompts”,否則挂載檔案系統後,無法正常顯示指令提示符:“[\u@\h \W]#”)

添加mdev(可以實作裝置節點的自動建立和裝置的自動挂載,mdev具體可以檢視

http://blog.chinaunix.net/uid-26806098-id-3140548.html

 )的支援

Linux System Utilities --->

         [*]mdev

[*]Support/etc/mdev.conf

[*]Supportcommand execution at device addition/removal

Linux Module Utilities--->

[ ]simplified modutils

[*]insmod

[*]rmmod

[*]lsmod

[*]modprobe   

    4. 交叉編譯,生成busybox檔案

  #make

    5. #make install

  生成_install目錄(此目錄也就是根目錄了),裡面有子目錄bin各sbin,還有一個檔案linuxrc; 并且指令還會将上面生成的busybox檔案複制到_install/bin/下

    6. 在_install目錄下建立基本的目錄結構

  #mkdir etc dev mnt proc tmp usr var tmp sys root lib

bin 存放所有使用者都可以使用的、基本的指令。

sbin 存放的是基本的系統指令,它們用于啟動系統、修複系統等。

usr 裡面存放的是共享、隻讀的程式和資料。

proc 這是個空目錄,常作為proc檔案系統的挂載點。

dev 該目錄存放裝置檔案和其它特殊檔案。

etc 存放系統配置檔案,包括啟動檔案。

lib 存放共享庫和可加載塊(即驅動程式),共享庫用于啟動系統、運作根檔案系統中的可執行程式。

boot 引導加載程式使用的靜态檔案

home 使用者主目錄,包括供服務賬号鎖使用的主目錄,如FTP

mnt 用于臨時挂接某個檔案系統的挂接點,通常是空目錄。也可以在裡面建立空的子目錄。

opt 給主機額外安裝軟體所擺放的目錄。

root root使用者的主目錄

tmp 存放臨時檔案,通常是空目錄。

var 存放可變的資料。

    7. (如果在上面選擇了[*]BuildBusyBox as a static binary (no shared libs),此步驟可以省去)

  添加庫

lib$cp /usr/local/arm/4.4.3/arm-none-linux-gnueabi/ lib/*so* ./ -a

再在管理者模式對庫瘦身(可以不用做)

    8. 在_install/etc/目錄下建立目錄和檔案:inittab, /init.d/rcS, profile, fstab。

(

添加系統啟動檔案

etc$vim inittab

添加如下内容:

#this is run first except when booting insingle-user mode.

::sysinit:/etc/init.d/rcS

# /bin/sh invocations on selected ttys

# Start an "askfirst" shell on theconsole (whatever that may be)

::askfirst:-/bin/sh

# Stuff to do when restarting the init process

::restart:/sbin/init

#Stuff to do before rebooting

::ctrlaltdel:/sbin/reboot

  

添加可執行權限

etc#chmod +x inittab

在etc下添加fstab

etc$vim fstab

#device mount-point type options dump fsch order

proc /proc proc defaults 0 0

tmpfs /tmp tmpfs defaults 0 0

sysfs /sys sysfs defaults 0 0

tmpfs /dev tmpfs defaults 0 0

這裡挂載的檔案系統有三個:proc、sysfs和tmpfs,在核心中proc和sysfs預設都支援,而tmpfs是沒有支援的(好像有支援哦),檢查核心有沒有支援tmpfs,如果沒有請如下設定

linux-2.6.35$make menuconfig

File systems --->

Pseudo filesystems --->

  [*] Virtual memory file system support(former shm fs)

  [*] Tmpfs POSIX Access Control Lists

重新編譯核心

在_install/etc下建立init.d目錄,并在該目錄下建立rcS檔案

etc$mkdir init.d

etc/init.d$vim rcS

#!/bin/sh

#This is the firstscript called by init process

/bin/mount -a

mdev -s

為rcS添加可執行權限

etc/init.d$chmod +x rcS

在etc下建立profile檔案

etc$vim profile

#!/bin/sh

export HOSTNAME=tony

export USER=root

export HOME=root

export PS1=

"[$USER@$HOSTNAME \W]#"

PATH=/bin:/sbin:/usr/bin:/usr/sbin

LD_LIBRARY_PATH=lib:/usr/lib:$LD_LIBRARY_PATH

export PATHLD_LIBRARY_PATH

  )

    9. 在_install/dev目錄(dev目錄呀,看清楚了,我就是這樣出問題的)下建立console節點(這個裝置節點是必須的)

dev# mknod –m 660 console c 5 1

(也做了這步:dev# mknod –m 660 null c 1 3)

    10. 在busybox目錄下,利用mkyaffs2image工具建立根檔案系統映像檔案

#mkyaffs2image-128M _install ./root_yaffs2.bin

(如果沒有mkyaffs2image指令就先安裝)

    11. 修改root_yaffs2.bin檔案的權限,否則該檔案無法被複制

  #chmod 777 root_yaffs2.bin

    12. 将上面生成的root_yaffs2.bin映像檔案下載下傳到開發闆中。

繼續閱讀