小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

構(gòu)建嵌入式linux平臺(tái)下的用戶(hù)應(yīng)用

 ekylin 2006-11-25

 

1.引言

在專(zhuān)用的嵌入式板子運(yùn)行 GNU/Linux 系統(tǒng)已經(jīng)變得越來(lái)越流行。一個(gè)嵌入式 Linux 系統(tǒng)從軟件的角度看通常可以分為四個(gè)層次,如圖1-1所示:

(1)引導(dǎo)程序。包括固化在固件(firmware)中的 boot 代碼(可選),和 Boot Loader 兩大部分。

(2)Linux 內(nèi)核。針對(duì)于嵌入式板子的定制內(nèi)核以及內(nèi)核的啟動(dòng)參數(shù)。

(3)文件系統(tǒng)。包括根文件系統(tǒng)和建立于 Flash 內(nèi)存設(shè)備之上文件系統(tǒng)。通常用 ram disk 來(lái)作為根文件系統(tǒng)

(4)用戶(hù)應(yīng)用程序。特定于用戶(hù)的應(yīng)用程序。有時(shí)在用戶(hù)應(yīng)用程序和內(nèi)核層之間可能還會(huì)包括一個(gè)嵌入式圖形用戶(hù)界面。常用的嵌入式 GUI 有:MicroWindows 和 MiniGUI 。

下面就在linux-2.4.x內(nèi)核上如何正確組織、連接這幾個(gè)部分來(lái)自動(dòng)運(yùn)行用戶(hù)應(yīng)用程序進(jìn)行分析。

2.linux的啟動(dòng)過(guò)程

在系統(tǒng)復(fù)位后首先遠(yuǎn)行的程序就是引導(dǎo)程序(Boot loader)。 引導(dǎo)程序可以放在專(zhuān)用的ROM中,也可以和內(nèi)核影像、文件系統(tǒng)影像共用閃存芯片或固態(tài)硬盤(pán)如下圖所示。引導(dǎo)程序首先負(fù)責(zé)初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。Uboot是Sourceforge上的一個(gè)開(kāi)源的引導(dǎo)程序,提供了對(duì)PowerPC(MPC5xx、MPC8xx、MPC82x、MPC7xx、MP74xx、4xx)、ARM(ARM7、ARM9、StrongArm、Xsacle)、MIPS、x86等處理器的支持。下載站點(diǎn)是http:///projects/u-boot

U-boot在ARM9系統(tǒng)啟動(dòng)流程:

1、跳轉(zhuǎn)到reset代碼(將CPU設(shè)置成SVC,ARM工作模式,SDRAM初始化)

