|
南京培訓(xùn)嵌入式機(jī)構(gòu)排行_基于ARM的嵌入式設(shè)備中uCLinux系統(tǒng)開發(fā),
1 引言 信息家電和手持設(shè)備大大加速了嵌入式系統(tǒng)的發(fā)展,而ARM體系32位高性能、低功耗處理器和嵌入式操作系統(tǒng)Linux無疑成為佼佼者。因為Linux源代碼開放、免費(fèi),任何將其定制于PDA、掌上機(jī)或者便攜式設(shè)備感興趣的人都可以從因特網(wǎng)免費(fèi)下載其內(nèi)核和應(yīng)用程序,并開始移植或開發(fā),所以Linux在嵌入式開發(fā)領(lǐng)域得到穩(wěn)步發(fā)展。uCLinux 即是目前嵌入式linux 中最流行的一種,它是針對微控制領(lǐng)域而設(shè)計的Linux系統(tǒng),其最大特征就是沒有MMU(內(nèi)存管理單元模塊),適合嵌入式系統(tǒng)小型化應(yīng)用。 uCLinux支持多任務(wù),支持多種文件系統(tǒng),提供了對網(wǎng)絡(luò)的強(qiáng)大支持,具有完整的TCP/IP協(xié)議棧,以及標(biāo)準(zhǔn)豐富的API。由于它的很多核心代碼都為沒有被MMU的處理器重新編寫過,對標(biāo)準(zhǔn)Linux龐大的應(yīng)用程序庫和驅(qū)動程序庫作了刪改,所以它的內(nèi)核要比常規(guī)的Linux 內(nèi)核小很多;uCLinux包含Linux常用的API和小于512k的內(nèi)核及相關(guān)的工具,總代碼只有900k左右,但同時保留了常規(guī)Linux 操作系統(tǒng)絕大多數(shù)的優(yōu)點。 2 基于ARM的硬件平臺 嵌入式領(lǐng)域32位處理器以ARM公司的ARM核最為流行,本文以Samsung公司的ARM7TDMI芯片S3C4510為處理器開發(fā)板為硬件平臺,開發(fā)板上與S3C4510相關(guān)的部分主要集成了如下器件: (2M+512k)B 的Flash,其中AT29C010A為512B作為BootLoader,一片SST49VF160為1M%26;#215;16bitFlash; 16MB 的DRAM,由兩片4M%26;#215;16bits的HY57V641620提供 ; 16MB 的SRAM,由M-systems的新一代閃存盤DOC2000構(gòu)成; Ethernet接口; ARM JTAG 接口。 開發(fā)板上與S3C4510相關(guān)部分功能框圖如圖1 所示。嵌入式arm物理, 學(xué)嵌入式要去培訓(xùn)嗎, 非嵌入式腦機(jī), 嵌入式工作崗位職責(zé), 嵌入式在手機(jī)的應(yīng)用, 本科能學(xué)好嵌入式, 嵌入式咋樣顯示, 嵌入式單片機(jī)的特點, 嵌入式和信號與系統(tǒng), 嵌入式adc怎么用, 嵌入式保密系統(tǒng), 嵌入式工業(yè)電腦主板, 嵌入式監(jiān)督工作, 嵌入式視頻壓縮, 數(shù)據(jù)庫嵌入式簡包, 嵌入式開發(fā)系統(tǒng)移植, 嵌入式可視對講內(nèi)機(jī), 尊寶嵌入式音響, 嵌入式分纖箱, 嵌入式qt程序部署, 嵌入式gpu設(shè)計, 嵌入式鍵盤觸摸板,
IO UART S3C4510 JTAG Ethernet FLASH F DOC2000 232串口 JTAG接口 LED 以太網(wǎng)接口 用戶自定義邏輯 DRAM 3 uCLinux內(nèi)核移植 嵌入式 Linux 開發(fā)大致涉及三個層次:引導(dǎo)裝載程序、Linux 內(nèi)核和驅(qū)動及應(yīng)用程序。我們將討論涉及這三層的一些基本概念;深入了解引導(dǎo)裝載程序、內(nèi)核和文件系統(tǒng)是如何交互的。 引導(dǎo)程序BootLoader的主要作用包括初始化處理器;初始化必備的設(shè)備;下載系統(tǒng)映象;初始化操作系統(tǒng)系統(tǒng)并準(zhǔn)備執(zhí)行。 引導(dǎo)裝載程序有兩種方法:專用軟件和微小的引導(dǎo)代碼。專用軟件可以直接與遠(yuǎn)程系統(tǒng)上的閃存設(shè)備進(jìn)行交互并將引導(dǎo)裝載程序安裝在閃存的給定位置中。而某些種類的嵌入式設(shè)備具有微小的引導(dǎo)代碼:根據(jù)幾個字節(jié)的指令,它將初始化一些 DRAM 設(shè)置并啟用目標(biāo)上的一個串行(或者 USB,或者以太網(wǎng))端口與主機(jī)程序通信;然后,主機(jī)程序或裝入程序可以使用這個連接將引導(dǎo)裝載程序傳送到目標(biāo)上,并將它寫入閃存。 嵌入式設(shè)備上一些流行的并可免費(fèi)使用的 Linux 引導(dǎo)裝載程序有 Blob、Redboot 和 Bootldr。所有這些引導(dǎo)裝載程序都用于基于 ARM 設(shè)備上的 Linux,并需要Jflash-linux 工具用于安裝。一旦將引導(dǎo)裝載程序安裝到目標(biāo)的閃存中,它就會執(zhí)行我們上面提到的所有初始化工作。然后,它準(zhǔn)備接收來自主機(jī)的內(nèi)核和文件系統(tǒng)。一旦裝入了內(nèi)核,引導(dǎo)裝載程序就將控制轉(zhuǎn)給內(nèi)核。 Linux內(nèi)核移植首先需要配置內(nèi)核,可以用make menuconfig進(jìn)行,根據(jù)板卡選擇必要的選項。主要包括系統(tǒng)類型選定(ARM system type),配置SDRAM/Flash地址;對塊設(shè)備、字符設(shè)備進(jìn)行選擇和配置;配置文件系統(tǒng);是否配置圖形用戶界面(GUI)。修改內(nèi)核,我們選用 www.lomx.net上的uClinux-2.4.26-uc0.diff,已經(jīng)為S3C4510移植好的內(nèi)核,需要修改的地方很少。編譯內(nèi)核,首先要在宿主機(jī)(安裝有Linux)上建立交*編譯環(huán)境,下載arm-elf-tools安裝在Linux 宿主機(jī)上的/usr/local/bin 目錄下,F(xiàn)在的BLOB 和將來的uClinux 都要在這個環(huán)境下編譯。 開始編譯uClinux 編譯內(nèi)核:執(zhí)行命令: make menuconfig 在出現(xiàn)的對話框選Samsung/4510B 和 uC-libc,然后退出。如果選擇uC-libc編譯出錯,可以改選uClibc! make dep make lib_only make user_only make romfs make image 產(chǎn)生 romfs.o,這一步將會出現(xiàn)一些錯誤報告,可忽略繼續(xù)下面的命令 make 如果make無錯誤,在images的目錄下你會看到有 image.ram 和 image.rom 兩個二進(jìn)制的內(nèi)核文件。即image.ram和image.rom。 image.ram可以通過Bootloader下載到SDRAM中運(yùn)行。image.rom可以寫入到Flash SST39VF160中直接運(yùn)行。 down image.ram看看能不能運(yùn)行 最后一步,uClinux調(diào)試完畢,通過jflashp將其寫入到Flash中:開發(fā)板斷電,把JTAG仿真器接到計算機(jī)的并口和板子的14Pin JTAG插座上;接通5V電源;執(zhí)行 FlashP w -f image.rom,大約30分鐘以后燒寫完畢。撤掉JTAG仿真器以后再上電就應(yīng)該運(yùn)行uClinux了。如果想把BootLoader寫回Flash,執(zhí)行FlashP w -f bios.img即可。 4 uCLinux驅(qū)動程序開發(fā) 嵌入式系統(tǒng)通常有許多設(shè)備用于與用戶交互,象觸摸屏、小鍵盤、滾動輪、傳感器、RS232 接口、LCD 等等。除了這些設(shè)備外,還有許多其它專用設(shè)備,包括閃存、USB、GSM、GPS 等。內(nèi)核通過所有這些設(shè)備各自的設(shè)備驅(qū)動程序來控制它們,包括 GUI 用戶應(yīng)用程序也通過訪問這些驅(qū)動程序來訪問設(shè)備。uClinux 的驅(qū)動程序庫不可能包括實際項目系統(tǒng)中所有外圍硬件的驅(qū)動,所以在應(yīng)用開發(fā)中,編寫驅(qū)動程序是一個重要步驟,驅(qū)動程序設(shè)計的好壞直接影響系統(tǒng)運(yùn)行的穩(wěn)定性和運(yùn)行效率。 在uClinux 內(nèi)核編寫驅(qū)動程序并不像其他操作系統(tǒng)那么復(fù)雜,實際上,所要做的只是為相應(yīng)的設(shè)備編寫幾個基本函數(shù)并向VFS(virtual file system) 注冊即可。當(dāng)上層應(yīng)用要使用該設(shè)備時,VFS 就會調(diào)用相應(yīng)的設(shè)備函數(shù)。設(shè)備驅(qū)動程序通?蓺w為以下3 類: a) 塊設(shè)備(block) ,以塊為單位,允許隨機(jī)訪問,多用緩存技術(shù); b) 字符設(shè)備(char) ,以字節(jié)為單位,只能按順序訪問,不用緩存; c) 網(wǎng)絡(luò)接口(net) 。 在本系統(tǒng)中,DOC作為塊設(shè)備可被模擬為IDE設(shè)備進(jìn)行識別,系統(tǒng)用主設(shè)備號(MAJOR)和次設(shè)備號(MINOR)來唯一標(biāo)識一般設(shè)備;相同主設(shè)備號表示同一類設(shè)備,次設(shè)備號表示同類設(shè)備的個數(shù)。所有設(shè)備在適當(dāng)?shù)哪夸洠ㄍǔJ?dev目錄)下必須有相應(yīng)的文件,這樣字符設(shè)備和塊設(shè)備都可以通過文件操作的系統(tǒng)調(diào)用完成。不同的是,塊設(shè)備操作經(jīng)常和緩沖區(qū)聯(lián)系在一起。 字符設(shè)備的驅(qū)動程序通過在device_struct數(shù)據(jù)結(jié)構(gòu)的chrdevs向量中增加一項的方法來向內(nèi)核注冊自己。然后對這個設(shè)備的所有調(diào)用都用這個設(shè)備號來實現(xiàn); 塊設(shè)備和字符設(shè)備都需要定義功能函數(shù):對于每一個驅(qū)動函數(shù)來說,都有一些和此設(shè)備密切相關(guān)的功能函數(shù),就最常用的字符設(shè)備來說,都存在著諸如 open()、read()、write()、ioctrol( ) 這一類的操作。當(dāng)系統(tǒng)調(diào)用這些操作時,將自動的使用file-operations 結(jié)構(gòu)中對應(yīng)的函數(shù)來實現(xiàn)具體的操作;塊設(shè)備由于使用高速緩存,其驅(qū)動程序不需要保護(hù)自己的read()、write()和fsync()函數(shù),但必須使用自己的open()、release()和ioctl()函數(shù),函數(shù)原型為: static int my_open(struct inode *inode,struct file *file); static int my_release(struct inode *inode,struct file *file); static int my_ioctl(struct inode *inode,struct file *file,unsigned int cmd,unsigned long age); 塊設(shè)備驅(qū)動程序的請求處理函數(shù)一般通過中斷實現(xiàn)。驅(qū)動程序被調(diào)用時CPU由內(nèi)核程序控制,故不可搶占,驅(qū)動程序必須調(diào)用sleep_on()函數(shù)釋放對 CPU的占用,在中斷服務(wù)子程序?qū)?shù)據(jù)復(fù)制到內(nèi)核內(nèi)核后,再發(fā)出wake_up()調(diào)用。 字符設(shè)備如LCD、USB應(yīng)用廣泛,下面以此為例詳細(xì)說明添加設(shè)備驅(qū)動的過程。設(shè)備名稱為scre,設(shè)備號為254。塊設(shè)備與網(wǎng)絡(luò)設(shè)備可以比照處理。 在目錄/linux_2.4/drives/char編寫源程序scre.c,編寫字符設(shè)備的處理函數(shù)。 1.設(shè)備驅(qū)動原文件必須包括這樣的一個函數(shù): void scre_init(void){register(254, “scre“, %26;amp;scre_fops)} 這個函數(shù)完成注冊.在linux-2.4.x/driver/mem.c 將會調(diào)用它。 2.修改 linux-2.4.x/driver/char/Makefile 在適當(dāng)位置添加一行:obj_$(CONFIG_SCRE) += scre.o 3.修改linux-2.4.x/driver/char/Config.in, 添加一行: bool “scre device“ CONFIG_SCRE,便于在 make menuconfig 時選擇 4.修改linux-2.4.x/driver/char/mem.c ,在適當(dāng)位置(你去找就會發(fā)現(xiàn),在文件頭部)添加: #ifdef CONFIG_SCRE extern void scre_init(void); #endif 在chr_dev_init()函數(shù)添加: #ifdef CONFIG_SCRE scre_init(); #endif 5. 修改vendor/Samsung/4510b/Makefile ,建立設(shè)備節(jié)點;在12---35行間,DEVICE 部分添加如下內(nèi)容 :scre,c,254,0 。 6.make menuconfig 選中scre device,編譯,下載;啟動后你會看到 /proc/devices 中字符設(shè)備多了一項 scre 254 。 uClinux的Web技術(shù),主要有三個Web服務(wù)器:httpd,thttpd和boa。Httpd簡單,但只能Web瀏覽,不支持認(rèn)證、 CGI,thttpd和boa Web服務(wù)器功能較全;而boa Web代碼簡單、速度快,適合嵌入式應(yīng)用。Boa作為一個簡單的http服務(wù)器,與傳統(tǒng)服務(wù)器的主要區(qū)別是它是單進(jìn)程的。boa在uClinux下的實現(xiàn)需要對boa.conf和mime.types作一些配置和修改,并且需在命令行指定配置文件所在目錄。配置完成后需要重新編譯內(nèi)核,并選中boa選項,將編譯好的內(nèi)核下載到開發(fā)板,啟動uClinux,完成IP設(shè)置,啟動boa Web后便可通過IE訪問網(wǎng)頁了。 5 結(jié)語 uClinux在嵌入式領(lǐng)域憑借其穩(wěn)定、良好的移植性,優(yōu)秀的網(wǎng)絡(luò)功能,靈活完備的文件系統(tǒng)以及眾多的技術(shù)支持等優(yōu)點得到廣泛應(yīng)用,并將有更廣闊的應(yīng)用前景。本文針對uClinux的開發(fā)應(yīng)用步驟作了大致的闡述,對ARM應(yīng)用平臺上的系統(tǒng)移植和應(yīng)用開發(fā)作了分析,具有一定的指導(dǎo)意義。 參考文獻(xiàn) [1].劉安昱 溫曉輝 劉志紅,基于S3C44B0X的uClinux的移植,《單片機(jī)與嵌入式系統(tǒng)應(yīng)用》[J]2003.12. [2].徐雪松等,基于嵌入式Linux的DiskOnChip設(shè)備的驅(qū)動開發(fā)實現(xiàn),《電子設(shè)計應(yīng)用》[J]2003.12 [3].Linux on module project-Lom ARM7 ,www.lomx.net. [4].朱珂等譯,《Linux編程白皮書》[M],機(jī)械工業(yè)出版社,2000. [5].趙炯,《Linux內(nèi)核完全注釋(內(nèi)核版本0.11)》[M],2003[!--empirenews.page--] |
|