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

具有多重下載接口的Bootloader設計

2007-12-31 00:00:00靳榮浩
計算機應用研究 2007年12期

摘要:介紹了具有多重引導加載方式的嵌入式操作系統引導程序——Bootloader的概念和作用。在基于AT91RM9200處理器的嵌入式系統開發平臺上,以加載ARM-Linux操作系統內核為例,闡述了通過三種常用通信接口(串口、網口和USB接口)實現文件下載功能的軟件設計方法。

關鍵詞:Bootloader; AT91RM9200; ADS; 下載接口; 嵌入式系統

中圖分類號:TP368.1文獻標志碼:A

文章編號:1001-3695(2007)12-0210-04

在嵌入式系統的開發中,嵌入式軟件是實現各種系統功能的關鍵,也是計算機技術最活躍的研究方向之一。Bootloader常常是嵌入式系統開發中可能遇到的第一個技術難點。應用程序運行環境能否正確構建,內核能否啟動成功,都取決于Bootloader能否正確工作。一個功能完善的嵌入式系統Bootloader還要求能夠提供不同實驗條件下的下載方式、系統更新的能力,以及相應的命令控制臺。本文將以華恒科技公司的HHAT91RM9200-K1開發板為硬件平臺,以ARM公司的ARM開發軟件ADS為開發環境,闡述Bootloader的運行原理與實現分析。

1系統組成

典型的ARM嵌入式系統硬件平臺一般包括一個以ARM為內核的處理器、存儲器和必要的外部接口與設備。在本系統中,采用內嵌ARM920T核的ATMEL公司的AT91RM9200處理器,工作頻率180 MHz,CPU內置128 KB ROM和16 KB RAM,外部存儲器使用64 MB的SDRAM和16 MB的flash,外圍接口除了用于下載和通信的RS-232標準接口、10/100 Mbps自適應以太網接口、USB 1.1全速(12 Mbps)接口外,還有LCD接口、IEEE 1149.1 JTAG 標準掃描接口等[1]

軟件平臺由以下幾部分組成:Bootloader、嵌入式操作系統內核(kernel)和文件系統(file system)。其中:嵌入式操作系統內核是嵌入式系統加電運行后的管理平臺,負責實時性任務和多任務的管理[2];文件系統是嵌入式系統軟件平臺占用存儲量最大的一部分,也是與用戶開發最相關的一部分;它存儲了系統配置文件、系統程序、用戶應用程序等[3]。本例中固態存儲設備(flash)中同時裝有Bootloader(stage1、stage2)、內核映像(kernel zImage)、根文件系統映像(ramdisk.image.gz),以及其他類型文件系統(如jffs2、cramfs等)的空間分配結構圖,如圖1所示。其中在stage2中定義了內核啟動的參數列表。

2Bootloader固件程序設計

系統加電或復位后,所有的CPU通常都從某個由CPU制造商預先安排的地址(通常為0x0)上取指令。AT91RM9200處理器支持從外部的DATAFLASH、兩線E2PROM或8 bit并行存儲器引導啟動和從內部的BOOTROM引導啟動兩種模式。這兩種引導啟動模式取決于boot mode select(引導模式選擇BMS)引腳狀態。在地址0x0上的存儲器映射關系為:若BMS=1,則將CPU片內ROM在內部存儲器域1的數據映射至內部存儲器域0,即從內部ROM啟動;BMS=0,外部存儲器域0,從地址0x10000000訪問,同時也可通過內部存儲器域0訪問[1],即從外部存儲器啟動。

BMS=1進行啟動時,會在內部存儲域0和1中具有完全相同的代碼,即執行處理器片內ROM固化的啟動程序。它主要包括兩大部分,即Bootloader和Boot Uploader[4]。關于AT91RM9200處理器的內部啟動機制請參閱參考文獻[4]。

BMS=0進行啟動即外部存儲器啟動模式下,在系統加電或復位時,CPU就會從內部存儲域0所映射的flash零地址0×10000000處讀取第一條指令。Bootloader程序正是被燒錄或者下載到固態存儲設備的0x0地址處,因此系統在加電或復位后,CPU將會首先執行Bootloader程序。

