構造嵌入式Linux的檔案系統

2021-04-15 03:13:03 字數 4243 閱讀 6018

1.引言

在數字資訊科技和網路技術高速發展的今天,手持資訊產品正拓展著一片越來越大的市場,pda、手機、掌上電腦、資訊家電等各式手持產品已擁有了龐大的使用者群。手持資訊產品所運用的最關鍵的核心技術就是嵌入式作業系統。而其中,linux以其開源的核心和免費的應用程式、能夠自由地移植和開發的優勢,更迎合嵌入式市場。

嵌入式linux的開發大致可分為三個層次:引導裝載核心、構造檔案系統和圖形使用者介面。本文基於一款手持電腦的實際開發,介紹嵌入式linux作業系統中檔案系統的構造。

2.簡介檔案系統

檔案系統是指在乙個物理裝置上的任何檔案組織和目錄,它構成了linux系統上所有資料的基礎,linux程式、庫、系統檔案和使用者檔案都駐留其中,因此,它是系統中龐大複雜且又是最為基本和重要的資源。值得提出的是,linux系統中的檔案不僅包括普通的檔案和目錄,每個和裝置相關的實際實體也都被對映為乙個檔案,例如磁碟、印表機、終端等等,這樣的裝置檔案又稱為特殊檔案。所以,linux下的檔案是作業系統服務和裝置的簡單而又統一的介面,從某種意義上可以說,linux裡的一切事物都是檔案。

在linux中,檔案系統的結構是基於樹狀的,根在頂部,各個目錄和檔案從樹根向下分支,目錄樹的最頂端被稱為根目錄(/)。在後面介紹的所構造檔案系統結構圖(圖1)即顯示了樹狀的檔案系統。linux作業系統由一些目錄和許多檔案組成,例如,圖中的/bin目錄包含二進位制檔案的可執行程式,/sbin目錄用於儲存管理系統的二進位制檔案,/etc目錄包含絕大部分的linux系統配置檔案,/lib目錄儲存程式執行時使用的共享庫,/dev目錄包含稱為裝置檔案的特殊檔案,/proc目錄實際上是乙個虛擬檔案系統,/tmp目錄用於儲存程式執行時生成的臨時檔案,/home目錄是使用者起始目錄的基礎目錄,/var目錄儲存要隨時改變大小的檔案,/usr目錄及其子目錄對 linux系統的操作非常重要,它儲存著系統上的一些最重要的程式以及包含你安裝的大型軟體包。

由於linux是乙個多工、多使用者的作業系統,因此它裡面的檔案還都被賦予了一定的許可權,許可權決定誰能讀、寫或執行乙個檔案,以及這個檔案的型別和如何執行。例如下面的檔案列表:

-rw-r--r--   1   root   root         1756   sep  4   2002   inittab

就表示:這個名為inittab的檔案是普通檔案,所有者有讀寫的許可權,所在組和其他人都只有讀的許可權,它的連線數為1,所有者及檔案所屬的組都是root,檔案中位元組數為1756,檔案建立日期是2023年9月4日。我們可以通過對檔案屬性的設定,來滿足檔案在不同使用者組、不同使用者操作下的不同狀態。

這是有關檔案系統的基本知識,下面就結合實際開發過程分析檔案系統的構造。

3.構造嵌入式linux的檔案系統

3.1

開發環境及要求

3.2

構造檔案系統 1

)構造基本目錄

首先建立乙個檔案系統的工作空間。建立目錄/home/work,我們所構造的檔案系統就在work這個目錄中。建立基本目錄,如:bin,dev,etc,lib,mnt,proc,sbin,tmp,usr,var,tools。具體結構圖見圖1(圖中所顯示的檔案都是目錄檔案)。其中,tools是便於開發而建立的目錄,因為整個系統要求盡量小,所以應只包含一些必須的二進位制程式,而開發過程中需要用到的命令就放在tools中,將path包含tools即可。/etc目錄下只包含了一些啟動過程的配置檔案,/lib目錄下的modules子目錄包含了可動態載入到核心的各種模組。另外,目錄var下還應建立兩個子目錄log和run,負責記錄系統的日誌和執行狀態。整個檔案系統中除了tmp和var目錄放在sdram內以外,其他所有目錄都放在flash中,因為tmp和var中的內容需要經常寫入,所以放在可讀寫的ram裡。

2)配置啟動過程所必須的檔案

構造檔案系統最基本的要求就是系統能夠在此基礎上啟動執行起來,所以,/sbin下的init程式必不可少。init程式是引導過程完成後核心執行的第乙個程式,它能啟動全部其他程式。只要init完成執行全部必要的程式,系統就開始建立並開始執行。當程式開始啟動時,init讀取乙個配置檔案inittab,這個檔案位於/etc下,它確定了init在啟動和關機時的工作特性。在我們開發的這個嵌入式系統中,所有的檔案內容只需保留與開發要求有關的必須部分,所以inittab的內容被根據需要重新寫入,具體內容如圖2。

id:s:initdefault:

