S3C6410嵌入式應用平臺構建(六)——linux-3.14.4移植到OK6410-(Yaffs2文件製做)

本文主要講怎用利用yaffs2工具和busybox製做yaffs2文件系統鏡像。大多數都是參照網上的,目的在於記錄學習,不作任何用途。node

   1、製做mkyaffs2image工具linux

         進入yaffs2源碼目錄下utils目錄,修改mkyaff2image.c,作以下修改:git

進入yaffs2源碼目錄下direct目錄,修改yportenv.hweb

增長#define CONFIG_YAFFS_DEFINES_TYPESshell

保存後make,這時就在utils目錄生產mkyaffs2image文件,把這個文件拷貝到/usr/bin目錄下vim

到此,後面咱們就能夠用該工具製做鏡像文件了。app

 

    2、製做根文件系統dom

當咱們在linux下輸入ls  / 的時候,見到的目錄結構以及這些目錄下的內容都大同小異,這是由於全部的linux發行版在對根文件系統佈局上都遵循FHS標準的建議規定。socket

該標準規定了根目錄下各個子目錄的名稱及其存放的內容:tcp

目錄名

存放的內容

/bin

必備的用戶命令,例如ls、cp等

/sbin

必備的系統管理員命令,例如ifconfig、reboot等

/dev

設備文件,例如mtdblock0、tty1等

/etc

系統配置文件,包括啓動文件,例如inittab等

/lib

必要的連接庫,例如C連接庫、內核模塊

/home

普通用戶主目錄

/root

root用戶主目錄

/usr/bin

非必備的用戶程序,例如find、du等

/usr/sbin

非必備的管理員程序,例如chroot、inetd等

/usr/lib

庫文件

/var

守護程序和工具程序所存放的可變,例如日誌文件

/proc

用來提供內核與進程信息的虛擬文件系統,由內核自動生成目錄下的內容

/sys

用來提供內核與設備信息的虛擬文件系統,由內核自動生成目錄下的內容

/mnt

文件系統掛接點,用於臨時安裝文件系統

/tmp

臨時性的文件,重啓後將自動清除

製做根文件系統就是要創建以上的目錄,並在其中創建完整目錄內容。其過程大致包括:

· 編譯/安裝busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目錄

· 利用交叉編譯工具鏈,構建/lib目錄

· 手工構建/etc目錄

· 手工構建最簡化的/dev目錄

· 建立其它空目錄

· 配置系統自動生成/proc目錄

· 利用udev構建完整的/dev目錄

· 製做根文件系統的Yaffs2映像文件

下面就來詳細介紹這個過程。

  1. 下載並編譯Busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目錄

  1.1 下載網址:http://www.busybox.net/   我下載  busybox-1.22.1.tar.bz2

  1.2 解壓後修改Makefile文件,這就不用說,跟Linux同樣。

   1.3 配置菜單

咱們大多按找默認配置,而後在此基礎上進行修改。

   $ make defconfig

   $ make menuconfig

Busybox Settings --->Build Options --->(arm-linux-) Cross Compiler prefix
Busybox Settings --->General Configuration --->[*] Don't use /usr

Busybox Settings --->Installation Options—>你本身要安裝的目錄(默認是_install目錄)

我本身設置在ok6410_fs/  


  1.4 編譯,安裝

  $make;make install

  咱們進入ok6410_fs後發現,已經有了  /bin、/sbin、/usr/bin、/usr/sbin

 

2. 構建基本的文件夾及文件

   創建Linux文件系統基本的文件夾,我也是參照別人的,無非就是新建文件夾,而後改權限嘛,我這裏就偷個懶,和別人同樣,寫個腳本。

保存,修改權限:chmod +x creat_fs.sh

$ ./creat_fs.sh

 

2. 1 建立 /etc/profile文件,主要用於環境變量。文件內容以下:

2.2 建立初始化文件。etc/init.d/rcS

注意修改這個文件權限:chmod +x /etc/init.d/rcS

2.3 建立etc/fstab文件


2.4 建立 etc/inittab文件

inittab文件中每一個條目用來定義一個須要init啓動的子進程,並肯定它的啓動方式,格式爲<id>:<runlevel>:<action>:<process>。例如:ttySAC0::askfirst:-/bin/sh

 

2.5 建立 usr/etc/init


注意修改權限:chmod +x usr/etc/init

 

2.6 建立usr/etc/mdev.conf,內容爲空。

 

3. 拷貝arm工具鏈中庫文件到lib目錄中

$ cp /usr/local/arm/toolschain/4.4.3/arm-none-linux-gnueabi/lib/*so* lib/ –d

-d的做用,原來是一個連接文件的還拷貝成一個連接文件,若是不帶-d的話會拷貝到源文件,這個時候文件就會比較大

 

4. 到此,基本的根文件系統已經準備好,下面用mkyaffs2image產生鏡像文件。

$ mkyaffs2image ok6410_fs  rootfs.yaffs2

 

最後經過,tftp下載到板子上,寫到nandflash上啓動,啓動log以下:

從上面能夠看出,yaffs2文件系統是掛載成功了,可是內核仍是啓動不起來,下篇文章在具體分析了。個人週末呀。。。。
相關文章
相關標籤/搜索