由于Bootloader的實現嚴重依賴于CPU的體系結構,Bootloader功能的實現基本上可分為stage1和stage2兩大部分,分別運行于系統的ROM和RAM中[5]。在本系統中由于AT91RM9200處理器的片內RAM僅為16 KB,將整個Bootloa-der程序分為9200 boot(stage1)和9200 btld(stage2)兩部分。依賴于CPU體系結構的代碼9200 boot燒寫在flash的0x0地址處,基本上都用匯編語言來實現。這部分代碼在ADS1.2下編譯后的大小為5 KB,小于片內RAM空間。其功能較簡單,除了完成中斷向量的安裝、特權模式下工作、禁止所有中斷、堆棧指針寄存器初始化、外部存儲器SDRAM、flash以及調試串口初始化外,主要負責將緊跟其后的9200 btld從flash中拷貝到SDRAM指定地址并跳轉到9200 btld入口處繼續運行,以提高系統的運行效率和實現更多的功能。9200 btld是在ATMEL的開源軟件項目AT91RM9200-BasicBoot的基礎上擴展實現的功能更加強大的一個比較完整的Bootloader。除了實現9200 boot中的設備初始化功能外,還實現了讀寫SDRAM、flash、串口Kermit協議下載、以太網口TFTP協議下載、USB接口Bulk-only協議下載(虛擬RAM盤功能)、傳遞內核參數以及用戶交互界面等復雜的功能。與CPU體系結構無關的代碼均用C語言實現,具有較好的可讀性和可移植性。9200 btld的運行流程如圖2所示。

2.1AT91RM9200 C-Startup

嵌入式軟件的大部分應用程序代碼均使用C語言編寫,以提高模塊性和可移植性。在調用C代碼之前應用程序的入口點必須執行一些初始化的任務。C-Startup[6]是系統上電后的第一個可執行文件(固化在flash的零地址處),它完成從重設異常向量表到調用應用程序主程序前針對微控制器的一系列初始化工作。圖2虛線左側為程序流程。依次主要執行以下步驟:

a)用偽指令AREA定義只讀的代碼段;EXPORT偽指令申明_start可被其他文件應用,相當于申明一個全局變量。_start指出了程序的入口點。

b)建立中斷向量表,當程序出現異常后可跳轉到相應子程序執行。本例中對應代碼如下:

AREAreset,CODE,READONLY

EXPORT_start

_start

BInitreset

Undefvec

BUndefvec

Swivec

BSwivec

Pabtvec

BPabtvec

Dabtvec

BDabtvec

Rsvdvec

BRsvdvec

irqvec

ldrpc, [pc,#-0xF20]

fiqvec

Bfiqvec

Initreset(以下代碼較長,篇幅所限,從略)

;-Setup the stack for each mode

;-Low level Init (APMC, AIC, EBI,…)

;-Initialise C variables

;-Branch on C code Main function (with interworking)

c)進入超級管理模式,屏蔽所有中斷及子中斷;設置各種工作模式下的堆棧指針寄存器及系統所需堆棧區的初始化。

d)系統關鍵外圍及I/O設備初始化,包括高級電源管理控制器、系統主頻及鎖相環設置、高級中斷控制器及調試串口(時鐘、波特率等)初始化。

e)重新設置中斷向量表,完成從ROM到RAM的映射;初始化C代碼運行所需的環境變量(如RO、RW及ZI這三個數據塊加載域和運行域的設置)。

f)跳轉到9200 btld的C入口點start_armboot()處,進一步實現用戶所需的各種功能。

2.2主要功能模塊介紹

2.2.1板級設備初始化

板級資源的初始化,本階段所實現函數主要包括:AT91F_SetMemoryLimit()實現ROM代碼到RAM的映射;memset()設置全局變量bd數據結構;cpu_init(),即CPU及開發板相關(如體系ID、內核啟動參數位置)設置;env_init()設置默認環境變量(如MAC、IP地址等);serial_init()串口通信相關設置(如波特率、收/發字符等);interrupt_init()中斷及計時器等設置;dram_init();flash_init()外部存儲器sdram和flash的初始化;display_banner()在終端顯示啟動流程信息;devices_init ();console_init_r()字符設備(LCD、Keyboard等)及控制臺初始化,以便于用戶通過PC機終端軟件顯示和鍵盤輸入相應指令實現與目標板的交互;enable_interrupts()使能中斷;boot()進入人機交互菜單界面,執行所選擇的項目,主要包括命令行操作模式、讀/寫內存、flash讀/寫相關操作、選擇啟動/下載方式、引導操作系統等操作。

2.2.2下載接口實現

