0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于ARM技術(shù)的uClinux系統(tǒng)設(shè)計(jì)和應(yīng)用分析

電子設(shè)計(jì) ? 來(lái)源:微計(jì)算機(jī)信息 ? 作者:盧劍翔,劉成安, ? 2020-09-24 17:08 ? 次閱讀

作者:盧劍翔,劉成安,胡和智,劉振剛

根文件系統(tǒng)是構(gòu)建一個(gè) uCLinux嵌入式系統(tǒng)的重要組成部分。目前嵌入式系統(tǒng)可以選擇的根文件系統(tǒng)有:Romfs、CramFS、Ramfs、Jffs2、Ext2等等,本系統(tǒng)采用 CramFS作為uCLinux嵌入式系統(tǒng)的只讀根文件系統(tǒng)。本文討論了CramFS文件系統(tǒng)的特點(diǎn),并詳細(xì)的說(shuō)明了Nor Flash上建立一個(gè)uClinux的Cramfs根文件系統(tǒng)的一般步驟。

一、引言

隨著電子產(chǎn)業(yè)的不斷發(fā)展,基于 ARM技術(shù)的系統(tǒng)設(shè)計(jì)和開(kāi)發(fā)平臺(tái)越來(lái)越多地在控制類(lèi)、消費(fèi)類(lèi)、通信類(lèi)等電子產(chǎn)品中廣泛應(yīng)用。從軟件角度上看,構(gòu)建基于ARM技術(shù)的uClinux系統(tǒng)要涉及到引導(dǎo)加載程序、Linux 內(nèi)核、文件系統(tǒng)、用戶(hù)應(yīng)用程序幾部分的設(shè)計(jì)。

文件系統(tǒng)是操作系統(tǒng)中用來(lái)管理用戶(hù)文件的內(nèi)核軟件層。文件可能存在于磁盤(pán)、網(wǎng)絡(luò)或者是一些虛擬的文件。文件系統(tǒng)包括根文件系統(tǒng)和建立于內(nèi)存設(shè)備之上文件系統(tǒng)。根文件系統(tǒng)是uClinux系統(tǒng)的核心部分,包含系統(tǒng)使用的軟件和庫(kù),以及所有用來(lái)為用戶(hù)提供支持架構(gòu)和用戶(hù)使用的應(yīng)用軟件,并作為存儲(chǔ)數(shù)據(jù)讀寫(xiě)結(jié)果的區(qū)域。由于嵌入式設(shè)備中Flash資源很緊張,如何有效地使用有限的存儲(chǔ)空間是嵌入式開(kāi)發(fā)者必須考慮的,合適的文件系統(tǒng)格式是解決這一問(wèn)題的關(guān)鍵所在。本文討論了只讀壓縮CramFS文件系統(tǒng)的特點(diǎn),并詳細(xì)的說(shuō)明了Nor Flash上建立一個(gè)uClinux的Cramfs根文件系統(tǒng)的一般步驟。

二、開(kāi)發(fā)環(huán)境簡(jiǎn)介

本系統(tǒng)采用的是宿主機(jī)+目標(biāo)板的開(kāi)發(fā)模式,宿主機(jī)為PC+Cygwin1.5.1 ,目標(biāo)板為采用203MHz的ARM920T內(nèi)核的處理器S3C2410x+uClinux, uClinux版本為2.4.18。在宿主機(jī)上將uClinux和應(yīng)用程序編譯后,下載到目標(biāo)板的Nor Flash中,啟動(dòng)運(yùn)行。使用的SDRAM是2片16MB的HY57v561620,工作在16bit雙字節(jié)模式下;使用的Flash是2片AMD AM29LV160DB,大小為2M字節(jié),工作在16bit雙字節(jié)模式下。在開(kāi)發(fā)的時(shí)候,將Boot Loader燒入AM29LV160DB的1-5扇區(qū);將Linux內(nèi)核映象文件zImage燒入6-17扇區(qū);將CramFS文件系統(tǒng)映象文件燒入18-35扇區(qū)。

