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

uCLinux引導程序設計及其在LPC2478上的實現

2010-01-01 00:00:00楊濤,施國梁
電腦知識與技術 2010年6期

摘要:針對NXP LPC2478 ARM處理器,提出了一種uCLinux嵌入式系統引導程序的設計方案。在明確了引導程序必須實現的各種功能之后,給出了實現這些功能的設計方案,詳細說明了如何在由LPC2478所構成的嵌入式應用系統上實現uCLinux嵌入式系統引導程序。此外,對處理器對外擴非易失存儲器NandFlash的控制作了詳盡的說明。此方案在實際的系統環境中運行穩定。

關鍵詞:嵌入式系統;引導程序;LPC2478;uclinux;Nandflash

On the Design of uCLinux's BootLoader with its Implementaion on LPC2478

YANG Tao, SHI Guo-liang

(Institute of Electronic Information Soochow University, Suzhou 215006, China)

Abstract: Presented in this paper is a bootloader scheme and its implementation on NXP LPC2478 ARM MCU. After defining all necessary functions to be included in a bootloader, specific design scheme for these functions are given. Then the implementation of the uclinux embedded operating system bootloader on LPC2478 is discussed in detail. At last, in-depth descriptions of how to control non-volatile NandFlash by MCU are presented.It runs well in the embedded system.

Key words: embedded system; bootloader; LPC2478; uclinux; nandflash

隨著工業自動化與社會信息化水平的不斷提高,嵌入式設備得到了廣泛的應用,越來越多復雜程度較高的嵌入式設備中采用操作系統。uCLinux作為專門為無MMU(Memory Management Unit)處理器設計的嵌入式Linux操作系統[1],支持ARM、Motorola等多種架構的微處理器,加上32位ARM嵌入式處理器高性能、低功耗的出色特性,嵌入式系統中采用ARM+uCLinux的組合具有很好的適應性。在基于ARM+uClinux的嵌入式系統開發中,系統引導程序是成功實現上述應用組合的重要起點,因為實時系統能否正確引導決定了系統能否自舉及自舉后各類應用程序的運行環境能否正確構建。所以,對于系統引導程序的研究是十分必要的。

1 系統引導程序簡介

系統引導程序即BootLoader,是在系統復位后執行的第一段代碼,代碼量小,負責嵌入式操作系統內核的引導和加載[2]。一般來說,它首先完成系統硬件的初始化,包括時鐘的設置、存儲區的映射,設置堆棧指針等,然后跳轉到操作系統內核的入口,將系統控制權交給操作系統。BootLoader的實現高度依賴系統的硬件[2],不同的處理器架構,不同的目標板設備,它的配置是不相同的,因此在研究BootLoader的設計時,系統的硬件平臺是首先要考慮的因素。

2 系統的硬件平臺

本系統的硬件平臺的主要包括恩智浦的微控制器LPC2478,串口, JTAG口,10/100M的以網口,外部擴展一片4M*4Banks*16bit的32M SDRAM和一片256M * 8bit的NandFlash。系統的硬件組成如圖1所示。

主芯片LPC2478基于ARM7TDMI-S的內核,主頻最高為72MHZ,擁有98K片內靜態存儲器,512K片內Flash存儲器;擁有豐富的外設接口,除了圖中的外部存儲器接口,用于程序調試和下載的串口和JTAG口,支持LPC2478的網絡功能的以太網接口, 還包括160個高速通用輸入輸出口,USB設備接口,CAN總線接口,支持配置優先級和向量地址的高級向量中斷控制器,通用直接內存存取控制器,4個32位的定時器,實時時鐘和開門狗等外設接口。基于上面的硬件平臺,系統的軟件平臺包含三個方面:引導程序BootLoader、嵌入式操作系統uCLinux內核、文件系統。BootLoader是操作系統內核uCLinux,文件系統加載的前提,它的作用是不言而喻的。當把系統控制權交給uCLinux之后,系統的運行和BootLoader就沒有任何關系,這表明BootLoader是獨立于uCLinux的。目前在uCLinux的發行包里不包含BootLoader,因此需要專門進行設計。