在嵌入式系統軟件開發過程中,開發人員必須要解決的問題就是如何把嵌入式操作系統(如Linux)、文件系統及用戶應用程序移植到特定的嵌入式硬件平臺上去運行,即宿主機與開發板之間的通信問題。通信接口在實現嵌入式軟件平臺的整個移植過程中起著非常重要的橋梁紐帶作用。常見的嵌入式通信接口主要包括串行口、以太網接口、USB接口、JTAG接口,一些高級的嵌入式平臺還增加了紅外、藍牙等無線通信接口。本系統中,前期在線調試階段主要采用JTAG接口下載調試代碼,在ADS1.2下分別利用三種常用通信接口(串口、網口、USB口)實現了從宿主機到目標板的文件傳輸功能。

1)串口下載實現

常見的嵌入式系統的開發平臺大都以串行口作為調試和下載目標代碼的接口。通用串行口的優點是簡單易用,幾乎所有的嵌入式處理器都有1、2個串口;但最大的缺點是速度太慢。在本系統中,串口下載協議采用Kermit文件運輸協議。該運輸協議是用于在PC之間交換文件的一種簡單的文件運輸協議。當在終端的命令行模式下輸入loadb load_address(如20000000為SDRAM零地址),開發板上的這段固件程序將準備好以Kermit協議接收文件,用戶在通過超級終端的文件發送功能選定要下載的文件并選擇Kermit協議即可完成下載。如果傳輸出錯則會顯示警告信息并提示重新下載。實現功能函數如下:serial_setbrg()設置串口傳輸波特率(本例中設為115 200 bps);addr=load_serial_bin()根據用戶輸入的地址偏移信息(load_address)下載二進制映像文件到相應地址。其中:load_serial_bin()包括set_kerm_bin_mode()設置Kermit協議下載文件的保存地址及文件類型格式(.bin);k_recv()設置一些協議命令參數及接收數據狀態機等(如start、send、data、ACK、NACK、break、end等)約定信息。此外,用到的函數有handle_send_packet()對發送包的處理(接收、應答、不確認等信號的發送),以及serial_getc()、serial_putc()串口收/發字符等子程序。

2)網口下載實現

通過網絡接口下載映像文件是嵌入式系統中通常采用的一種通信方式。目前一些開源的通用Bootloader(如U-boot)中大都實現了通過網絡接口傳輸文件的功能。在本系統中采用的物理層網絡芯片是LXT971A[7]。LXT971A是Intel公司推出的網絡通信接口電路,它符合IEEE標準,直接支持10/100 Mbps雙絞線應用,也支持100 Mbps光纖接口;該電路提供的MII接口能很好地符合10/100MACs[8]。AT91RM9200處理器內部集成的以太網控制器與LXT971A的接口采用標準的MII接口,通過MII接口初始化LXT971A。傳輸協議采用TFTP(trivial file transfer protocol)簡單文件傳輸協議[9]。它是一種用來傳輸文件的簡單協議,使用的是UDP(user datagram protocol)的69端口。

主要功能函數包括at91rm9200_ether.c實現以太網通信的初始化工作。eth_init()以太網初始化:a)對AT91RM9200的以太網控制器模塊EMAC(Ethernet media access control)的控制寄存器EMDIO、以太網接收/發送MII接口相關PIO寄存器(如ETXCK:發送時鐘,ECRS:載波監聽,ECOL:沖突檢測,ERXDV:數據有效,ERX0-ERX3:4 bit數據接收,ERXCK:接收錯誤,ERXCK:接收時鐘,ETXEN:發送使能,ETX0-ETX3:4 bit數據發送,ETXER:發送錯誤等)的設置。b)at91rm9200_GetPhyInterface()完成LXT971A在使用之前的初始化工作;eth_send()實現以太網數據包的發送;eth_rx()實現以太網數據包的接收;eth_halt()關閉網絡設備。net.c, bootp.c,rarp.c及tftp.c等功能函數主要實現對以太網地址、網關、子網掩碼及TFTP服務器IP地址的配置,ARP請求,超時檢測及ARP/RARP分組格式定義,IP、ICMP及UDP數據包格式定義,BOOTP、ARP/RARP及TFTP協議的實現。這里與網絡協議有關的部分參考U-boot實現。U-boot是由Open Source Community支持的項目,它是由GPL License保護的。可以從它的官方網站上下載到最新的所有的源程序。至此就可以在終端顯示的命令提示符下輸入:tftp address application.bin(下載程序到目標板的對應地址),實現了基于TFTP的網絡接口下載功能。

3)USB接口下載實現