基于ARM技術(shù)的uClinux系統(tǒng)設(shè)計(jì)和應(yīng)用分析

三、 Cramfs文件系統(tǒng)簡(jiǎn)介

CramFS(Compressed Rom File System)是Linux Torvalds在Transmeta任職時(shí),所參與開(kāi)發(fā)的文件系統(tǒng)。它是針對(duì)Linux內(nèi)核2.4之后的版本所設(shè)計(jì)的一種新型只讀文件系統(tǒng),采用了zlib 壓縮,壓縮比一般可以達(dá)到1:2,但仍可以作到高效的隨機(jī)讀取,Linux系統(tǒng)中,通常把不需要經(jīng)常修改的目錄壓縮存放,并在系統(tǒng)引導(dǎo)的時(shí)候再將壓縮文件解開(kāi)。因?yàn)镃ramfs不會(huì)影響系統(tǒng)的讀取文件的速度,而且是一個(gè)高度壓縮的文件系統(tǒng)。因此非常廣泛應(yīng)用于嵌入式系統(tǒng)中。

在嵌入式的環(huán)境之下,內(nèi)存和外存資源都需要節(jié)約使用。如果使用RAMDISK方式來(lái)使用文件系統(tǒng),那么在系統(tǒng)運(yùn)行之后,首先要把Flash上的映像文件解壓縮到內(nèi)存中,構(gòu)造起RAMDISK環(huán)境,才可以開(kāi)始運(yùn)行程序。但是它也有很致命的弱點(diǎn)。在正常情況下,同樣的代碼不僅在Flash中占據(jù)了空間(以壓縮后的形式存在),而且還在內(nèi)存中占用了更大的空間(以解壓縮之后的形式存在),這違背了嵌入式環(huán)境下盡量節(jié)省資源的要求。

使用CramFS文件系統(tǒng)就是一種解決這個(gè)問(wèn)題的方式。CramFS是一個(gè)壓縮格式的文件系統(tǒng),它并不需要一次性地將文件系統(tǒng)中的所有內(nèi)容都解壓縮到內(nèi)存之中,而只是在系統(tǒng)需要訪(fǎng)問(wèn)某個(gè)位置的數(shù)據(jù)的時(shí)候,馬上計(jì)算出該數(shù)據(jù)在CramFS中的位置,將它實(shí)時(shí)地解壓縮到內(nèi)存之中,然后通過(guò)對(duì)內(nèi)存的訪(fǎng)問(wèn)來(lái)獲取文件系統(tǒng)中需要讀取的數(shù)據(jù)。CramFS中的解壓縮以及解壓縮之后的內(nèi)存中數(shù)據(jù)存放位置都是由CramFS文件系統(tǒng)本身進(jìn)行維護(hù)的,用戶(hù)并不需要了解具體的實(shí)現(xiàn)過(guò)程,因此這種方式增強(qiáng)了透明度,對(duì)開(kāi)發(fā)人員來(lái)說(shuō),既方便,又節(jié)省了存儲(chǔ)空間。

一個(gè)完整的cramfs文件系統(tǒng)通常包含以下幾個(gè)目錄:

/linuxrc 啟動(dòng)腳本文件,由Boot Loader核心命令行確定init=/linuxrc,加載/etc目錄為ramfs,(cramfs為只讀文件系統(tǒng)),拷貝/mnt/etc到/etc,配置文件目錄重新加載根文件系統(tǒng)和/etc文件系統(tǒng),執(zhí)行init進(jìn)程。

/bin 引導(dǎo)啟動(dòng)所需的命令或用戶(hù)可能用的命令。

/sbin 系統(tǒng)管理員服務(wù)程序,其中最重要的是供內(nèi)核初始化之后執(zhí)行的/sbin/init進(jìn)程,系統(tǒng)啟動(dòng)時(shí)由init解釋并運(yùn)行/etc/inittab, inittab將指導(dǎo)int去調(diào)用一個(gè)系統(tǒng)初始化程序/etc/init.d/rcS。