3 Bootloader的程序設計

在本系統中,引導程序的作用就是引導和加載嵌入式操作系統uCLinux,把系統的軟硬件環境帶到一個合適的狀態。uCLinux的BootLoader的設計主要包括下面幾個方面:

1) uCLinux的固化

將uCLinux操作系統代碼固化在系統的Flash中,其方法很多,主機可以通過JTAG口、以太網接口或串口將uCLinux的映像文件燒寫到系統目標板指定的Flash位置。串口燒寫需要ARM監控程序支持,網口燒寫需要以太網支持,JTAG口的燒寫需要配備一個支持JTAG口的仿真器。本系統采用JTAG口燒寫,利用串口來打印uCLinux調試和運行信息。因此BootLoader需要初始化一條鏈接主機和目標機的串口通道。

2) 系統硬件的初始化

系統剛加電時,uCLinux還沒有被加載,系統硬件的初始化工作全部由BootLoader完成。系統硬件的初始化要明確哪些硬件是uCLinux能夠自舉, BootLoader必須要配置的硬件。跟其它目標板一樣,本系統里的引導程序要初始化的系統硬件相關的部分包括異常向量表建立、LPC2478各種模式下的堆棧空間建立、通用輸入輸出口配置、硬件時鐘建立、使能屏蔽中斷等。

3) uCLinux的加載

uCLinux有兩種運行方式:一種方式是直接在Flash中運行uCLinux自帶的引導程序;另一種方式是將固化在Flash中的uCLinux先拷貝到SDRAM的某一段地址區間,再從該段地址區間的首地址運行uCLinux。uCLinux編譯后目標文件一般可控制在幾百KB量級,加上應用程序,則可達到幾M量級。主芯片LPC2478的片內512k的Flash根本不能滿足uCLinux的存儲要求,所以采用第二種方式,將固化在NandFlash里的uCLinux拷貝到片外的SDRAM的某段地址中,再從該段地址區內運行uCLinux。由此看來,BootLoader除了要完成上面提到的系統硬件初始化,串口通信,還要完成NandFlash和SDRAM的初始化,將uCLinux從NandFlash拷貝到SDRAM。

4) 地址映射表的配置和中斷向量的重映射

所謂地址映射是指對片內和片上的存儲器系統及外部設備進行統一編址并分配地址范圍,應用程序則可根據地址范圍辨識相應的設備。微處理器LPC2478共有4GB的尋址空間,外部設備掛接在兩種內部總線APB(Advanced Peripheral Bus)和AHB(Advanced- High-performance Bus)上,掛在APB總線上的外設稱為APB外設,掛在AHB總線上的外設稱為AHB外設。在上電復位后,LPC2478的存儲器地址空間的映射如圖2所示。

圖2中這些地址范圍是已經設置好的,不能修改只能使用,但跟重映射并不矛盾。重映射的提出是與處理器的異常處理機制相關,LPC2478支持7種異常處理,將所有的異常處理程序的地址保存在一段連續的存儲空間里,稱為異常向量表,它的地址范圍是0x00000000~0x0000003F,這段地址范圍稱為異常向量地址空間。系統一上電,把存儲在片內Flash的異常向量表復制到片內SRAM中,然后通過LPC2478的映射控制器把SRAM中的異常向量表重映射到地址0x0000 0000開始處。這樣,當系統發生異常時,就會從已經映射到異常向量地址空間的片內SRAM中找到對應異常處理程序的入口地址。這么做可以提高系統對異常的實時響應能力和克服易失性存儲器掉電丟失的弊端。

按照上面的論述,下面給出了針對本系統硬件平臺,uCLinux的BootLoader的啟動過程流程圖。

如流程圖3所示, BootLoader的程序設計主要包括以下幾個內容:

1) 設置異常向量表和各模式下的堆棧空間。

2) 建立地址映射表,中斷向量重映射。

3) 目標板初始化。包括時鐘建立、GPIO初始化、中斷向量控制器初始化、UART初始化。

4) 內核的拷貝。包括外部存儲器32MSDRAM和256MNandFlash的讀寫,處理器DMA(Direct Memory Access)方式實現。

BootLoader的程序實現采用匯編語言和C語言混合編程。匯編語言主要完成異常向量表建立,7個模式下的堆棧空間配置,地址映射表配置。C語言完成目標板的初始化和內核的拷貝。目標板初始化包括異常向量表重映射,硬件時鐘建立,通用輸入輸出口配置,中斷向量控制器設置,定時器初始化,串口通信等。內核拷貝與系統的通用DMA控制器和外部存儲器控制器有關, LPC2478擁有一個通用DMA控制器,支持存儲器到存儲器、存儲器到外設、外設到存儲器和外設到外設的數據傳輸。內核的拷貝可以利用這種數據傳輸方式實現外部存儲器NandFlash到外部存儲器SDRAM的數據搬移,通過建立一個DMA的外部中斷程序就可以實現;外部存儲器控制器為LPC2478支持外部靜態存儲器和動態存儲器提供了可能,外部存儲器控制器也稱為EMC(External Memory Control)模塊,它是一個AHB從機模塊,支持多達8個單獨配置的存儲器組,其中靜態存儲器和動態存儲器各4個Bank,靜態存儲器組的每個組存儲容量為16MB,動態存儲器組的每個組的容量為256M。本系統里,主芯片就是通過EMC模塊控制擴展的異步靜態存儲器(NandFlash)和動態存儲器(SDRAM)的,在使用過程中,需要仔細閱讀外擴存儲器芯片資料,獲得準確的配置參數,配置EMC提供的相關寄存器,才能使得外擴存儲器使用正常。由于不同系列的處理器對NandFlash的控制并沒有通用性,因此有必要給LPC2478對NandFlash的控制做一個闡述。

4 NandFlash的軟件和硬件控制

4.1 NandFlash的硬件控制

正如上面講述的,微處理器LPC2478通過EMC模塊來控制NandFlash的操作,主芯片并沒有NandFlash讀寫時需要的直接的硬件接口,它是通過EMC功能模塊給NandFlash提供控制信號,然后通過軟件編程實現LPC2478對NandFlash的控制。圖4給出的是本系統中NandFlash與處理器的硬件連接。

如圖4所示,CE(Chip Enable)片選信號用來選擇NandFlash芯片,由P0口控制;I/O[7:0]是數據輸入輸出口,指令、地址、數據復用,與EMC模塊的數據線連接,提供8位的數據傳輸;WE(Write Enable)寫使能信號,在它的上升沿將I/O上的指令、地址、數據鎖存,由EMC的片選信號CS1和寫信號經過74HC32或門產生;指令CLE(Command LatchEnable)命令鎖存信號,在WE的上升沿并且CLE為高電平時將指令鎖存,由地址線A21控制;R/B(ready/busy)用來顯示NandFlash的操作狀態,當它為高電平時表示有編程、擦除或讀取操作在運行,它連接在P0口上,在運行過程中通過讀取該端口的狀態來判斷NandFlash的操作是否完成;WP(Write Protection)寫保護信號,低電平有效。在軟件模擬中,比較關鍵的就是CLE和ALE的模擬,CLE由地址線A21控制,將它置成高電平,可以實現指令的鎖存,由LPC2478的用戶手冊可知,CS1選擇的靜態存儲器組的地址映射范圍為0x81000000~0x81FFFFFF,所以可以設置一個指針常量*PCLE=0x81200000來實現CLE的控制,ALE的設置類似,這里不再贅述。