目前,業界利用以USB接口為嵌入式系統開發板提供文件下載功能的還不多見。從速度上講,采用10 Mbps以太網與USB1.1(12Mbps)差不多。但使用以太網需要配置目標板的IP地址,需要連接集線器接入局域網,還需要PC機上運行TFTP的服務軟件。相比之下,使用USB接口就簡單多了:即插即用、自動識別設備、在Windows下使用瀏覽器即可直接傳送文件。本系統采用AT91RM9200的USB設備端口UDP(USB device port)作為USB下載接口。UDP符合USB1.1設備規范,內置USB1.1全速收發器,端點內置雙端RAM,具有掛起和恢復邏輯等[1]。AT91RM9200的USB控制器提供了八個端點,分別是端點0~7。除了端點0保留做控制外,端點1~7均可配置為中斷、等時或批傳輸方式,支持全速12 Mbps的傳輸速度和8、16、32、64 Byte的包長度。工作方式可選擇查詢、中斷(本例中采用中斷方式)或DMA傳輸方式。USB控制器的工作原理可以簡單地描述為:當USB控制器從USB總線檢測到主機啟動的某一傳輸請求時,USB控制器將相應標志位置。如果配置為中斷方式,則向中斷控制器請求中斷。軟件通過訪問USB控制器的狀態寄存器和數據寄存器獲得與此次傳輸有關的各種參數,并根據參數對USB控制器的控制寄存器和數據寄存器進行相應的操作,以完成主機的傳輸請求[10]

各種USB設備的工作過程在USB標準1.1中有詳細的描述,在此不再敘述。本例中采用批傳輸(bulk-only transactions)方式,類型為海量存儲(mass storage)設備類的SCSI類。USB下載實現流程:a)初始化USB控制器,對應功能函數為usb_mian.c、USBCTL.c、UDP_USBIN_WR.s、USBIN.c、UDP_USBOUT_RD.s、USBOUT.c、enumerate.c,主要包括設定USB時鐘(48 MHz),配置端點0、1、2分別為控制、批傳輸發送、批傳輸接收端點,USB設備總線枚舉,使PC機能夠識別USB設備。b)將開發平臺上的SDRAM格式化為FAT16格式的文件系統,填充引導扇區和FAT表,對應fat16.c和scsi_arm9200.c功能函數。在系統中,劃分了32 MB的SDRAM作為RAM盤,共65 536(0x10000)個扇區,可滿足嵌入式系統一般應用。如果此時設備已經連接到了USB總線上,USB控制器將自動與主機完成總線枚舉過程。在總線枚舉過程結束后,主機首先會發送配置請求包,設備將自己的種類、子類、端點配置信息報告給主機。如果設備是第一次連接到主機,Windows XP將顯示發現USB設備并查找相應驅動程序,同時更新系統注冊表。配置過程結束后,主機會發命令要求設備報告容量,以扇區為單位,并讀出RAM盤的引導扇區。如果無誤的話,在Windows XP的資源管理器上就會出現新設備的驅動器圖標。隨后,在資源管理器中就可以直接拷貝和拖動文件了。主機會向設備發送寫扇區命令,設備將數據拷貝到RAM盤中對應的地址。拷貝過程結束后,在資源管理器的驅動器圖標處擊右鍵,選擇彈出設備,設備收到命令后會終止USB連接并返回到用戶菜單界面。c)將RAM盤中的數據寫入flash中,完成了程序代碼下載和寫入的過程。

2.3設置內核啟動參數及調用內核

通信信道建立后,用戶可以通過不同的通信接口將內核映像和根文件系統映像等下載/拷貝到開發板的sdram空間中,在功能函數armlinux.c中首先要設置好Linux內核的啟動參數,如ATAG_CORE、ATAG_CMDLINE、ATAG_MEM、ATAG_INITRD、ATAG_RAMDISK、ATAG_NONE等;然后就可以啟動Linux內核了。Bootloader調用Linux內核的方法是直接跳轉到內核的第一條指令處,也即直接跳轉到0x23000000地址處。此時,還需要設置CPU寄存器、CPU模式、cache和MMU等。

3結束語

Bootloader是依賴于硬件而實現的,每個目標板的硬件配置都不完全相同,因此Bootloader程序也都不會完全一樣。本文以華恒科技的AT91RM9200開發板為硬件平臺,闡述了具有多種下載接口的Bootloader運行的主要步驟和關鍵技術,為實現引導Linux操作系統內核運行提供合適的環境。三種常用通信接口在嵌入式系統中的實現,可滿足不同使用場合和實驗環境的用戶需求。2.3節中關于Linux內核啟動參數的具體設置及如何調用內核與具體操作系統密切關系,未作詳細論述。此外,設計與實現一個功能強大的優秀的Bootloader程序是一個龐大復雜的過程,在程序中如能多利用ADS所提供的各類工具,將是幫助調試的好方法。