/etc 特定機(jī)器的配置文件以及用戶(hù)數(shù)據(jù)存放目錄,其中的所有內(nèi)容是在內(nèi)核運(yùn)行后,由linuxrc 從/mnt/etc拷貝得到的。

/lib 文件系統(tǒng)上的程序所需的動(dòng)態(tài)庫(kù)。

/dev 驅(qū)動(dòng)程序存放目錄,可以在這里存放自己編寫(xiě)的驅(qū)動(dòng)程序。

/usr 用于存放用戶(hù)程序和配置文件的目錄,可以根據(jù)需要進(jìn)行設(shè)置。目錄下的/usr/etc/rc.local執(zhí)行本地所需要的初始化,如安裝核心模塊,進(jìn)行網(wǎng)絡(luò),運(yùn)行應(yīng)用程序,啟動(dòng)圖形界面等。/etc/modules.conf在系統(tǒng)運(yùn)行期間自動(dòng)加載模塊。

/mnt 用于設(shè)備安裝的目錄。/mnt/etc/init.d/rcS完成各個(gè)文件系統(tǒng)的Mount,執(zhí)行/usr/etc/rc.local;通過(guò)rcS可以調(diào)動(dòng)dhcp程序配置網(wǎng)絡(luò)。rcS執(zhí)行完以后,就會(huì)打開(kāi)Shell。

/proc 系統(tǒng)狀態(tài)文件目錄, 目錄中的文件可以用于訪(fǎng)問(wèn)有關(guān)內(nèi)核的狀態(tài)、計(jì)算機(jī)的屬性、正在運(yùn)行的進(jìn)程的狀態(tài)等信息。盡管 /proc 中的文件是虛擬的,但它們?nèi)钥梢允褂萌魏挝募庉嬈骰蛳瘛甿ore’, ‘less’或 ‘cat’這樣的程序來(lái)查看。

四、 Cramfs文件系統(tǒng)的移植過(guò)程

文件系統(tǒng)是緊跟uCLinux內(nèi)核放置,由內(nèi)核加載,主要存放用戶(hù)應(yīng)用程序和配置信息。CramFS文件系統(tǒng)的基本組成:初始化程序、Shell程序以及其他Linux常用工具、配置文件、鏈接庫(kù)、圖形界面程序和用戶(hù)應(yīng)用程序等。本節(jié)將介紹移植CramFS文件系統(tǒng)的具體操作方法。

4.1、在內(nèi)核中加入對(duì)CramFS文件系統(tǒng)支持

想要在系統(tǒng)中提供CramFS的能力,我們必須要在編輯uCliunx內(nèi)核時(shí)把支持CramFS的選項(xiàng)加入。盡管uCLinux可以以模塊的形式加載各種類(lèi)型的設(shè)備驅(qū)動(dòng)上,但我們選擇直接把設(shè)備驅(qū)動(dòng)及CramFS文件系統(tǒng)靜態(tài)地編譯進(jìn)內(nèi)核中。

在Memory Technology Devices (MTD)選項(xiàng)中進(jìn)行配置:

Memory Technology device (MTD) support[Y/m/n/?] Y 內(nèi)存技術(shù)設(shè)備支持

MTD partitioning support [Y/m/n/?] Y 支持MTD分區(qū)

Direct char device access to MTD devices[Y/m/n/?] Y MTD字符設(shè)備直接訪(fǎng)問(wèn)

Caching block device access to MTD devices[Y/m/n/?] Y MTD塊設(shè)備緩沖訪(fǎng)問(wèn)

在File systems選項(xiàng)中進(jìn)行配置:

Compressed ROM file system support [Y/m/n/?] Y ROM文件系統(tǒng)的支持

完成上述修改并編譯后,完成uCliunx內(nèi)核對(duì)CramFS文件系統(tǒng)的支持。

4.2、拷貝需要加入的其他文件和鏈接庫(kù)