除了上述的NandFlash的硬件連接, NandFlash的存儲結構和尋址方式也非常重要。本系統中用的是一款由三星生產的256M * 8bit 的NandFlash芯片8位位寬,工作電壓為3.3V,內部存儲結構為2112bytes*64pages*2048blocks。頁大小為2048Byte+64Byte,前2048(211)byte稱為有效數據域,用來存放要存儲的數據,后64Byte稱為空白域,用來存放ECC數據校驗和芯片信息等。

NandFlash的尋址方式與NandFlash的存儲結構密不可分,256M(228)的NandFlash的尋址理論上需要28個bit,可以用A[27:0]表示,其中2048個byte需要11個bit,用A[10:0]表示稱為column address;64個page需要6個bit,用A[16:11]表示,稱為page address;2048個block需要11個bit,用A[27:17]表示,稱為block address。在NandFlash中,地址只能在I/O[7:0]上傳遞,需要通過移位,進行5次的8位地址傳遞。

上面主要討論了NandFlash的硬件連接,結構和尋址方式,下面要說明的是根據芯片手冊對總線的讀取時序進行設置。軟件模擬時序關鍵在設置正確的時間延遲。EMC模塊為每個靜態存儲器Bank提供了7個靜態存儲器寄存器,寫使能芯片延遲、輸出使能延遲,讀訪問延遲,寫訪問延遲寄存器對數據的讀取影響最大。按照NandFlash芯片手冊,它的寫使能的延遲Twc和輸出使能延遲Trc都至少為30ns[3],寫使能延遲和讀使能延遲配置是以EMC模塊的時鐘頻率為單位的,在本系統中,EMC模塊的時鐘頻率為28.8M,一個時鐘頻率約為30ns,所以Twc/TRc應該至少是一個時鐘頻率,再加上硬件連接上CS和WE信號經過一個或門的延遲,所以可以把Twc設置為3個周期,Trc設置為2個周期。另外兩個比較重要的延遲就是讀訪問延遲和寫訪問延遲,根據NandFlash的讀寫時序可以看出在在讀取數據時,先把一頁的數據從NandFlash的存儲單元傳送到數據緩沖區,等到NandFlash的R/B顯示Ready狀態時,才會開始讀取數據,讀訪問延遲寄存器配置的就是這段時間,按照芯片手冊的數據,這段時間最大約25us[3],所以配置成最大的32個時鐘頻率。如此,NandFlash的時序設置就完成了。

4.2 NandFlash的軟件控制

上面主要介紹了NandFlash的硬件連接,結構,尋址方式和如何正確軟件模擬讀寫時序。下面要討論的是對NandFlash的軟件控制。圖5給出的是本系統設計的NandFlash的程序流程圖,用來測試NandFlash的操作。如圖5所示,一個完整的LPC2478對NandFlash的操作包括NandFlash的ID號的讀寫,塊的擦除,壞塊檢測,頁的讀寫。在程序運行過程中,串口最后能夠輸出NandFlash測試成功,表明NandFlash的運行正常。

5 測試結果與分析

將編譯好的BootLoader燒寫到片內Flash的0x00000000開始的存儲空間內,系統一上電復位后,從入口地址0x00000000開始運行BootLoader,串口輸出一系列的驗證成功信息,基本上算運行成功。對于片內存儲容量為k級的微控制器而言, uCLinux的引導程序設計相對比較繁瑣,工作量比較大。特別是非易失性存儲器NandFlash的控制與燒寫不容易實現,目前通用的燒寫工具對片外NandFlash的支持也很少。為了節省

開發時間,在設計系統的硬件平臺時,尤其是大型的嵌入式系統,可以盡量選擇片內存儲容量M級以上的主芯片,或者選擇目前燒寫支持比較多的外擴存儲器芯片系列。在這個設計里,由于Windows平臺下的集成開發環境Keil不支持uCLinux的編譯,uCLinux的映像文件的固化采用專門的燒寫工具燒寫,因此并不具有普遍的適用性;另外,NandFlash的壞塊檢測只是檢測了它在出廠時含有的壞塊,對于在使用過程中產生的壞塊的管理并沒有涉及,這些都需要在以后的使用過程中繼續完善。

