999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Linux嵌入式系統開發平臺的構建及應用

2010-04-12 00:00:00林繼民,吳怡,林
現代電子技術 2010年18期

摘 要:為了能夠在硬件基礎之上,按照產品要求或者研究需要進行各種嵌入式應用程序的開發,在介紹ARM和Linux特點的基礎上,通過宿主機和開發板的對接模式,成功地將嵌入式Linux操作系統移植到32位微處理器S3C2410A上,從而建立所需的嵌入式開發平臺。簡要討論幾種調試方法,并提出一種整體打包的方法,最后以一個簡單的Qtopia菜單程序為例,說明嵌入式應用程序的開發過程。關鍵詞:ARM; 嵌入式系統; Linux; Qtopia

中圖分類號:TN911-34; TP316 文獻標識碼:A

文章編號:1004-373X(2010)18-0030-05

Establishment and Application of Embedded System Development Platform Based on Linux

LIN Ji-min, WU Yi, LIN Xiao

(School of Physics and Optoelectronics Technology, Fujian Normal University, Fuzhou 350007, China)

Abstract: As the mass application of embedded products and particular dominance of Linux system, the development and study about embedded systems have become a main topic of discussion. In order to develop various embedded applications based on hardware according to the requirement of products and the need of study, the embedded Linux system is transplanted into the 32 bit micro-processor S3C2410A successfully with the docking mode of the host and development board according to the characters of ARM and Linux, and then the needed embedded development platform is set up. Several debugging methods are discussed and a overall package method is put forward. Taking a Qtopia application as an example, the development process of an embedded application program is depicted.Keywords: ARM; embedded system; Linux; Qtopia

0 引 言

嵌入式系統是以應用為中心,以計算機技術為基礎,并且軟硬件可裁減,適用于應用系統對功能、可靠性、 成本、功耗有嚴格要求的專用計算機系統,通常由嵌入式微處理器、 外圍硬件設備、嵌入式操作系統、及用戶應用程序四部分組成,用于實現對其他設備的控制、監視或者管理等功能[1],類似于PC機上的Windows XP系統。嵌入式操作系統是一種更加精簡、功能相對完整的操作系統,目前比較流行的嵌入式操作系統主要有Linux,Windows CE,Vxworks,μC/OS-Ⅱ等。Linux操作系統是一個免費并且源代碼開放的操作系統,用戶可以免費獲得Linux源代碼,然后根據自己的應用需求對系統進行定制和改造[2]。

本文選用的32位ARM920T內核微處理器是三星公司的S3C2410A-20[3],它可以支持2.4版本和2.6版本內核的Linux操作系統。本文把2.4版本內核的Linux操作系統嵌入到ARM體系結構中,并在此基礎上搭建嵌入式開發平臺,然后進行各種應用程序的開發。

1 硬件平臺

本文使用的硬件平臺是杭州立宇太電子有限公司的ARMSYS系列嵌入式系統開發板。它使用三星公司的S3C2410A處理器。S3C2410A是一款包含ARM920T內核的16/32位精簡指令集計算機(RISC)嵌人式微處理器。ARM920T核由ARM9TDMI、存儲管理單元(MMU)和高速緩存3部分組成。該處理器主要面向手持設備以及高性價比、 低功耗的應用,運行頻率可達203 MHz,可支持ARM-Linux,Windows CE等操作系統的嵌入式硬件平臺。

ARMSYS2410開發板的硬件資源主要由CPU、存儲器、串口、2個USB Host A型接口、1個USB Slave B型接口、以太網控制器CS8900及接口、JTAG調試口、LCD(夜晶顯示屏)觸摸屏接口,音頻接口、電源復位等電路組成。其中,CPU采用S3C2410A;存儲器由1片64 MB的SDRAM,1片1 MB的NOR FLASH和1片64 MB NADN FLASH構成;2個串口為COM0和COM1。

2 嵌入式Linux系統的移植

