Linux系統(tǒng)中根文件系統(tǒng)構(gòu)建基本方式_第1頁
Linux系統(tǒng)中根文件系統(tǒng)構(gòu)建基本方式_第2頁
Linux系統(tǒng)中根文件系統(tǒng)構(gòu)建基本方式_第3頁
Linux系統(tǒng)中根文件系統(tǒng)構(gòu)建基本方式_第4頁
Linux系統(tǒng)中根文件系統(tǒng)構(gòu)建基本方式_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第第頁Linux系統(tǒng)中根文件系統(tǒng)構(gòu)建基本方式1.根文件系統(tǒng)布局

(嵌入式)(Linux)根文件系統(tǒng)布局,建議還是按照FHS標(biāo)準(zhǔn)來安排,事實(shí)上大多數(shù)嵌入式Linux都是這樣做的。但是,(嵌入式系統(tǒng))可能并不需要桌面/服務(wù)器那樣龐大系統(tǒng)的全部目錄,可以酌情對系統(tǒng)進(jìn)行精簡,以簡化Linux的使用。如嵌入式Linux文件系統(tǒng)中通常不會放置內(nèi)核源碼,因而存的常不會放置內(nèi)核源碼,因而存的常不會放置內(nèi)核源碼,因而存放源碼的/usr/src目錄是不必要的,甚至連頭文件也不需要,即/usr/include目錄也不必要;但是/bin、/dev、/etc、/lib、/proc、/sbin、/usr幾個目錄是不可或缺的。

所以,允許嵌入式Linux對系統(tǒng)目錄結(jié)構(gòu)進(jìn)行精簡,以適應(yīng)具體用場合的需求,一個典型的嵌入式Linux根文件系統(tǒng)目錄如下所示:

(./_install)

Destination

path

for

'make

install'

(NEW)

2-2-4.編譯安裝

退出保存后,執(zhí)行編譯make,大概幾分鐘后編譯完成,執(zhí)行makeinstall,很快就會安裝完成:

新建一個目錄用來存放制作的根文件系統(tǒng),可以命名為rootfs。將利用BusyBox生成的二進(jìn)制文件及目錄,即_install目錄下的所有文件及目錄復(fù)制到rootfs目錄下。

3.構(gòu)建根文件系統(tǒng)

使用BusyBox編譯后,僅有bin、sbin、usr這3個目錄和軟鏈接linuxrc,目錄里都是二進(jìn)制命令工具,這還不足以構(gòu)成一個可用的根文件系統(tǒng),必須進(jìn)行其它完善工作,才能構(gòu)建一個可用的根文件系統(tǒng)。

3-1.完善目錄結(jié)構(gòu)

根據(jù)典型嵌入式Linux根文件系統(tǒng)目錄,在rootfs目錄中創(chuàng)建其他目錄

$

mkdir

dev

etc

lib

proc

sys

tmp

var

3-2.添加C運(yùn)行庫文件

庫文件可直接從交叉工具鏈獲取,一般在工具鏈的libc/lib/目錄下。我這里是在ubuntu下安裝的Linaro的交叉工具鏈:

庫文件是在/usr/(arm)-linux-gnueabihf/lib/目錄下,拷貝動態(tài)鏈接庫文件(.so文件)到新制作的根文件系統(tǒng)根目錄下/lib目錄里:

$

cp

-a