6 結論

本文介紹了一種針對LPC2478的嵌入式系統中uCLinux的引導程序的設計方案,對自己設計BootLoader做了些許嘗試與深入的研究。此方案對于同樣架構和不同架構的微處理器的BootLoader設計,或者現在流行的開源BootLoader的移植都有很大的借鑒作用。

參考文獻:

[1] 桂電-豐寶聯合實驗室.ARM原理與嵌入式應用[M].北京:電子工業出版社,2008:262-264.

[2] Yagbmour K.構建嵌入式Linux系統[M].北京:中國電力出版社,2005:254-256.

[3] SAMSUNG公司.K9F2G08 datasheet[EB/OL].http://www.samsung.com.

[4] 周立功.ARM微控制器基礎與實戰[M].2版.北京:北京航空航天大學出版社,2005.

[5] 張偉,胡晨,張哲.NAND FLASH在WINCE.NET系統中的應用設計[D].南京:東南大學,2006.

[6] NXP公司.LPC2478 User Manual[EB/OL].http://www.nxp.com.

主站蜘蛛池模板: 国产XXXX做受性欧美88| 久久精品人人做人人| 国产精品欧美亚洲韩国日本不卡| 亚洲中文字幕国产av| 中国国产A一级毛片| 国产精品视频公开费视频| 亚洲免费福利视频| 一本大道无码高清| 操国产美女| 久久五月视频| 色屁屁一区二区三区视频国产| 国产精品hd在线播放| av在线手机播放| 又黄又湿又爽的视频| 欧美日在线观看| 久久青青草原亚洲av无码| 中文字幕波多野不卡一区| 毛片视频网址| 亚洲乱伦视频| 国产成人乱无码视频| 激情综合网址| 国产精品主播| 国产成人精品一区二区三在线观看| 国产网友愉拍精品视频| 中文字幕欧美日韩| 99资源在线| 午夜丁香婷婷| 在线免费不卡视频| 永久免费无码成人网站| 999福利激情视频| 欧美精品二区| 色偷偷综合网| 国产乱码精品一区二区三区中文| 无码综合天天久久综合网| 亚洲天堂免费观看| 综合色在线| 四虎亚洲精品| 成人精品视频一区二区在线| 国产伦片中文免费观看| 国产精品一区二区在线播放| 日本91在线| 国产爽妇精品| 国产嫖妓91东北老熟女久久一| 97超碰精品成人国产| 日日噜噜夜夜狠狠视频| 99久久无色码中文字幕| 日本一本在线视频| 国产精品白浆在线播放| 永久免费无码日韩视频| 18黑白丝水手服自慰喷水网站| 中文字幕乱码二三区免费| 欧美综合一区二区三区| 91国内在线观看| 欧美日在线观看| 欧美日韩福利| 亚洲色欲色欲www网| 亚洲美女AV免费一区| 亚洲无码高清免费视频亚洲| 亚洲无码在线午夜电影| 手机精品福利在线观看| 国产亚洲精品无码专| 国产丝袜无码一区二区视频| 免费女人18毛片a级毛片视频| 精品国产乱码久久久久久一区二区| 久久综合结合久久狠狠狠97色| 国内精自线i品一区202| 亚洲va欧美va国产综合下载| 欧美亚洲国产精品第一页| 亚洲男人的天堂在线| 人妻91无码色偷偷色噜噜噜| 国产午夜福利在线小视频| 久久精品国产精品青草app| 中文字幕欧美成人免费| 国产激情无码一区二区三区免费| 国产精选自拍| 成人精品视频一区二区在线| 99青青青精品视频在线| 国产精品大尺度尺度视频| 午夜毛片免费观看视频 | 国产中文一区a级毛片视频| 香蕉网久久| 亚洲国产精品无码久久一线|