si::sysinit:/etc/rc.d/rc.sysinit

b::s:respawn:/bin/bash

c:s:once:/tools/telnetd -debug

d:s:respawn:/sbin/pppd /dev/ttys0

圖2 配置檔案inittab的內容

# remount the root filesystem read-write.

#mount –n –o remount,rw /

mount –o remount,rw –n /dev/mtdblock2 /

mount –a

圖3 指令碼rc.sysinit的內容

另外,為了盡量精簡核心,程式都以動態鏈結庫檔案的方式編譯,即當程式執行到所需庫檔案時才動態載入,所以保證庫檔案的完整性就顯得相當重要。為確保執行各種程式都能在/lib目錄中找到合適的庫檔案,就乾脆對/lib中的庫檔案不作任何刪減,而完整的/lib目錄(含子目錄及全部庫檔案)也不過2mb大小。 3

)配置檔案系統使用者

這一步驟的實現,體現了該款嵌入式產品作業系統的一大特色——安全性。為了防止系統中的檔案被誤改或被惡意破壞,我們設定組和使用者,讓只有隸屬於特定組的特定使用者才能對特定的程式進行合法操作。

根據需要,我們定義了5個組和5個使用者,具體設定及其說明見表1和表2。

group id

group name

說 明 0

root

root

使用者所在的組 1

general

一般使用者所在的組 2

network

網路使用者所在的組 3

security

安全使用者所在的組 4

module

模組使用者所在組

表1 系統中group id的設定

user id

group id

user name

說 明 0

0root

root

使用者,只有命令檔案init、bash的使用者是root 1

1general

普通使用者,一般執行檔案的使用者 2

2network

網路程式的使用者 3

3security

安全檔案的使用者 4

4module

模組相關檔案的使用者

表2 系統中user id的設定

我們的/etc目錄中沒有列入管理組的group檔案和管理使用者的passwd檔案,所以在設定檔案或目錄的所有權時,全部用id號來代替組名和使用者名稱。用chown命令來改變檔案的所有權,如chown 0.0 inittab(前乙個「0」代表屬組,後乙個「0」代表使用者),修改後的inittab檔案的詳細資訊為:

-rw-r--r--   1      0      0        237     jul  26   10

:30   inittab

將系統中所有的檔案和目錄按照其具體型別和要求,為其設定特定的組和使用者對它的所有權,例如,/etc中的module.conf配置檔案的所有權是module組和module使用者,那麼只有組和使用者同為module的程式(比如/lib/modules/中的程式)才有權檢視module.conf檔案,其他非root使用者的程式都打不開這個檔案。這樣,除了root使用者,其他不具有操作許可權的使用者就不可能對那些特殊檔案,如有關網路、安全等重要資訊進行執行和修改。而擁有root使用者許可權的檔案只有init和bash兩個,init用於完成系統的初始化過程,並不涉及對其他檔案和程式的操作;bash是開發過程中使用者與系統互動的需要,便於對檔案系統進行修改,開發完成後的實際系統並不需要bash,可刪除。這樣,各個檔案和程式均在自己所屬的組和使用者中執行,不會互相干擾,使得整個系統有條不紊,不會發生程式越權誤操作的現象,保證了作業系統本身的安全性,也讓試圖竊取或破壞資料的攻擊者無機可乘。 4

)根據需要,在基本檔案系統上新增應用程式

到此,乙個滿足系統和產品需求的嵌入式linux檔案系統就基本構造完成。為了系統能在特定的嵌入式硬體裝置上執行,系統中所有的二進位制檔案都必須是經過特定的嵌入式開發編譯工具編譯,此次開發用到的嵌入式開發工具是3.2版本的arm gcc。將編譯好的檔案系統燒至嵌入式系統的開發板中,調通串列埠,就可以進行除錯和進一步的開發了。

嵌入式linux檔案系統修復

最近在做linux系統整合的時候會發現檔案系統損壞的問題,導致一些分割槽無法使用。發生以上問題時可以使用fsck命令進行修復。fsck命令的主要功能就是對檔案系統進行修復。fsck命令的主要引數如下 t 給定檔案系統的型式,若在 etc fstab 中已有定義或 kernel 本身已支援的則不需加上...

嵌入式Linux檔案系統的介紹

學習linux都是跟檔案打交道,卻不知道檔案系統下的目錄存放的內容,有點說不過去,特意準備了這篇文章供大家閱讀,哪怕有一點點幫助,都是對我的鼓勵。根檔案系統一般應該比較小,因為包括嚴格的檔案和乙個小的不經常改變的檔案系統不容易損壞。損壞的根檔案系統一般意味著除非用特定的方法 例如從軟盤 系統無法引導...

嵌入式檔案系統小結

近日看了幾個fat檔案系統的原始碼,主要有ucfs efsl minfat等,小結一下。嵌入式的檔案系統雖有不少,但在消費類電子產品上,還是以fat為主,儲存體為nand flash,加上mass storage功能,能讓使用者在pc上管理檔案,如在 電子詞典上等,都用得很廣泛。ucfs 主要針對於...