有些操作系統如Linux,Windows CE等經過移植后可以運行在不同的硬件平臺上。移植就是把某一個平臺上的代碼運行在其他平臺上的過程。

2.1 U-Boot的移植

一般而言,計算機系統都需要有啟動的引導程序。PC機的引導代碼就是BIOS引導程序,而嵌入式Linux系統的引導加載程序稱之為Bootloader。Bootloader是系統加電后運行的第一段代碼,它的主要運行任務就是將內核映像從硬盤上讀到RAM中,然后跳轉到內核的入口點去運行,即開始啟動操作系統[4]。通過Bootloader小程序可以初始化硬件設備,建立內存空間的映射圖,從而將系統的軟硬件環境帶到一個合適的狀態,以便為最終調用操作系統內核準備好正確的環境[3]。Uboot是最常見的Bootloader,主要用來完成系統環境的初始化,將后期執行代碼復制到SDRAM空間,為Linux內核的運行準備好條件。

2.1.1 Windows 和Linux系統的文件共享

實現Windows下文件到Linux系統的共享方法有很多種,比如使用Samba,硬盤掛載mount和直接使用虛擬機的Shared Folders等。在PC上安裝一個虛擬機VMware和Red Hat Linux,虛擬機的好處就是可以在虛擬機中打開操作系統Linux,實現Windows XP系統下資源的共享和Linux操作系統圖像界面的全屏化,共享的文件可以在/mnt/hgfs目錄下看到[5]。

2.1.2 配置和編譯U-boot

不同硬件板的U-boot配置也稍有不同。移植U-boot主要包括添加開發板硬件相關的文件等。為了不改動原來的smkd2410.h文件,在uboot2410/include/configs/下的smdk2410.h復制一份并更名為armsys2410.h,可以通過armsys2410.h來修改U-boot軟硬件配置,包括硬件板直接相關聯的CPU類型、開發板IP、波特率等。設置所需要的配置后就能編譯U-boot。U-boot編譯的具體過程如下:

(1) 將板子取名為armsys2410,在Makefile中加入armsys2410_config:unconfig@./mkconfig $(@:_config=) arm arm920t armsys2410 NULL s3c24x0.

(2) 在/u-boot_2410/board/下建立armsys2410目錄,并把/board/smdk2410/下的文件拷貝到/board/armsys2410下,將smdk2410.c更名為armsys2410.c

(3) 編譯U-boot,即可生成u-boot.bin可執行文件,具體的執行命令如下:

make smdk2410_config

make all ARCH = arm

(4)下載u-boot.bin到S3C2410開發平臺的NAND FLASH,成功下載后開發板上電就能從超級終端上看到剛下載的U-boot啟動程序。啟動過程中按下任意鍵,出現如圖1所示的啟動畫面。

2.2 zImage的移植

Linux內核主要由以下5個子系統組成:進程調度、內存管理、虛擬文件系統、網絡接口、進程間通信。內核結構中的幾個主要目錄存放著大量的源代碼等信息[3]。ARMSYS2410開發板的CPU內核可以移植2.4和2.6版本的Linux內核,本文選用2.4版本的Linux內核。對Linux內核的移植是一個龐大的工程,首先要對其源碼結構有清楚的認識,并能深刻理解其中的源代碼,然后在此基礎上修改或編寫需要的源代碼,以達到預期的目的。Linux內核目錄[2]如下:/Documentation:存放了許多的文檔/arch:不同體系結構特定的內核代碼;/drivers:設備的驅動程序; /fs:文件系統代碼;/include:相關庫文件;/init:內核的初始化代碼;/ipc:進程通信代碼;/kernel:主內核代碼;/lib:存放高速體系結構特有的和通用函數的實現;/mm:內存管理代碼;/net:網絡相關代碼;/scripts:存放了配置內核的一些腳本文件。

圖1 啟動畫面

2.2.1 交叉編譯環境

開發板是ARM9處理器,開發板平臺上沒有編譯器,只負責存放編譯好的目標代碼,并能夠執行。源代碼的編譯器是存放主機Linux系統上的,為了使在主機Linux系統上編譯的代碼能夠在ARM9處理器中執行,必須有一交叉編譯工具。交叉編譯器和鏈接器是在宿主機上運行的,并且能夠生成在目標機上直接運行的二進制可執行文件。安裝cross-2.95.3.tar.bz2,并設置好交叉編譯器的啟動路徑,完成交叉編譯環境的建立,上文編譯u-boot.bin時已經用到arm-linux-gcc。

2.2.2 配置和編譯Linux內核

tar zxvf kernel_armsys_070730.tar.gz(解壓內核文件),當出現文件夾/kernel時,就能看到上述幾個目錄。每個目錄下都有很多的相關模塊,通過篩選和裁剪,選擇所需要的極少部分即可。開發板的內存容量比較有限,而且有很多的用途,不能一味地去裝很大的內核,所以只有通過適當地裁剪才能真正達到移植的目的。

配置內核:make menuconfig,對開發板做進一步的裁剪,Load an Alternate Configuration File,選擇一個ARMSYS2410板的內核配置文件作為模板:Armsys2410_cfg;選擇適合LCD和觸摸屏規格的配置,Console drivers→Frame-buffer support→S3C2410 Board LCD Display Size→320x240;觸摸屏選擇:Character devices→S3C2410 TOUCHSCREEN Size→X>Y,表示橫放模式。為了使嵌入式目標系統的Linux內核支持NFS客戶端,在進行配置內核時必須選擇File systems->Network File Systems->Provide NFSv3 client support 和NFS file system support。做這樣簡單的配置之后就可以進行編譯了,make clean,make dep,創建內核的依賴關系;make zImage,創建內核鏡像文件,編譯成功后可得到剛裁剪配置的Linux內核壓縮映像文件zImage。

2.2.3 zImage的下載

系統映像的下載只能由 bootloader 提供。通過bootloader 提供的命令行或者交互Shell界面可以指定內核映像和文件系統映像的下載位置,也可以檢查目標板上內存地址中的內容[6]。使用U-boot下載Linux內核的最快捷方法是通過網絡傳輸。TFTP是TCP/IP協議族中一個用來在客戶機與服務器之間進行簡單文件傳輸的協議,用于提供不復雜、開銷不大的文件傳輸服務,它基于UDP協議實現。U-boot支持TFTP協議,因此可以利用網絡接口,使用tftp傳輸的方法來下載zImage,在根目錄下建一個/tftpboot目錄,把zImage拷到/tftpboot目錄下,啟動tftp:/etc/init.d/vsftpd start。假設PC主機設IP為10.192.3.100,則開發板的設置如下:

表1 開發板的參數設置

開發板IP 地址10.192.3.200

Tftp服務器IP地址10.192.3.100

內核啟動參數linux_arg noinitrd root=/dev/mtdblock/2init=linuxrc console=ttyS0

Bootcmd啟動命令bootcmd nandr c e0000 30008000/bootm

使用ping命令查看是否與主機連通,若顯示host 10.192.3.100 is alive,說明宿主機已經與目標機建立鏈接。傳輸zImage到開發板的內存為:

SMDK2410 # tftp 30000000 zImage;映像文件zImage傳送到暫存地址0x30000000

SMDK2410 # nandw c e0000 30000000;寫入內核的起始塊號為c的NAND FLASH

這樣就可以把zImage固化到開發板的內存中,通過boot命令即可啟動內核。

2.3 文件系統的移植

文件系統是操作系統中用來管理用戶文件的內核軟件層。根文件系統是Linux系統的核心部分,包括系統使用的軟件和庫,以及所有用來為用戶提供支持架構和用戶使用的應用軟件,并作為存儲數據讀/寫結果的區域。在Linux系統啟動時,首先完成內核安裝及環境初始化,最后尋找一個文件系統作為根文件系統被加載。嵌入式系統中通常可以選擇的根文件系統有:Romfs,Cramfs,Ramfs,YAFFS,JFFS和JFFS2等。本文使用的YAFFS是專為NAND FLASH存儲器設計的嵌入式文件系統,適用于大容量的存儲設備,YAFFS 是可讀寫的文件系統,而且保存在文件系統的文件和設置在掉電后不會丟失[1-2]。

