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

基于ARM和Linux的嵌入式平臺的構建

2011-02-28 05:10:32曾福振閔聯營
網絡安全與數據管理 2011年12期
關鍵詞:嵌入式設備

曾福振,閔聯營

(武漢理工大學 計算機科學與技術學院,湖北 武漢430063)

進入后PC時代以來,伴隨著設計和制造技術的發展,集成電路從當初的晶體管集成發展到現在的IP集成,即SoC(System on Chip)設計技術。促使嵌入式系統滲透到了當今社會中的各個行業,并且發揮越來越重要的作用。嵌入式系統一般可定義為以應用為中心、以計算機技術為基礎、軟硬件可裁剪、適用于應用系統且對功能、成本、體積、功耗有嚴格要求的專用計算機系統,它的主要特點是嵌入、應用[1]。

隨著各種嵌入式設備功能越來越強大,在設備中使用嵌入式操作系統也成為必然。Linux操作系統具有開放源代碼、易于移植、資源豐富、免費等特點,在嵌入式領域的地位越來越重要。嵌入式Linux和PC上的Linux是同一套內核代碼,只是裁剪的程度不一樣,所以,很多在PC上開發的軟件,經過交叉編譯后可以直接在嵌入式設備上運行。本文主要涉及到Bootloader移植和Linux-2.6.32.2內核的移植、根文件系統移植、在S3C2440平臺上構建完整的嵌入式開發平臺三個方面。

1 交叉開發環境的建立

在進行嵌入式軟件開發之前,必須要在PC上建立ARM的交叉編譯環境。交叉編譯就是在PC平臺上生成可以在ARM平臺上運行的代碼。其中主要包括ARM的交叉編譯器arm-elf-gcc和交叉連接器arm-elf-ld。本文采用的交叉編譯器的版本是gcc-3.4.5-glibc-2.3.6[2]。交叉編譯流程如圖1所示。

圖1 嵌入式系統交叉編譯流程

2 BootLoader引導加載程序

BootLoader是一段在系統上電時開始執行的程序,用以初始化硬件設備,準備好軟件環境,設置好啟動參數,最后引導操作系統,與PC上的 BIOS程序相似。當前開放源碼的Linux引導程序主要有x86架構的LILO、GRUB,對于ARM架構的主要有Vivi和U-Boot。本文使用 U-Boot作為引導程序。U-Boot(Universal Boot Loader),即通用的BootLoader,遵循GPL條款開放源代碼。U-Boot相對于Vivi功能更加強大,也更方便后續程序的調試。

BootLoader的啟動一般分為兩個階段,第一階段的代碼主要是用匯編語言編寫,主要的功能是完成硬件設備的初始化,為加載第二階段的代碼準備RAM空間,設置好堆棧;第二階段主要用C語言編寫,檢測內存映射,將內核映像和根文件系統從Nand Flash讀到RAM中,為內核啟動設置參數,引導內核。

U-Boot的源代碼可以從ftp://ftp.denx.de/pub/u-boot/進行下載,本文使用的U-Boot版本是U-Boot2009.08。

移植U-Boot的關鍵步驟如下:

(1)首先,將 include/configs目錄下的 smdk2410.h復制并改名為mini2440.h,根據U-Boot的說明可以知道,如果要使用開發板board/,則先執行“make”_config命令進行配置,然后執行“make all”,生成可執行文件。所以,修改 U-Boot頂層的Makefile文件,添加下面一行mini2440_config:unconfig@$(MKCONFIG)$(@:_config=)arm arm920t mini2440 frank s3c24x0。這里有幾個重要的參數,arm指CPU的架構,arm920t指 CPU的類型,s3c24x0指 CPU的型號。這樣就可以使用make mini2440_config這條命令進行配置。

(2)本文使用的U-Boot是從Nand Flash啟動的,CPU可以直接訪問Nand Flash中前4 KB代碼,利用這4 KB代碼把U-Boot中絕大部分代碼拷貝到內存中[3]。其中下面的代碼就是調用C語言中的Nand Flash的讀寫函數,該函數主要把Nand Flash中4 KB以后的代碼復制到RAM中。在編寫nand_read_ll的函數時,注意參考Nand Flash的數據手冊,對大頁和小頁的Nand Flash,其讀寫的命令和時序是不同的。

由于在后面加載Linux內核和根文件系統時,使用的是tftp方式,所以必須添加DM9000EP網卡的驅動。在mini2440.h文件中,其主要的配置如下:

其中,CONFIG_DM9000_BASE宏是最重要的,因為它定義的是網卡的地址,不同的網卡有不同的地址,DM9000EP訪問的基址為0x20000000,之所以再偏移0x300是由它的特性決定的。

(3)要正確引導Linux內核,還需要配置下面幾個重要的宏定義,這幾個宏定義不同,意味著引導Linux內核的方式也不同。

其中,root=/dev/mtdblock3是由Linux中的Nand Flash分區所決定的,意味著Nand Flash的第4個分區為根文件系統。