/usr/arm-linux-gnueabihf/lib/*so*

./lib/

這里只是拷貝動態(tài)鏈接庫。一般開發(fā)程序使用動態(tài)編譯需要板子上動態(tài)庫的支持才能運(yùn)行,所以拷貝動態(tài)庫。而靜態(tài)庫一般在靜態(tài)編譯的時候用到,由于交叉編譯的工作放在了PC上所以板子上不需要靜態(tài)庫,所以沒有必要拷貝,這樣還可以減小根文件系統(tǒng)的體積。

一般使用gcc編譯后的可執(zhí)行文件、目標(biāo)文件和動態(tài)庫都帶有調(diào)試信息和符號信息,這些在調(diào)試的時候用到,但是卻增大了文件的大小。通常在PC上調(diào)試,或者調(diào)試時使用這些帶有調(diào)試信息和符號信息的庫文件,程序發(fā)布后使用去掉這些信息的庫文件,可以大大縮小根文件系統(tǒng)的體積。這里我們?nèi)サ暨@些信息,方法是使用strip工具:

$

arm-linux-gnueabihf-strip

./*

3-3.添加初始化配置腳本

初始化配置腳本放在在/etc目錄下,用于系統(tǒng)啟動所需的初始化配置腳本。BusyBox提供了一些初始化范例腳本,在examples/bootfloppy/etc/目錄下。將這些配置文件復(fù)制到”目錄下。將這些配置文件復(fù)制到”目錄下。將這些配置文件復(fù)制到新制作的根文件系統(tǒng)etc目錄下

cp

-a

../busybox/busybox-1.29.3/examples/bootfloppy/etc/*

etc/

添加后如圖所示:

3-3-1.修改/etc/inittab文件

/etc/inittab文件是init進(jìn)程解析的配置文件,通過這個配置文件決定執(zhí)行哪個進(jìn)程,何時執(zhí)行。將文件修改為:

#

系統(tǒng)啟動時:/etc/init.d/rcS#

系統(tǒng)啟動按下En(te)r鍵時:-/bin/sh#

按下Ctrl+Alt+Del鍵時:/sbin/reboot#

系統(tǒng)關(guān)機(jī)時:/sbin/swapoff

-a:/bin/umount

-a

-r#

系統(tǒng)重啟時:/sbin/init

以上內(nèi)容定義了系統(tǒng)啟動時,關(guān)機(jī)時,重啟時,按下Ctrl+Alt+Del鍵時執(zhí)行的進(jìn)程。

3-3-2.修改/etc/init.d/rcS文件

#!

/bin/sh#

掛載

/etc/fstab

中定義的所有文件系統(tǒng)/bin/mount

-a#

掛載虛擬的devpts文件系統(tǒng)用于用于偽終端設(shè)備/bin/mkdir

-p

/dev/pts/bin/mount

-t

devpts

devpts

/dev/pts#

使用mdev動態(tài)管理u盤和鼠標(biāo)等熱插拔設(shè)備/bin/echo

/sbin/mdev

>

/proc/sys/kernel/hotplug#

掃描并創(chuàng)建節(jié)點(diǎn)/sbin/mdev

-s

3-3-3.修改/etc/fstab文件

/etc/fstab文件存放的是文件系統(tǒng)信息。在系統(tǒng)啟動后執(zhí)行/etc/init.d/rcS文件里/bin/mount-a命令時,自動掛載這些文件系統(tǒng)。內(nèi)容如下:

#

proc

/proc

proc

defaults

0

0sysfs

/sys

sysfs

defaults

0

0tmpfs

/tmp

tmpfs

defaults

0

0tmpfs

/dev

tmpfs

defaults

0

0

注:這里我們掛載的文件系統(tǒng)有三個proc、sysfs和tmpfs,在內(nèi)核中proc和sysfs默認(rèn)都支持,而tmpfs是沒有支持的,我們需要添加tmpfs的支持。

3-3-4.修改/etc/profile文件

/etc/profile文件作用是設(shè)置環(huán)境變量,每個用戶登錄時都會運(yùn)行它。將文件內(nèi)容修改為:

#

主機(jī)名export

HOSTNAME=zyz#

用戶名export

USER=root#

用戶目錄export

HOME=/root#

終端默認(rèn)提示符export

PS1="[$USER@$HOSTNAME:$PWD]#

"

#

環(huán)境變量export

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

動態(tài)庫路徑export

LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH

因?yàn)橹付藃oot用戶的家目錄為/root,所以需要創(chuàng)建該目錄,否則執(zhí)行cd~時會失敗

$

mkdir

root

登錄系統(tǒng)后效果為:

...Please

press

Enter

to

activate

this

console.[root@zyz:/]#[root@zyz:/]#

cd

~[root@zyz:/root]#[root@zyz:/root]#

echo

$PATH/bin:/sbin:/usr/bin:/usr/sbin

至此,根文件系統(tǒng)就基本構(gòu)建好了。

4.制作根文件系統(tǒng)鏡像

4-1.根文件系統(tǒng)類型

如果文件系統(tǒng)已經(jīng)布局完成,則可以發(fā)到目標(biāo)中了。通常會制作一個鏡像然后通過某種方式固化到目標(biāo)系統(tǒng)中,具體采用什么樣的形發(fā)布需要根據(jù)資源狀況、內(nèi)核情況和系統(tǒng)需求等方面進(jìn)行裁決:

(1)(硬件)方面,至少需要考慮主存儲介質(zhì)的類型和大小如Flash是NORFlash還是NANDFlash,(RAM)的大小等。

(2)內(nèi)核方面,則需考慮所裁剪后的支持哪些文件系統(tǒng)采用中最合適,能滿足性、速度等要求。

(3)系統(tǒng)需求方面,要考慮運(yùn)行速度、是否可寫壓縮等因素。常見的可用于根文件系統(tǒng)類型有ramdisk、cramfs、jffs2、yaffs/yaffs2和ubifs等,各類型的特性如表所列。

盡管文件系統(tǒng)固件以某一種文件系統(tǒng)的鏡像發(fā)布,但是整個文件系統(tǒng)實(shí)際上還是并存多種邏輯文件系統(tǒng)的。例如,一個系統(tǒng)根文件系統(tǒng)以ubifs掛載,但是/dev目錄卻是以tmpfs掛載的、/sys目錄掛載的是sysfs文件系統(tǒng)?,F(xiàn)在,似乎ubifs是一種趨勢。

4-2.制作UBIFS根文件系統(tǒng)鏡像

Linux下制作UBIFS的命令有兩個,mkfs.ubifs和ubinize。mkfs.ubifs,將一個目錄制作為UBIFS文件系統(tǒng)。使用范例:

$

mkfs.ubifs

-m

2048

-e

128KiB

-c

4096

-r

./rootfs

-o

rootfs.ubifs

其中:

-r,

-d,

--root=DIR

build

file

system

from

directory

DIR(目錄)-m,

--min-io-size=SIZE

minimum

I/O

unit

size(最小輸入輸出單元大?。?e,

--leb-size=SIZE

(logic)al

erase

block

size(邏輯擦除塊大?。?c,

--max-leb-cnt=COUNT

(maxim)um

logical

erase

block

count(最大邏輯擦除塊數(shù)目)-o,

--output=FILE

output

to

FILE(輸出文件)

所以制作ubifs鏡像文件,需要知道3個關(guān)鍵參數(shù),即最小輸入輸出單元大小,邏輯擦除塊大小,最大邏輯擦除塊數(shù)目,其中最大邏輯擦除塊數(shù)目可由Flash分區(qū)大小和邏輯擦除塊大小計算出來,這些信息可以通過u-boot命令查看:

=>

mtdparts

default=>

ubi

part

rootfs

ubinize,將mkfs.ubifs制作的UBIFS文件系統(tǒng)制作成含有卷標(biāo)的可以直接燒寫在Flash上的鏡像。使用范例:

$

ubinize

-m

2048

-p

128KiB

ubinize.cfg

-o

rootfs_ubifs.img

其中:

-o,

--output=

output

file

name(輸出文件)-p,

--peb-size=

size

of

the

physical

eraseblock

of

the

flash(物理擦除塊大?。?/p>

this

UBI

image

is

created

for

in

bytes,

kilobytes

(KiB),

or

megabytes

(MiB)

(mandatory

parameter)-m,

--min-io-size=

minimum

input/output

unit

size

of

the

flash

in

bytes

這里需要兩個參數(shù)物理擦除塊大小和最小輸入輸出單元大小。ubinize.cfg是配置文件,內(nèi)容如下:

[ubifs]mode=ubiimage=rootfs.ubifsvol_id=0vol_size=1024MiBvol_type=dynamicvol_name=rootfsvol_flags=auto

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論