1. 程式人生 > >Linux_Hi3518E開發_製作根檔案系統映象

Linux_Hi3518E開發_製作根檔案系統映象

開篇廢話

    之前看《Linux開發環境使用者指南》的時候沒看仔細,沒有看到檔案系統映象製作的介紹,今天終於製作成功了,特地記錄下製作的過程,便於以後回顧,本文只介紹JFFS2格式檔案系統映象的製作。

根檔案系統簡介

    Linux的目錄結構的最頂層是一個被稱為“ /”的根目錄。系統載入 Linux 核心之後,就會掛載一個裝置到根目錄上。存在於這個裝置中的檔案系統被稱為根檔案系統。所有的系統命令、系統配置以及其他檔案系統的掛載點都位於這個根檔案系統中。

    根檔案系統通常存放於記憶體和 Flash 中,或是基於網路的檔案系統。根檔案系統中存放了嵌入式系統使用的所有應用程式、庫以及其他需要用到的服務。下圖列出了根檔案系統的頂層目錄。

    通用的 Linux 系統的根檔案系統中會包括根檔案系統頂層目錄結構圖中所有的目錄,不過在嵌入式系統中,需要精簡根檔案系統。部分可以被忽略的目錄如下表所示。

製作根檔案系統

    根檔案系統我們利用busybox來製作,首先需要獲取busybox原始碼,然後配置、編譯和安裝busybox,操作成功後開始製作根檔案系統。

1)獲取busybox原始碼

成功安裝SDK後,busybox完整原始碼就存放在package/目錄中。 

2)配置busybox

進入busybox所在目錄,進行配置操作需要輸入如下命令:

hisilicon$ make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- menuconfig

busybox的配置介面和核心配置相似,其功能選項容易理解,可以根據自己的需求選擇配置。

在 Busybox Settings ---> Build Options 中注意下面兩個選項:

[*]Build BusyBox as a static binary (no shared libs)

(arm-hisiv100nptl-linux-) Cross Compiler prefix

其中:

1. 第一個選項選擇是否把 busybox 編譯成靜態連結的可執行檔案。如果選擇該選項,編譯出來的 busybox 就是靜態連結的,執行時不依賴於動態庫,但體積較大;清除該選項將得到動態連結的busybox,體積較小,但需要動態庫的支援。

2. 第二個選項是用於選擇 SDK 推薦的交叉編譯器,配置好後儲存並退出。

3)編譯和安裝busybox

編譯和安裝busybox的具體操作如下:

hisilicon$ make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linuxhisilicon$ make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- install

編譯並安裝成功後,在 busybox 目錄下的_install 目錄下生成以下目錄及檔案:

drwxr-xr-x 2 linux linux 4096 2005-04-22 11:01 bin

lrwxrwxrwx 1 linux linux 11 2005-04-22 11:01 linuxrc->bin/busybox

drwxr-xr-x 2 linux linux 4096 2005-04-22 11:01 sbin

drwxr-xr-x 4 linux linux 4096 2005-04-22 11:01 usr

4)製作檔案系統

成功安裝 SDK 後,在 osdrv/rootfs_scripts/目錄中存放已製作好的根檔案系統壓縮包rootfs.tgz。

使用者如有需要可在 busybox 的基礎上製作根檔案系統。

製作根檔案系統的具體操作步驟如下:

1. hisilicon$mkdir rootfs

hisilicon$cd rootfs

hisilicon$cp –R package/osdrv/ busybox/busybox-1.16.1/_intsall/* .

hisilicon$mkdir etc dev lib tmp var mnt home proc

2. 配置 etc、 lib、 dev 目錄的必需檔案。

a. etc 目錄可參考系統/etc 下的檔案。其中最主要的檔案包括 inittab、 fstab、 init.d/rcS檔案等,這些檔案最好從 busybox 的 examples 目錄下拷貝過來,根據需要自行修改。

b. dev 目錄下的裝置檔案,可以直接從系統中拷貝過來或者使用 mknod 命令生成需要的裝置檔案。拷貝檔案時請使用 cp –R file。

c. lib 目錄是存放應用程式所需要的庫檔案,請根據應用程式需要拷貝相應的庫檔案。

完成以上兩個步驟,一個完整的根檔案系統就生成了。

製作根檔案系統映象

    製作JFFS2格式的映象檔案需要用到mkfs.jffs2工具,這個工具可以從網際網路中下載,也可以在SDK包中找到,具體目錄Hi3518_SDK_V1.0.8.1/osdrv/tools/pc_tools。為了使核心支援 JFFS2 檔案系統,必須在編譯核心時把 JFFS2 的選項加入(SDK釋出的核心預設已經加入了支援)。在 make ARCH=arm CROSS_COMPILE=armhisiv100nptl-linux- menuconfig 後,進入“ File systems”,選擇“ miscellaneous filesystems”,最後選中其中的“ Journalling Flash File System v2 (JFFS2) support”選項。

    具體制作方法如下,在虛擬機器終端輸入如下命令:

hisilicon$ /usr/bin/mkfs.jffs2 -d rootfs -l -e 0x10000 -o rootfs_64k.jffs2

a. /usr/bin/mkfs.jffs2 為 mkfs.jffs2 檔案的所在目錄,操作之前可以用 chmod 修改該檔案操作許可權為 777

b. rootfs 為根檔案系統的目錄

c. 0x10000 代表Flash的塊大小為64K

d. rootfs_64k.jffs2 為輸出的檔名

具體引數說明如下表: