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

U-Boot在AT91RM9200上的移植及啟動分析

2008-04-12 00:00:00周慶松史小軍
現代電子技術 2008年5期

摘 要:采用U-Boot 1.1.2構建嵌入式系統的引導加載程序。在對U-Boot的啟動工作機理和源碼主要函數功能進行了簡略分析后,針對基于AT91RM9200的目標板對U-Boot作了具體的修改和移植,并講述如何設置環境變量,從而引導Linux內核啟動。應用結果表明,移植后的U-Boot在目標板上運行良好,可成功引導Linux內核。

關鍵詞:U-Boot;移植;內核;AT91RM9200;嵌入式系統

中圖分類號:TN99 文獻標識碼:B

文章編號:1004373X(2008)0515703

Porting and Start Analysis of U-Boot Based on AT91RM9200 Board

ZHOU Qingsong,SHI Xiaojun

(Deptartment of Electronic Science and Engineering,Southeast University,Nanjing,210018,China)

Abstract:A bootloader for embedded system is developed with the U-Boot 1.1.2.After analyzing the booting mechanism of U-Boot and the function of sound code,the modification and porting in an embedded system board based on AT91RM9200 are done in detail,with environment variable settings and consequent Linux kernel booting process.The application shows that U-Boot runs well and can lead Linux kernel successfully.

Keywords:U-Boot;porting;kernel;AT91RM9200;embedded system

1 引 言

U-Boot(Universal Boot Loader)是遵循GPL條款的開放源碼項目,他支持多種體系結構的上百種開發板,并且支持多種嵌入式操作系統內核,具有較高的可靠性和穩定性,已經成為功能最多、靈活性最強并且開發最積極的開放源碼BootLoader。作為通用的BootLoader,U-Boot可以方便地移植到其他硬件平臺上。

本文基于AT91RM9200的嵌入式目標板和U-Boot 1.1.2源碼資源,分析了U-Boot的啟動過程,介紹了U-Boot的移植方法和具體操作,最后講述如何引導內核啟動。

2 U-Boot啟動分析

在具體移植之前,先來了解一下U-Boot啟動過程。U-Boot啟動過程可以分成3個階段。

(1) 在FLASH中運行匯編程序,進行基本硬件初始化,并將FLASH中的啟動代碼復制到SDRAM中,同時創造環境準備運行C程序。

匯編程序start.s是U-Boot啟動后執行的第一個程序,他位于CPU/AT91RM9200中,鏈接腳本Board/AT91RM920DK/U-Boot.lds決定U-Boot的入口函數位于該程序中,上電后,處理器首先執行該程序,具體工作流程如圖1所示。

(2) 跳轉到SDRAM中執行,對硬件進行初始化,并向顯示終端輸出啟動信息。

start[CD#*2]armboot是U-Boot執行的第一個C語言函數,他位于lib[CD#*2]arm/board.c中,主要完成系統初始化工作,進入主循環,處理用戶輸入的命令。 具體工作流程如圖2所示。

全局變量結構體gd用來保存開發板信息、終端存在標志位、環境變量結構體起始地址、環境變量校驗標志位、frame buffer 基地址等。他是指向gd[CD#*2]t結構體的指針,gd[CD#*2]t結構體定義在include\\\\asm-asm\\\\global[CD#*2]data.h中。

硬件初始化中執行函數及各函數作用如下:

board[CD#*2]init:基本的板級相關配置,主要包括:設置處理器類型和啟動參數地址;

interrupt[CD#*2]init:中斷處理初始化,主要對TC控制器作設置。

env[CD#*2]init:設置環境變量,初始化環境;

init[CD#*2]baudrate:指定串口的波特率;

serial[CD#*2]init:串口初始化設置;選擇通訊端口,設置串口波特率和工作方式;

console[CD#*2]init[CD#*2]f:設置gd->have[CD#*2]console=1,表示可以使用串口通訊控制臺;

display[CD#*2]banner:在控制臺輸出 U-Boot信息;

dram[CD#*2]init:設置SDRAM的起始地址和大小;

display[CD#*2]dram[CD#*2]config:在控制臺輸出 SDRAM信息;

FLASH[CD#*2]init:設置FLASH芯片ID號、每個扇區起始地址等信息,將信息送到相應的結構體中;對FLASH中U-Boot和環境變量存儲扇區做軟件寫保護;

display[CD#*2]FLASH[CD#*2]config (size):在上位機終端輸出FLASH大小。

(3) 將內核映像和根文件系統映像從FLASH拷貝到SDRAM中,為內核設置啟動參數,進入內核的入口函數。

U-Boot作為BootLoader,具備多種引導內核啟動的方式,常用bootm命令引導內核映像啟動。使用bootm命令時,需要首先使用U-Boot自帶的mkimage命令,將內核映像文件轉換成U-Boot格式映像。即在內核的前頭加上64 B的信息幀頭,供建立tag之用。

bootm命令調用do[CD#*2]bootm函數,這個函數專門用來引導各種操作系統映像,可以支持引導Linux,vxWorks,QNX等操作系統。具體完成的工作有:保存內核引導地址;分析內核幀頭;復制內核映像到SDRAM中;調用do[CD#*2]bootm[CD#*2]linux()函數。

do[CD#*2]bootm[CD#*2]linux()函數是專門引導Linux映像的函數,他還可以處理ramdisk文件系統的映像。具體完成的工作有:

(1) 檢查是否有根文件系統映像文件,這里只用bootm命令引導內核映像;

(2) 將要傳遞給Linux的參數存放到標記列表中,內核將會從此處接收參數,完成參數傳遞;

(3) 調用 Linux內核,系統采用下列代碼來進入內核函數:

第一行代碼將theKernel函數指向內核首地址處;第二行代碼調用theKernel()函數,并通過r0,r1,r2將機器編號和參數鏈表物理地址傳遞給內核。

3 嵌入式目標板介紹

本目標板以AT91RM9200作為微處理器,板上存儲系統包括NOR FLASH,NAND FLASH,SDRAM等;外圍支持設備有JTAG、串口、USB接口、 網絡接口、SD Card 接口及顯示接口等。目標板硬件架構如圖3所示,主要硬件資源如表1所示。

4 U-Boot源碼修改與編譯

根據目標板的配置,主要考慮修改以下U-Boot源碼文件:

(1) include/configs/AT91RM9200dk.h:該頭文件包含了SDRAM的一些設置和定義,主要修改內容包括:定義CONFIG[CD#*2]BOOTBINFUNC宏變量;修改SDRAM大小;修改FLASH大小和扇區數。

(2) board/AT91RM9200dk/FLASH.c:該程序完成的功能包括FLASH初始化、打印FLASH信息、FLAH擦除和FLASH寫入等操作。可在參考已有FLASH驅動的基礎上,結合目標板FLASH數據手冊,進行適當修改。

(3) include/FLASH.h:FLASH程序頭文件,結合目標板修改FLASH型號和ID定義。

U-Boot的源碼通過GCC和Makefile組織編譯。頂層目錄下的Makefile設置開發板的定義,遞歸地調用各級子目錄下的Makefile,把編譯過的程序鏈接成U-Boot映像。

這里上位機操作系統采用Redhat 9.0,交叉工具鏈采用cross-2.95.3。GCC安裝路徑為/usr/loacal/arm/2.95.3,在環境變量PATH中添加相應路徑,就可以直接使用arm-linux-gcc命令。

編譯U-Boot分兩步:第一步配置,執行命令: make at91rm9200dk[CD#*2]config;第二步編譯,執行命令: make。編譯完成,生成3個映像文件system.map,U-Boot,U-Boot.bin,和1個符號表system.map,一般U-Boot.bin最為常用,直接按照二進制格式下載。

使用FLASH燒寫程序將U-Boot.bin燒進NOR FLASH中,目標板重新上電復位后,U-Boot啟動成功,在超級終端會顯示如下啟動信息:

出現Warning的原因是還未設置環境變量,設置環境變量后執行saveenv命令即可去掉Warning。

5 引導內核

U-Boot的最終目的是引導內核啟動。上述僅僅啟動了U-Boot,要引導內核啟動還需要設置環境變量、下載內核和根文件系統映像、執行引導內核啟動命令。假設內核映像文件為zImage,根文件系統映像文件為myramdisk.gz(生成方法略)。具體方法如下:

(1) 啟動目標機,在U-Boot中進行網絡參數等環境變量設置:

這里網絡環境變量設置的目的是為了能夠使用TFTP協議;bootargs用來定義傳遞給Linux內核的命令行參數;Bootcmd定義自動啟動時執行的命令;bootm 10100000表示從0x10100000處引導內核程序。[LL]

(2) 給內核映像加幀頭

在上位機Linux環境下,將U-Boot\\\ools\\\\mkimage.exe COPY 到\\\\bin目錄下,輸入如下命令:

[root@localhost tftpboot]#mkimage-n ′linux-2.6.19′-A arm -O linux-T kernel-C none-a 0x20008000-e 0x20008000-d zImage zImage.img

這里zImage為原始內核映像文件名;zImage.img為生成的加過幀頭的內核映像名。

(3) 加載內核和根文件系統映像到FLASH中

加載zImage.img到0x10100000,加載myramdisk.gz到0x10300000。

至此,我們將UBOOT、內核、根文件系統都下載到FLASH中了,并且設置了環境變量。重啟目標板,等待延時時間結束自動進入本地裝載模式,即可引導內核啟動。

上面講述的是將內核和根文件系統固化到FLASH中的情況,即使用本地加載模式,當以嵌入式產品發布時,BootLoader必須工作在這種模式下。但實際在初期調試的時候,可以在下載操作模式下直接用TFTP命令將這些映像文件下載到SDRAM中,然后用bootm命令從SDRAM中引導。此時在給內核映像加幀頭的時候要注意,bootm xxxx 指定的地址xxxx是否與mkImage命令處的-a指定的加載地址相同。如果不同,mkImage命令的寫法和上面介紹的一致;如果相同,在使用mkImage命令時,-e參數后的入口地址要比-a參數后的存儲地址推后64 B。

6 結 語

U-Boot是一個功能強大的BootLoader開源軟件,他支持上百種開發板和多種嵌入式操作系統,可方便地移植到各種硬件平臺上。目前,筆者移植的U-Boot已成功運行在目標板上,并在此基礎上成功地加載了Linux內核和根文件系統,為后續的驅動和應用開發奠定了基礎。對于不同的CPU和開發板,U-Boot的啟動原理和移植步驟大致相同。希望本文能對學習U-Boot的朋友有所幫助。

參考文獻

[1]張進,姜威.U-Boot的啟動流程及移植[J].國外電子元器件,2005(5):11-14.

[2]孫紀坤,張小泉.嵌入式Linux系統開發技術詳解——基于ARM[M].北京:人民郵電出版社,2006.

[3]焦玉全,黃鄉生,鮑玉軍.U-Boot在S3C2410上的移植[J].電子設計應用,2006(3):126-128.

[4]Karim Yagbmour.構建嵌入式Linux系統[M].北京:中國電力出版社,2004.

作者簡介

周慶松 男,1980年出生,江蘇省儀征市人,碩士研究生。主要從事嵌入式系統的研究和應用。

史小軍 男,1952年出生,教授,碩士生導師。

主站蜘蛛池模板: 欧美一级视频免费| 亚洲美女久久| 久久国产乱子伦视频无卡顿| 色一情一乱一伦一区二区三区小说| 久久精品无码国产一区二区三区| 国产精品亚洲专区一区| 国内精品小视频在线| 国产精品一区在线观看你懂的| 国产精品3p视频| 日韩欧美国产另类| 国产第一福利影院| 三上悠亚一区二区| 久久精品亚洲热综合一区二区| 国产一区二区三区精品欧美日韩| 免费Aⅴ片在线观看蜜芽Tⅴ| 在线人成精品免费视频| 扒开粉嫩的小缝隙喷白浆视频| 国产不卡国语在线| 欧美成人精品一级在线观看| 四虎在线高清无码| 亚洲天堂网视频| 91成人在线免费观看| 中文字幕亚洲另类天堂| 亚洲色图欧美在线| www.日韩三级| 亚洲一级毛片在线观| 在线日韩一区二区| 性欧美在线| 亚洲天堂首页| 国产第一页免费浮力影院| 亚洲无码一区在线观看| 国国产a国产片免费麻豆| 国产成人1024精品| 国产真实乱人视频| 天天色综网| 国产美女精品在线| 亚洲最新地址| 2022精品国偷自产免费观看| 免费看的一级毛片| 国产精品亚洲αv天堂无码| 99re热精品视频国产免费| 欧美在线免费| 极品私人尤物在线精品首页| 亚洲欧美综合精品久久成人网| 一级毛片无毒不卡直接观看| 国产欧美专区在线观看| 亚洲欧美日韩综合二区三区| 久久99国产综合精品女同| 在线看AV天堂| 久久成人免费| 免费毛片a| 亚洲激情区| 亚洲欧美成人在线视频| 91精品国产麻豆国产自产在线| 国产午夜无码专区喷水| 干中文字幕| 日韩黄色在线| 国产高清国内精品福利| 99热这里只有成人精品国产| 亚洲第一精品福利| 夜夜操天天摸| 国产青榴视频| 97国产成人无码精品久久久| 香蕉精品在线| 国产精品手机视频| 国产黄色视频综合| 色亚洲成人| 国产欧美日韩va| 欧美成人a∨视频免费观看| 免费中文字幕在在线不卡| 无码高潮喷水专区久久| 欧美精品v欧洲精品| 国产精品第页| 精品无码国产自产野外拍在线| 88av在线看| 国产欧美日韩18| 国产精品无码影视久久久久久久| 亚洲第一成年网| 久久精品无码一区二区日韩免费| 亚洲熟女中文字幕男人总站| 欧美三级日韩三级| 国产亚洲精品资源在线26u|