2、將U-boot代碼拷貝到RAM空間??梢哉{(diào)用C函數(shù)

3、調(diào)用初始化函數(shù)

(CPU_init(),board_init(),interrupt_init(),serial_init())

4、初始化flash設(shè)備

5、初始化系統(tǒng)內(nèi)存分配函數(shù)

6、初始化NAND設(shè)備

7、初始化顯示設(shè)備

8、初始化網(wǎng)絡(luò)設(shè)備

9、進(jìn)入命令循環(huán),接收用戶(hù)從串口傳來(lái)的命令,如果延時(shí)10秒鐘無(wú)用戶(hù)操作則自動(dòng)加載linux內(nèi)核。首先將linux內(nèi)核影像(kernel Image)拷貝到ram空間,然后跳轉(zhuǎn)到linux內(nèi)核代碼的第一條指令處,將控制權(quán)交給linux內(nèi)核。

3. 掛接自己的嵌入式文件系統(tǒng)

3.1. 嵌入式文件系統(tǒng)的層次結(jié)構(gòu)

嵌入式文件系統(tǒng)的任務(wù)是對(duì)文件進(jìn)行管理,其工作包括提供對(duì)邏輯文件的操作(包括檢索、新增、修改、刪除、拷貝)接口,方便用戶(hù)操作文件和目錄。文件系統(tǒng)內(nèi)部,則根據(jù)存儲(chǔ)設(shè)備的特點(diǎn),使用不同的文件組織模式來(lái)實(shí)現(xiàn)文件的邏輯結(jié)構(gòu),比如磁帶中使用的順序文件以及大多數(shù)操作系統(tǒng)使用的樹(shù)狀文件。此外文件系統(tǒng)也管理文件的安全性、完整性以及多進(jìn)程訪(fǎng)問(wèn)控制。文件系統(tǒng)不能實(shí)現(xiàn)對(duì)物理設(shè)備的直接控制,對(duì)物理設(shè)備的訪(fǎng)問(wèn)是通過(guò)MTD/FTL層實(shí)現(xiàn)的。MTD/FNL層向上將閃存設(shè)備抽象成邏輯設(shè)備(邏輯頁(yè)面和塊),為文件系統(tǒng)提供對(duì)物理設(shè)備操作接口;向下實(shí)現(xiàn)對(duì)閃存設(shè)備的讀寫(xiě)、清零、ECC校驗(yàn)等工作。在linux系統(tǒng)中實(shí)現(xiàn)了對(duì)閃存操作的底層函數(shù)。下圖給出了文件系統(tǒng)的層次關(guān)系。

3.2. 幾種針對(duì)閃存的嵌入式文件系統(tǒng)的比較


3.3. 掛接JFFS2文件系統(tǒng)

(1) 修改設(shè)備號(hào)

由于ROM設(shè)備和MTDBlock設(shè)備的主設(shè)備號(hào)(major)都是31,所以如果你不想把JFFS2作為根文件系統(tǒng)的話(huà),必須修改他們之一的major。如果你要修改JFFS2的設(shè)備major,在/linux-2.4.x/include/linux/mtd/mtd.h中把

#define MTD_BLOCK_MAJOR 31

改成

#define MTD_BLOCK_MAJOR 30

(2) 編寫(xiě)Maps文件

添加在flash上的map文件。在/kernel/drivers/mtd/maps下添加flash(如intel NOR型28f128j3a)的map。

(3) 將配置加入/kernel/drivers/mtd/maps/Config.in中

dep_tristate ‘ CFI Flash device mapped on S3C2410‘ CONFIG_MTD_S3C2410 $CONFIG_MTD_CFI

(4) 配置內(nèi)核使其支持jffs2。

這里要特別注意Memory Technology Devices (MTD)的選項(xiàng)支持及其子項(xiàng)

RAM/ROM/Flash chip drivers --->

Mapping drivers for chip access --->

的選項(xiàng)支持;

還有File systems下選項(xiàng)支持。

具體的配置選擇請(qǐng)參考附錄1

(5) 制作jffs2映象

首先取得jffs2的制作工具:mkfs.jffs2(可從網(wǎng)上取得)

執(zhí)行如下命令即可生成所要的映象:

chmod 777 mkfs.jffs2 //取得mkfs.jffs2的執(zhí)行權(quán)限,即mkfs.jffs2成為可執(zhí)行文件

./mkfs.jffs2 -d jffs2/ -o jffs2.img //生成jffs2文件映象,其中目錄jffs2可以是任意的目錄,這里的jffs2是我新建的一個(gè)目錄

(6) Jffs2的下載

燒寫(xiě)完引導(dǎo)程序(boot loader)、內(nèi)核影像(zImage)、根文件系統(tǒng)(ramdisk.image.gz)之后,接著燒寫(xiě)jffs2.img,具體燒寫(xiě)如下:

tftp 30800000 jffs2.img

fl 1800000 30800000 20000 (其中20000可根據(jù)jffs2的大小適當(dāng)調(diào)整,理論上只要比jffs2.img略大即可,但要為20000的整數(shù)倍。1800000是Jffs2在閃存中的起始位置,3800000是將jffs2.img下載到內(nèi)存中的位置)

(7) 在根文件系統(tǒng)上自動(dòng)掛接Jffs2

在ramdisk.image.gz的mnt/etc/init.d/rc$文件中加入如下指令以便啟動(dòng)時(shí)自動(dòng)掛載jffs2文件系統(tǒng)。

Mount -t jffs2 /dev/mtdblock/4 /mnt (其中的/dev/mtdblock/4是flash上的jffs2分區(qū))

4.啟動(dòng)用戶(hù)應(yīng)用程序

在嵌入式應(yīng)用系統(tǒng)中,往往不需要進(jìn)入linux的界面(命令行窗口或圖形桌面),而是需要直接啟動(dòng)專(zhuān)用的用戶(hù)程序。下面介紹一種實(shí)現(xiàn)方法。

在制作根文件系統(tǒng)影像(ramdisk.image.gz)前在根目錄下創(chuàng)建myproc目錄,將MyApp應(yīng)用程序復(fù)制到此目錄下。在ramdisk.image.gz的mnt/etc/init.d/rc$文件中加入如下指令以便自動(dòng)啟動(dòng)用戶(hù)應(yīng)用程序MyApp。

#cd /myproc( 進(jìn)入myproc目錄)

#./MyApp

MyApp是一個(gè)小的應(yīng)用程序,它的處理流程如下(其中Mystart假定為用戶(hù)最終的應(yīng)用程序) :


5. 總結(jié)

Linux 正在嵌入式開(kāi)發(fā)領(lǐng)域穩(wěn)步發(fā)展。因?yàn)?Linux 基于 GPL,所以任何對(duì)將 Linux 定制于 PDA、掌上機(jī)或者工控設(shè)備感興趣的人都可以從因特網(wǎng)免費(fèi)下載其內(nèi)核和應(yīng)用程序,并開(kāi)始移植或開(kāi)發(fā)。目前許多 優(yōu)秀的Linux 系統(tǒng)可供用戶(hù)選擇。它們包括 RTLinux(實(shí)時(shí) Linux)、uClinux(用于非 MMU 設(shè)備的 Linux)、Montavista Linux(用于 ARM、MIPS、PPC 的商用 Linux 分發(fā)版)、ARM-Linux(ARM 上的 Linux)等。利用現(xiàn)有的大量的共享資源,構(gòu)建自己的嵌入式linux平臺(tái),開(kāi)發(fā)linux應(yīng)用已經(jīng)列入許許多多公司的發(fā)展戰(zhàn)略之中。