參考文獻:

[1]ATMEL. ARM920T-based microcontroller AT91RM9200[K].San Francisco:Atmel Corporation,2003.

[2]王亞軍,劉金剛. Linux運用于嵌入式系統的技術分析[J].計算機應用研究, 2005,22(5):102-104,128.

[3]劉晶晶.基于ARM-Linux嵌入式系統引導程序的設計[J].微計算機信息, 2006,22(2):123-125.

[4]王文君,申振寧,劉軼群.AT91RM9200處理器的內部啟動機制[J].大眾科技, 2005(1):48-49,54.

[5]詹榮開.嵌入式Bootloader技術內幕[EB/OL].[2006-09-20].http://www-128.ibm.com/developerworks/cn/linux/l-loader/.

[6]ATMEL. AT91 C-startup[EB/OL].[2006-05-20.].http://www.at91.com.

[7]Intel. Intel LXT971A Dual-speed fast Ethernet transceiver[K].[S.l.]:Intel Corporation, 2002.

[8]楊悅梅,何丹.基于LXT971A的嵌入式系統的網絡通訊設計[J].國外電子元器件, 2005(9):22-25.

[9]SOLLINS K. The TFTP protocol[EB/OL].[2006-09-21].http://www.javvin.com/protocol/rfc1350.pdf.

[10]許慶豐.為嵌入式系統開發平臺增加USB下載接口[J].電子產品世界,2002(19):22-28.

“本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文”

主站蜘蛛池模板: 天天干天天色综合网| 性视频一区| 麻豆a级片| 国产情侣一区二区三区| 久久国产精品嫖妓| 久久精品最新免费国产成人| 青青草原国产av福利网站| 在线免费观看AV| 不卡无码h在线观看| 国产青榴视频在线观看网站| 亚洲国产日韩在线观看| 精品一区国产精品| 久一在线视频| a亚洲天堂| 亚洲色中色| 亚洲综合在线最大成人| 九九九久久国产精品| 国产成人精品综合| 久久99国产综合精品1| 国产成人精品免费av| 日韩人妻无码制服丝袜视频| 国产免费怡红院视频| 国产精品污污在线观看网站| 久久www视频| 99热精品久久| 国产SUV精品一区二区6| 最新国产午夜精品视频成人| 久久这里只有精品66| 日韩欧美视频第一区在线观看| 日韩高清在线观看不卡一区二区| 毛片在线播放a| 波多野结衣无码AV在线| 91色在线观看| 欧美成人一区午夜福利在线| 国产精品视频导航| jizz国产在线| 久久亚洲高清国产| 欧美成人怡春院在线激情| 九九九国产| 好吊色国产欧美日韩免费观看| 一级爱做片免费观看久久| 欧美日韩一区二区在线播放 | 国产精品无码AⅤ在线观看播放| 国产成人亚洲综合A∨在线播放| 激情综合激情| 精品国产免费人成在线观看| 日韩精品专区免费无码aⅴ| 久久久黄色片| 亚洲综合色婷婷| 国产欧美综合在线观看第七页| 九九热这里只有国产精品| 国产成人亚洲毛片| 国产拍揄自揄精品视频网站| 动漫精品啪啪一区二区三区| 国产精品刺激对白在线| 理论片一区| 四虎综合网| 欧美亚洲国产日韩电影在线| 亚洲天堂2014| 中文字幕人成乱码熟女免费| 精品视频在线观看你懂的一区| 国产精品对白刺激| 亚洲无码日韩一区| 久久伊伊香蕉综合精品| av一区二区三区在线观看| 亚洲综合第一页| 亚洲av无码片一区二区三区| 婷婷色一区二区三区| 国产精品久久久久久影院| 波多野结衣中文字幕一区| 男女猛烈无遮挡午夜视频| 亚洲经典在线中文字幕| 亚洲欧美综合另类图片小说区| 国产精品美女自慰喷水| 日韩午夜片| 亚洲人成亚洲精品| 午夜小视频在线| 2021国产精品自拍| 波多野结衣的av一区二区三区| 欧美亚洲国产一区| 无码有码中文字幕| V一区无码内射国产|