U-boot也支持nfs掛載功能,把開發板提供的root-armsys-nfs-050801.tgz放到/armsys2410目錄下,解壓后的文件名更改為root,這是網絡文件系統。在/armsys2410/root/bin/目錄下有一個用于下載根文件系統到NAND FLASH的下載工具Writerootfs。把根文件系統壓縮包root_armsys_l35t32.tgz拷到在/armsys2410/root目錄下,這個壓縮包就是用于固化在NAND FLASH上的根文系統YAFFS。

(1) 關閉Windows XP和Linux系統的防火墻,設置文件系統的nfs掛載,在宿主機上先啟動NFS服務:/etc/rc.d/init.d/nfs start。設置服務器的共享目錄,編輯文件/etc/exports,在文件中添加內容:/armsys2410/root *(rw,sync,no_root_squash),然后保存退出。其中:/armsys2410/root代表要共享輸出的root文件系統的共享目錄;*代表所有客戶機都可以掛載次文件系統;rw代表客戶機可以讀寫許可地掛載它們的根文件系統;no_root_squash表示允許客戶機以主機上的root身份掛載根文件系統[2]。

(2) 開發板的啟動參數設置:setenv linux_arg root=/dev/nfs init=/linuxrc nfsroot=10.192.3.100:/armsys2410/root ip=10.192.3.200:10.192.3.100:10.192.3.1:255.255.255.0:jmaylin:eth0:off console=ttyS0。它說明宿主機掛載在目標機上的目錄是/armsys2410/root。

(3) 重啟開發板,看到Welcome to NFS root file system!說明成功掛載主機目錄/armsys2410/root。使用Writerootfs命令開始下載文件系統root_armsys_l35t32.tgz,該文件系統集成了Qtoqia等應用程序,開發板上電后,除了進入文件系統外,還在LCD上顯示Qtoqia應用程序圖形界面。

3 嵌入式Linux應用程序的開發

經過上面的過程,一個嵌入式開發平臺基本搭建完成。在這個平臺上就能進行各種應用程序的開發。基于ARMSYS2410開發板,其源程序的編寫、編譯調試等過程都在主機上進行,最后再把編譯生成的可執行文件固化到開發板上去運行,下面討論幾種調試方法。

3.1 調試方法

(1) Nfs掛載

在配置內核的時候,選擇選項File systems→Network File Systems→Provide NFSv3 client support 和NFS filesystem support,這樣才能保證正常地從開發板的文件系統去掛載主機上的共享目錄。然后可以在主機上使用交叉編譯工具編譯和直接運行,只要把相應的庫文件設置好即可。這種方法不用傳遞可執行文件,即可在開發板的文件系統直接運行主機上的可執行文件,方便快捷,是較為常用的一種調試方法。

(2) ftp傳輸方法

① 查看主機有沒有裝ftp服務:rpm -qa|grep vsftpd,然后啟動ftp:/sbin/service vsftpd start。主機上的/var/ftp目錄就是ftp的共享目錄,把可執行文件(比如hello)放在該目錄下。

② 開發板文件系統:設置開發板的IP,使其與宿主機IP處于同一網段。在開發板的文件系統里ftp登錄主機:ftp 10.192.3.100,使用匿名登錄,顯示主機共享/var/ftp目錄下的hello可執行文件,下載可執行文件到開發板的文件系統:ftp>get hello。通常,使用這種方法還要修改可執行文件的執行模式。

(3) U盤掛載

可以把在主機上可執行文件hello拷到U盤里面,利用開發板的USB HOST端口把U盤掛載到板上,然后拷貝U盤里的hello到文件系統里執行。

(4) 整體打包