(1)、Busybox 是 Debian GNU/Linux 的大名鼎鼎的 Bruce Perens 首先開(kāi)發(fā)的。Busybox 編譯出一個(gè)單個(gè)的獨(dú)立執(zhí)行程序,就叫做 busybox。但是它可以根據(jù)配置,執(zhí)行 ash shell的功能,以及幾十個(gè)各種小應(yīng)用程序的功能。這其中包括有一個(gè)迷你的vi編輯器,系統(tǒng)不可或缺的/sbin/init程序,以及其他諸如 ifconfig, halt, reboot, mkdir, mount, ln, ls, echo, cat等等。而所有這一切功能卻只有區(qū)區(qū)1M左右的大小,Busybox已經(jīng)成為構(gòu)建嵌入式Linux文件系統(tǒng)的必備軟件。

首先我們從官方網(wǎng)站(http://www.busybox.org/)上下載BusyBox 的版本1.0.0。

#tar xvfz busybox-1.00.tar.gz

#cd busybox-1.00

#make menuconfig

下面是需要編譯進(jìn)busybox的功能選項(xiàng),其他的可以根據(jù)需要自選。

Build Options

Build BusyBox as a static binary (no shared libs)

這個(gè)選項(xiàng)是一定要選擇的,這樣才能把busybox編譯成靜態(tài)鏈接的可執(zhí)行文件,運(yùn)行時(shí)才獨(dú)立于其他函數(shù)庫(kù),否則必需要其他庫(kù)文件才能運(yùn)行,在單個(gè)linux內(nèi)核不能使他正常工作。

Do you want to build BusyBox with a Cross Compiler

選擇你自己定義的交叉編譯環(huán)境。

installation Options

don’t use /usr

這個(gè)選項(xiàng)也一定要選,否則make install 后busybox將安裝在原系統(tǒng)的/usr下,這將覆蓋系統(tǒng)原有的命令。選擇這個(gè)選項(xiàng)后,make install后會(huì)在busybox目錄下生成一個(gè)叫_install的目錄,里面有busybox和指向他的鏈接。

其他選項(xiàng)都是一些linux基本命令選項(xiàng),自己需要哪些命令就編譯進(jìn)去,一般用默認(rèn)的就可以了,配置好后退出并保存。編譯BusyBox,如果能成功編譯BusyBox,就將編譯好的busybox 復(fù)制到CramFS文件系統(tǒng)的/bin 目錄下,然后創(chuàng)建常用命令的建立快捷方式。建立快捷方式很簡(jiǎn)單,只要建一個(gè)符號(hào)鏈接,比方ln -s /bin/busybox /bin/ls,那么,執(zhí)行/bin/ls的時(shí)候,busybox 就會(huì)執(zhí)行l(wèi)s的功能,也會(huì)按照l(shuí)s的方式處理命令行參數(shù)

(2)、拷貝一些管理員控制程序到/sbin目錄下,最重要的就是要包含一個(gè)init命令,可以使用busybox提供的系統(tǒng)工具。比如 ln -s /bin/busybox /sbin/init,這樣我們就有了系統(tǒng)運(yùn)行不可或缺的 /sbin/init 程序了。

(3)、拷貝應(yīng)用程序運(yùn)行時(shí)所需要的庫(kù)到/lib,庫(kù)文件可以從PC機(jī)上的交叉編譯工具安裝目錄下拷貝,如libc-2.2.2.so、libcryt-2.2.2.so、libm-2.2.2.so、libutil-2.2.2.so等,為部分相應(yīng)庫(kù)建立快捷方式,提供一些應(yīng)用程序按快捷方式名稱(chēng)調(diào)用。值得注意的是C庫(kù)要采用C庫(kù)的版本glibc, glibc位于/lib/libc.so.6。

4.3 、利用mkcramfs工具生成cramfs壓縮文件系統(tǒng)

一般情況下都要把已經(jīng)規(guī)劃好的目錄結(jié)構(gòu)轉(zhuǎn)換成一個(gè)映象文件,創(chuàng)建Cramfs文件系統(tǒng)需要mkcramfs工具,mkcramfs能把相應(yīng)的Cramfs目錄樹(shù)壓縮成為單一的映象文件,這個(gè)映象文件就是我們需要移植的文件系統(tǒng)。Mkcramfs的命令格式為:

Mkcramfs [-h] [--e edition] [-I file] [-n name] DirName OutFile

#mkcramfs root cramfs.Img

用以上的命令就可以生成我們需要的cramfs文件系統(tǒng)映象文件,我們可以發(fā)現(xiàn)原本為2.36Mbytes大小的目錄內(nèi)容,被壓縮成一個(gè)1.08Mbytes的CramFS文件系統(tǒng)映象文件, 通過(guò)vivi或測(cè)試程序?qū)⑵鋵?xiě)入Flash中就可以驗(yàn)證是否移植成功。