這個宏定義是將Nand Flash中0x60000-0x560000(和kernel分區一致)的內容讀到內存 0x32000000中,然后用bootm命令來執行。

要正常地引導Linux內核,必須要具備如下幾個條件

[4]:

(1)CPU寄存器

R0=0;

R1=機器類型ID;對于 ARM結構的CPU,其機器類型 ID 在 linux/arch/arm/tools/mach-types;

R2=啟動參數標記列表在RAM中起始基地址。

(2)CPU工作模式

必須禁止中斷(IRQs和 FIQs);

CPU必須為SVC模式。

(3)Cach和MMU的設置

MMU必須關閉;

指令Cach可以打開也可以關閉;

數據Cach必須關閉。

3 Linux2.6.32.2內核的移植

3.1 內核的獲取

Linux內核的更新很快,可以從http://www.kernel.org/pub/linux/kernel/得到最新的Linux內核版本,本文使用的Linux內核版本是Linux-2.6.32.2,交叉編譯工具使用符合EABI標準的arm-linux-gcc-4.3.2。

3.2 內核的移植

可以在內核的根目錄下,運行make menuconfig命令,對內核進行適當的裁剪,以適應硬件平臺。

(1)修改 Makefile文件

欲設置Linux的默認平臺為ARM平臺,需進入Linux-2.6.32文件夾中,修改此目錄下的Makefile文件。

(2)關于機器碼

在啟動內核時,根據BootLoader傳入的機器碼(MACH_TYPE)來決定應啟動哪種目標平臺[6],本開發平臺的機器碼為1999。機器碼存放在文件opt/kernel/linux-2.6.32.2/arch/arm/tools/mach-types中。

如果機器碼不匹配,引導內核不成功,則會出現如下的錯誤提示:

(3)修改時鐘源

將/kernel/linux-2.6.32.2/arch/arm/mach-s3c2440/目錄下的 mach-smdk2440.c文件改名為 mach-mini2440.c。因為mini2440和mach-smdk2440.c極其相似,以該文件為基礎進行修改,在mach-mini2440.c文件中將static void__init smdk2440_map_io(void)函數中的晶振頻率修改為mini2440開發板上實際使用的12000000。

(4)為內核打上 yaffs2補丁

①Yaffs2文件系統是專門針對嵌入式設備,特別是使用Nand Flash作為存儲器的嵌入式設備而創建的一種文件系統,使用yaffs2就可以支持大頁的Nand Flash。進入 yaffs2源代碼目錄執行如下命令:

②配置內核以支持Yaffs2文件系統

在 Linux內核源代碼根目錄運行 make xconfig,在“File Systems”選 項 中 ,找 到 “Miscellaneous filesystems”菜單項,找到“YAFFS2 file system support”并選中它,這樣就在內核中添加了yaffs2文件系統的支持,保存并退出。然后在命令行中,執行make zImage。

(5)修改 Nand Flash分區信息

①在mach-mini2440.c文件中添加Nand Flash的分區信息,下面的代碼將Nand Flash分成了4個分區,第1分區也是 BootLoader所在的分區,對應 dev/mtdblock0;第2個分區是 U-Boot的參數分區,對應 dev/mtdblock1;第 3個分區是內核分區,對應dev/mtdblock2;第 4個分區為根文件系統分區對應dev/mtdblock3。分區結構圖如表1所示。

表1 128 MB Nand Flash的分區結構圖

其部分實現代碼如下:

其中 name是分區的名字,offset是偏移的開始地址,size是分區的大小,其余部分的分區與此類似。

②下面代碼是添加Nand Flash的設置表,因為板子上只有一片Nand Flash,因此也就只有一個設置表。

③上面的設置完成后,還需要將Nand Flash設備注冊到系統中。下面這段代碼就是將Nand Flash設備添加到開發板的設備列表結構。

現在可以進入kernel/linux-2.6.32.2/arch/arm/boot目錄,然后執行下面的命令,就會在該目錄下生成uImage.img格式的、U-Boot可以引導的內核鏡象。

至此,可以把生成的uImage.img格式的鏡像文件復制到tftp目錄下,使用tftp進行下載。

3.3 文件系統

所謂根文件系統,就是創建各個目錄,例如在/bin、/sbin/目錄下存放各種可執行的程序,在/etc目錄下存放配置文件,在/lib目錄下存放庫文件。

可以利用Busybox工具創建根文件系統,Bosybox是一個遵循 GPL v2協議的開源項目,它在編寫過程中對文件大小進行優化,并考慮了系統資源有限(例如內存)的情況,使用 Busybox可以自動生成根文件系統所需的bin、sbin、usr目錄和 linuxrc文件,可以使用 make menuconfig對Busybox的選項進行配置。

(1)進入 opt/kernel,創建一個 shell腳本用于構建根文件系統的各個目錄,并且為其增加執行權限;

(2)Linux中的init進程會根據etc/inittab文件創建其他子進程,下面代碼是inittab文件中的內容,說明了系統啟動后首先執行的腳本文件是rcS,虛擬的終端是串口 0,當按下 ctr+alt+del時重啟系統,inittab文件的作用就是控制系統啟動時和啟動后一些程序的運行。

使用yaffs源碼提供的工具制作文件系統的映像文件。由于128 MB的Nand Flash是大頁結構,所以需要使用相應的大頁制作工具;使用命令mkyaffs2image rootfs rootfs.img生成根文件系統映像文件。

本文通過對U-Boot移植和Linux內核移植的討論,給出了移植U-Boot和Linux到大多數開發板的關鍵部分。由于移植的復雜性,不可能包括全部步驟,但通過本文的闡述可以了解移植的基本流程和關鍵點,為移植不同版本到其他硬件平臺提供了參考,也為應用程序的開發搭建了一個比較完整的嵌入式平臺。

[1]韋東山.嵌入式 Linux應用開發完成手冊[M].北京:人民郵電出版社,2008.

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

[3]Samsung Electronics.S3C2440A 32-bit RISC microprocessor user′s manual[S].2004.

[4]RUSSELL K.ARM Linux kernel Boot requirements[EB/OL].[2002-03-18].http://www.arm.linux.org.uk/developer/booting.php.

[5]陳莉君.深入理解 Linux內核[M].北京:中國電力出版社,2007.

[6]JONATHAN C,ALESSANDRO R,GREG KROAH H.Linux

設備驅動程序[M].北京:中國電力出版社,2006.

猜你喜歡
嵌入式設備
諧響應分析在設備減振中的應用
TS系列紅外傳感器在嵌入式控制系統中的應用
電子制作(2019年7期)2019-04-25 13:17:14
基于VB6.0+Access2010開發的設備管理信息系統
嵌入式系統通信技術的應用
電子制作(2018年18期)2018-11-14 01:48:16
基于MPU6050簡單控制設備
電子制作(2018年11期)2018-08-04 03:26:08
搭建基于Qt的嵌入式開發平臺
嵌入式軟PLC在電鍍生產流程控制系統中的應用
電鍍與環保(2016年3期)2017-01-20 08:15:32
500kV輸變電設備運行維護探討
工業設計(2016年12期)2016-04-16 02:52:00
如何在設備采購中節省成本
原來他們都是可穿戴設備
消費者報道(2014年7期)2014-07-31 11:23:57
主站蜘蛛池模板: 久久精品人人做人人爽97| 久久无码免费束人妻| 高清国产va日韩亚洲免费午夜电影| 国产噜噜噜视频在线观看| 2021最新国产精品网站| 国产中文一区a级毛片视频| 日韩无码一二三区| 69国产精品视频免费| 99视频精品全国免费品| 国产精品专区第一页在线观看| 国产免费怡红院视频| 国产综合欧美| 又黄又湿又爽的视频| 午夜欧美理论2019理论| 国产极品粉嫩小泬免费看| 日本人又色又爽的视频| 国产亚洲欧美日本一二三本道| 亚洲AⅤ永久无码精品毛片| 精品国产免费观看一区| 18禁黄无遮挡免费动漫网站 | AV无码无在线观看免费| 国产精品午夜福利麻豆| 国产成人调教在线视频| 精品亚洲国产成人AV| 免费人成在线观看成人片| 精品无码日韩国产不卡av | 丁香婷婷激情网| 91丨九色丨首页在线播放| 免费女人18毛片a级毛片视频| 动漫精品中文字幕无码| 免费看黄片一区二区三区| 久久精品人人做人人综合试看| 人妻丰满熟妇αv无码| 91亚洲视频下载| 亚洲无码高清视频在线观看| 亚洲最新网址| 四虎成人免费毛片| 亚洲Av激情网五月天| 黄色三级网站免费| 免费国产一级 片内射老| 亚洲三级a| 538国产视频| 国产在线精品网址你懂的| 欧美中文字幕一区二区三区| 毛片基地美国正在播放亚洲| 国产在线98福利播放视频免费| 婷婷亚洲最大| 欧美在线网| 欧美性久久久久| 欧美一区二区精品久久久| 亚洲福利视频网址| 国产xx在线观看| 毛片在线看网站| 无码福利日韩神码福利片| 国产精品视频第一专区| 天堂成人在线| 中文字幕av一区二区三区欲色| 国产在线视频福利资源站| 国产成人1024精品| 成人综合在线观看| 又污又黄又无遮挡网站| 一区二区三区国产精品视频| 亚洲最新地址| 婷婷色中文| 日本久久免费| 456亚洲人成高清在线| 91精品国产91久久久久久三级| 亚洲综合18p| 亚洲国产成熟视频在线多多 | 色综合天天视频在线观看| 国产欧美精品一区二区| 欧美精品一二三区| 欧美啪啪网| 国产一区二区丝袜高跟鞋| 波多野结衣在线se| 一区二区三区国产| 香蕉99国内自产自拍视频| 国产av无码日韩av无码网站| 538国产在线| 国产偷国产偷在线高清| 国产在线视频导航| 国产人在线成免费视频|