上面幾種方法都是在已有的文件系統上操作的,整體打包的方法是對預下載的整個文件系統進行編輯。加載的文件系統YAFFS是壓縮格式的root_armsys.tgz,只有當開發板上電啟動后,才把根文件系統解壓出來。在主機Linux系統/armsys2410目錄下,新建一個test文件夾,把root_armsys.tgz拷到/test目錄下并解壓,再把應用程序的可執行文件放到/test目錄下,重新把所有文件打包成root_armsys.tgz:tar -czvf root_armsys.tgz ./* ,再一次加載到NAND FLASH中,更新原來的文件系統。這種方法是直接對整個根文件系統進行編輯,適用于在開發文件系統時使用,但是每次都要重新下載整個文件系統,比較繁瑣。

3.2 Qtopia應用程序

Qt/Embedded是Trolltech公司開發的面向嵌入式系統的Qt版本,2000年11月發布了第一個Qt/E版本,而Qtopia則是構建于Qt/E之上的類似桌面系統的應用環境,包括PDA和手機等掌上系統常見的功能,如:電話簿、圖像瀏覽、Media播放器、日歷等[6]。Qt應用程序實現的是對靜態圖像的顯示及其形態的處理操作[7]。

為了開發和調試Qtopia應用程序,必須安裝基于PC和ARM的Qt開發環境。下面以一個簡單的菜單程序為例來說明Qtopia應用程序的開發過程。程序開發流程如圖2所示。

圖2 Qt應用程序開發流程圖

(1) 使用基于PC的Qt開發環境編譯

在建立基于PC的Qt開發環境時,需要編輯/etc/ld.so.conf,使得在源程序編譯鏈接過程中能找到相應的庫文件:/armsys2410/qt_x86/qt/lib和/armsys2410/qt_x86/qtopia/lib。保存退出后激活設置ldconfig。當用完庫后可以把/etc/ld.so.conf改回來,不然會影響系統上其他應用程序的啟動,加上“#”將其注釋掉。設置基于PC的Qt開發環境的環境變量,保證編譯的正確路徑:source set-env。主程序源代碼main.cpp如下:

#include\"menu.h\"

int main(int argc,char **argv)

{ QApplication app(argc,argv);//define a application

MainWidget *mainwidget = new MainWidget(0);//define a MainWidget object

mainwidget->setGeometry(10,30,320,240);//set the object′s coordinate and size

app.setMainWidget(mainwidget);//send the creating object to current application

mainwidget->show();//show window

int result = app.exec();//run or execute the application repeatedly

return result;

}

利用Qt環境調試過程:

①產生工程文件:progen -t app.t -o main.pro;

②產生Makefile文件:tmake -o Makefile main.pro,修改Makefile中的lib,加鏈接庫-lm lstdc++即可;

③運行make產生menu的可執行文件;

④打開虛擬幀緩存:qvfb ,運行可執行文件menu:./menu -qws。

(2) 使用基于開發板的Qt開發環境編譯

設置基于ARM的Qt開發環境的環境變量:source set-env。為了能生成可在目標板上運行的可執行文件,需要把生成Makefile文件中的編譯器、鏈接器gcc,g++分別改為arm-linux-gcc和arm-linux-g++,其他步驟同上。最后選擇一種文件傳輸辦法,把menu送到ARM板上運行,執行界面如圖3所示。

圖3 執行界面

4 結 語

本文在分析ARM和Linux特點的基礎上,詳細介紹了Linux系統移植的各個部分,其中包括U-boot,zImage和YAFFS文件系統的具體操作過程。由此構建了嵌入式Linux開發系統平臺,指出Linux移植過程中系統的精簡度、安全性、穩定性等方面均需要開發人員做進一步的考慮和研究。 給出了幾種常見的嵌入式開發的調試方法,并進行簡單的討論和比較。最后通過調試和編譯簡單的Qtopia應用程序,說明了嵌入式應用程序的開發過程,為開發實際應用程序和驅動程序奠定了基礎。

參考文獻

[1]孫天澤,袁文菊,張海峰.嵌入式設計及Linux驅動開發指南——基于ARM9處理器[M].北京:電子工業出版社,2005.

[2]王黎明,陳雙橋,閆曉玲,等.ARM9嵌入式系統開發與實踐[M].北京:北京航空航天大學出版社,2008.

[3]Samsung Electronic. User′s mannual S3C2410X 32Bit RISC microprocessor[M].South Korea: Samsung Electronic, 2003.

[4]葉林,方建軍. 基于ARM9嵌入式系統的BootLoader設計[J].科技信息,2009(11):36-37.

[5]鄒穎婷,李紹榮.ARM9上的嵌入式Linux 系統移植[J].自動化技術與應用,2009,28(6):43-45.

[6]劉文峰,李程院,李善平.嵌入式Linux操作系統的研究[J].浙江大學學報:工學版,2004,38(4):447-452.

[7]劉福才,趙佳偉,湯麗娜.基于嵌入式Linux系統的Qt/Embedded圖像處理界面開發[J].計算機應用與軟件,2009,26(11):116-117,149.

[8]孫瓊.嵌入式Linux應用程序開發詳解[M].北京:人民郵電出版社,2006.

[9]鄒思軼.嵌入式Linux設計與應用[M].北京:清華大學出版社,2002.

[10]歐文盛.ARM嵌入式Linux應用實例開發[M].北京:中國電力出版社,2008.

主站蜘蛛池模板: 色噜噜综合网| 国产va在线| 无码网站免费观看| 国产在线观看成人91| 亚洲天堂免费在线视频| 小说 亚洲 无码 精品| 最新无码专区超级碰碰碰| 国产亚洲精品97AA片在线播放| 女人av社区男人的天堂| 国产成人亚洲日韩欧美电影| 手机在线免费不卡一区二| 欧美另类第一页| 亚洲丝袜第一页| 欧美日韩午夜| 欧美在线精品一区二区三区| 亚洲中文字幕av无码区| 狠狠v日韩v欧美v| 国产精品分类视频分类一区| 国产亚洲精品自在线| 亚洲AV无码乱码在线观看裸奔| 午夜色综合| 制服丝袜国产精品| 免费jizz在线播放| 四虎永久在线精品影院| 欧美午夜视频| a亚洲视频| 亚洲国语自产一区第二页| 无码中文字幕精品推荐| 久久精品一品道久久精品| 999在线免费视频| 91九色国产porny| 精品欧美一区二区三区在线| 欧美综合中文字幕久久| 91蝌蚪视频在线观看| www.日韩三级| 在线播放国产一区| 国产在线观看第二页| 国产高清不卡| 91破解版在线亚洲| 欧美啪啪精品| 毛片基地视频| 高清久久精品亚洲日韩Av| 伊人无码视屏| 日韩天堂网| 高潮毛片免费观看| 日本一区二区三区精品视频| 91网红精品在线观看| 国产91在线|中文| 久久天天躁夜夜躁狠狠| 在线看国产精品| 亚洲欧美另类色图| 亚洲女同欧美在线| 国产乱人伦精品一区二区| 色哟哟色院91精品网站| 欧美国产日本高清不卡| 日韩东京热无码人妻| 色网站免费在线观看| 97色伦色在线综合视频| 人妻中文字幕无码久久一区| 99re精彩视频| 亚洲国产天堂久久九九九| 精品一区二区三区四区五区| 国产爽歪歪免费视频在线观看| 最新精品久久精品| 亚洲电影天堂在线国语对白| 伊人欧美在线| 日韩精品少妇无码受不了| 国产视频a| 东京热av无码电影一区二区| 老司机精品久久| 国产成人精品男人的天堂下载 | 天天综合天天综合| 亚洲中文字幕在线一区播放| 国产欧美又粗又猛又爽老| 在线视频一区二区三区不卡| 青青草原国产av福利网站| 91麻豆精品国产高清在线| 久久综合色天堂av| 国产精品成人不卡在线观看| 无码'专区第一页| 亚洲aaa视频| 久久综合九九亚洲一区|