五、小結(jié)

CramFS是一個(gè)壓縮格式的文件系統(tǒng),如果系統(tǒng)存儲(chǔ)資源比較緊張的話(huà),采用CramFS作為嵌入式Linux系統(tǒng)的根文件系統(tǒng)是一個(gè)不錯(cuò)的選擇。

責(zé)任編輯:gt

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    9097

    瀏覽量

    367581
  • 嵌入式
    +關(guān)注

    關(guān)注

    5082

    文章

    19126

    瀏覽量

    305242
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11304

    瀏覽量

    209521
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于μClinux ARM的嵌入式系統(tǒng)的設(shè)計(jì)

    核心的嵌入式硬件平臺(tái)的過(guò)程,分析了設(shè)計(jì)過(guò)程中的技術(shù)重點(diǎn)和難點(diǎn),并給出了一套可行的解決方案,為應(yīng)用程序員提供了一個(gè)面向操作系統(tǒng)級(jí)的嵌入式系統(tǒng)平臺(tái)。關(guān)鍵詞:移植,
    發(fā)表于 03-28 13:12

    基于ARM7TDMI的uClinux移植

    基于ARM7TDMI的uClinux移植 好資料,與你供享。只供學(xué)習(xí)!
    發(fā)表于 03-25 14:59 ?95次下載

    基于ARM的嵌入式uClinux系統(tǒng)設(shè)計(jì)與Web服務(wù)器應(yīng)用的

    基于ARM的嵌入式uClinux系統(tǒng)設(shè)計(jì)與Web服務(wù)器應(yīng)用的實(shí)現(xiàn)
    發(fā)表于 03-25 15:00 ?47次下載

    基于μClinux/ARM的嵌入式系統(tǒng)的設(shè)計(jì)

    在介紹了ARM處理器和UClinux特點(diǎn)的基礎(chǔ)上,詳細(xì)討論了將UClinux操作系統(tǒng)和BLOB系統(tǒng)引導(dǎo)程序移植到以
    發(fā)表于 03-28 09:49 ?19次下載

    uClinux下動(dòng)態(tài)Web技術(shù)的實(shí)現(xiàn)方法

    分析uClinux 操作系統(tǒng)的特點(diǎn), 實(shí)現(xiàn)uClinux 下的Boa Web Server; 討論如何通過(guò)編寫(xiě)CGI 程序來(lái)最終實(shí)現(xiàn)uClinux
    發(fā)表于 04-15 11:10 ?17次下載

    基于ARMuClinux移植與開(kāi)發(fā)

    本文將uClinux 移植到基于ARM7TDMI 芯片S3C4510B 的實(shí)驗(yàn)系統(tǒng)上,實(shí)現(xiàn)了PC和uClinux 下位機(jī)的通訊,內(nèi)容包括移植環(huán)境的準(zhǔn)備,源代碼的編譯以及遇到問(wèn)題的解決。
    發(fā)表于 08-13 10:14 ?26次下載

    基于ARM uCLinux的網(wǎng)絡(luò)控制系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    基于ARM uCLinux的網(wǎng)絡(luò)控制系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) 引言 隨著網(wǎng)絡(luò)和通信技術(shù)的發(fā)展,嵌入式系統(tǒng)現(xiàn)已進(jìn)入高速發(fā)展階段。并在社會(huì)各個(gè)領(lǐng)域得到
    發(fā)表于 10-13 14:47 ?610次閱讀
    基于<b class='flag-5'>ARM</b> <b class='flag-5'>uCLinux</b>的網(wǎng)絡(luò)控制<b class='flag-5'>系統(tǒng)</b>設(shè)計(jì)與實(shí)現(xiàn)

    ARM開(kāi)發(fā)板上uClinux內(nèi)核移植

    ARM開(kāi)發(fā)板上uClinux內(nèi)核移植 簡(jiǎn)述:針對(duì)“如何在以S3C44B0X為核心的ARMSYS開(kāi)發(fā)板上建立uClinux內(nèi)核移植”的一個(gè)總結(jié),其內(nèi)容包括對(duì)Bootloader的功能分析
    發(fā)表于 02-02 11:07 ?732次閱讀

    ARM設(shè)計(jì)的uClinux及其應(yīng)用

    摘要:本文討論了基于ARM的嵌入式操作系統(tǒng)uClinux及其應(yīng)用開(kāi)發(fā)設(shè)計(jì)及實(shí)現(xiàn)。在32位ARM核的微處理器S3C4510B的硬件平臺(tái)上
    發(fā)表于 07-21 15:14 ?907次閱讀
    <b class='flag-5'>ARM</b>設(shè)計(jì)的<b class='flag-5'>uClinux</b>及其應(yīng)用

    Cygwin for ARM support uClinux快速入門(mén)

    本文提供了Cygwin for ARM support uClinux快速入門(mén)的資料,希望對(duì)你的學(xué)習(xí)有所幫助
    發(fā)表于 05-27 15:18 ?92次下載
    Cygwin for <b class='flag-5'>ARM</b> support <b class='flag-5'>uClinux</b>快速入門(mén)

    嵌入式uCLinux內(nèi)核啟動(dòng)過(guò)程分析

    分析uCLinux的啟動(dòng)過(guò)程,可以加快系統(tǒng)啟動(dòng)速度、正確建立應(yīng)用環(huán)境。本文要研究的就是uCLinux操作系統(tǒng)內(nèi)核的啟動(dòng)過(guò)程。
    發(fā)表于 08-15 16:51 ?789次閱讀

    基于ARM7與uClinux嵌入式智能終端系統(tǒng)_艾紅

    基于ARM7與uClinux嵌入式智能終端系統(tǒng)_艾紅
    發(fā)表于 01-12 22:30 ?0次下載

    使用ARM實(shí)現(xiàn)uClinux移植的方案詳細(xì)說(shuō)明

    本文針對(duì)基于ARMuClinux 0S的特點(diǎn),詳細(xì)介紹了BootLoader,0S啟動(dòng)以及串口設(shè)置幾個(gè)關(guān)鍵步驟進(jìn)行了分析與設(shè)計(jì)。
    發(fā)表于 11-01 16:15 ?5次下載
    使用<b class='flag-5'>ARM</b>實(shí)現(xiàn)<b class='flag-5'>uClinux</b>移植的方案詳細(xì)說(shuō)明

    基于ARM技術(shù)uClinux系統(tǒng)設(shè)計(jì)與應(yīng)用分析

    、引言 隨著電子產(chǎn)業(yè)的不斷發(fā)展,基于 ARM 技術(shù)系統(tǒng)設(shè)計(jì)和開(kāi)發(fā)平臺(tái)越來(lái)越多地在控制類(lèi)、消費(fèi)類(lèi)、通信類(lèi)等電子產(chǎn)品中廣泛應(yīng)用。從軟件角
    的頭像 發(fā)表于 10-30 09:57 ?486次閱讀

    基于armuclinux多串口通訊的設(shè)計(jì)與實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《基于armuclinux多串口通訊的設(shè)計(jì)與實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 10-12 10:19 ?0次下載
    基于<b class='flag-5'>arm</b>和<b class='flag-5'>uclinux</b>多串口通訊的設(shè)計(jì)與實(shí)現(xiàn)