6.參考資料

[1] 王學(xué)龍.嵌入式Linux系統(tǒng)設(shè)計(jì)與應(yīng)用. 清華大學(xué)出版社,2001年8月

[2] 馬忠梅等.ARM&Linux嵌入式系統(tǒng)教程.北京航空航天大學(xué)出版社,2004年9月

[3] 陳莉君.深入分析Linux內(nèi)核源代碼.人民郵電出版社,2002年8月

張井剛

廣州愛(ài)斯佩克環(huán)境儀器有限公司

附錄:配置Linux內(nèi)核支持Jffs2

Linux Kernel v2.4.18-rmk7-pxa1 Configuration

Linux Kernel v2.4.18-rmk7-pxa1 Configuration

------------------------------------------------------------------------------

+-------------------- Memory Technology Devices (MTD) --------------------+

| Arrow keys navigate the menu. selects submenus --->. |

| Highlighted letters are hotkeys. Pressing includes, excludes, |

| modularizes features. Press to exit, for Help. |

| Legend: [*] built-in [ ] excluded module < > module capable |

| +---------------------------------------------------------------------+ |

| | <*> Memory Technology Device (MTD) support | |

| | [*] Debugging | |

| | (3) Debugging verbosity (0 = quiet, 3 = noisy) | |

| | <*> MTD partitioning support | |

| | <*> MTD concatenating support | |

| | < > RedBoot partition table parsing | |

| | < > Command line partition table parsing | |

| | < > ARM Firmware Suite partition parsing | |

| | --- User Modules And Translation Layers | |

| | <*> Direct char device access to MTD devices | |

| | <*> Caching block device access to MTD devices | |

| < > FTL (Flash Translation Layer) support | |

| | < > NFTL (NAND Flash Translation Layer) support | |

| | RAM/ROM/Flash chip drivers ---> | |

| | Mapping drivers for chip access ---> | |

| | Self-contained MTD device drivers ---> | |

| | NAND Flash Device Drivers ---> | |

| +---------------------------------------------------------------------+ |

+------------------------

| +---------v(+)--------------------------------------------------------+ |

+-------------------------------------------------------------------------+

| < Exit > < Help > |

+-------------------------------------------------------------------------+

Linux Kernel v2.4.18-rmk7-pxa1 Configuration

------------------------------------------------------------------------------

+-------------------- Mapping drivers for chip access --------------------+

| Arrow keys navigate the menu. selects submenus --->. |

| Highlighted letters are hotkeys. Pressing includes, excludes, |

| modularizes features. Press to exit, for Help. |

| Legend: [*] built-in [ ] excluded module < > module capable |

| +---------------------------------------------------------------------+ |

| | <*> CFI Flash device in physical memory map | |

| | (800000) Physical start address of flash mapping | |

| | (800000) Physical length of flash mapping | |

| | (2) Bus width in octets | |

| | <*> CFI Flash device mapped on S3C2410 | |

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多