国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

關于三星S3C44B0X目標板的uClinux Bootloader

發布時間:2010-7-7 09:59    發布者:zealot
uClinux是為控制領域設計的嵌入式Linux操作系統,它沿襲了主流Linux的大部分特性,并進行了一定幅度的裁減。其設計主要針對沒有內存管理單元(MMU)的微處理器,例如基于ARM7TDMI內核的S3C44B0X。

嵌入式Linux系統通常由三部份組成:Bootloader、Kernel和File System。其中Bootloader是在系統啟動之后、Kernel運行之前所執行的第一段代碼,其任務是為調用Kernel準備必要的軟硬件環境。由此可見,Bootloader是非常依賴于硬件和操作系統的。所謂依賴于硬件,是指Bootloader的實現與處理器體系架構和板級硬件資源密切相關;所謂依賴于操作系統,是指不同操作系統的內核對調用方式和運行環境有不同的要求。

理論上,uClinux在引導時并非一定需要一個獨立于Kernel Image的Bootloader Image。然而將Bootloader與Kernel分開設計能夠使軟件架構更加清晰,也有助于靈活地支持多種引導方式,實現必要的輔助功能。uClinux Bootloader的主要任務可概括如下:

       ● 引導和初始化
       ● 加載uClinux Kernel
       ● 設置內核啟動參數
       ● 調用uClinux Kernel
       ● 輔助功能:文件下載、Flash燒寫、人機界面等

對于常見架構的處理器,一般都能找到現成的Bootloader,但其結構往往較為復雜,且仍需要針對具體的目標板進行移植。當然,也可以選擇自行開發Bootloader。由于Bootloader Image在物理上獨立于Kernel Image,因此不一定跟隨Linux選用GNU作為開發工具。對于ARM處理器,完全可以使用ADS或RVDS等集成環境來開發Bootloader。

1.引導和初始化

1.1 硬件初始化階段一
      
S3C44B0X在上電或復位后,程序從位于地址0x0的Reset Exception Vector處開始執行,因此需要在這里放置Bootloader的第一條指令:b ResetHandler,跳轉到標號ResetHandler處進行第一階段的硬件初始化,主要內容為:關WDT,關中斷,配置PLL和時鐘,初始化Memory Controller。這里比較重要的是配置PLL的輸出頻率,S3C44B0X最高能夠支持66MHz;如果目標板上使用DRAM/SDRAM,應當據此計算刷新頻率等相關參數。

1.2 建立異常向量表
      

ARM7TDMI內核規定:包括Reset Exception Vector在內的異常向量表的基地址是0x0,所以存放Bootloader的Flash基地址也必須是0x0;而S3C44B0X處理器又不支持Remap,這意味著一旦發生中斷,程序就要跳轉到Flash中的異常向量表(中斷屬于異常的一種)。uClinux會在RAM里建立自己的二級異常向量表(基地址缺省為0x0C000000);所以編寫Bootloader時,0x0處的一級異常向量表只需簡單地包含向二級異常向量表的跳轉:       b ResetHandler  ;Reset Handler   
       ldr pc,=0x0c000004 ;Undefined Instruction Handler   
       ldr pc,=0x0c000008 ;Software Interrupt Handler   
       ldr pc,=0x0c00000c ;Prefetch Abort Handler   
       ldr pc,=0x0c000010 ;Data Abort Handler   
       b .   ;Reserved   
       ldr pc,=0x0c000018 ;IRQ Handler
       ldr pc,=0x0c00001c ;FIQ Handler

如果在Bootloader運行過程中不必響應中斷,那么上面的配置已能滿足要求。如果某些Bootloader功能要求使用中斷(例如用Timer Interrupt實現精確定時),那么Bootloader必須在同樣的位置建立自己的二級異常向量表,以便同uClinux保持一致。這張表應存放在Flash中,并由Bootloader復制到RAM地址0x0C000000處。

1.3 初始化各種處理器模式
      
ARM7TDMI內核支持7種處理器模式:User,FIQ,IRQ,Supervisor,Abort,System和Undefined。Bootloader需要依次切換到每種模式,初始化該模式的程序狀態寄存器(SPSR)和堆棧指針(SP)。S3C44B0X在上電或復位后處于Supervisor模式;本步驟中應該在最后切換回Supervisor模式,即Bootloader后續部份仍將運行在Supervisor模式下。

1.4 section重定位
      
對于ADS或RVDS等開發工具,一個ARM程序通常由RO、RW和ZI三個section組成,其中RO是代碼和常量,RW是已初始化的全局變量,ZI是未初始化的全局變量(在GNU中對應的概念是TEXT、DATA和BSS)。RO代碼既可以在Flash中運行,也可以在RAM中運行。考慮到Bootloader可能需要燒寫Flash,而燒寫時處理器無法從Flash中讀取指令,因此應將RO和RW復制到RAM中,并將ZI清零。RO復制完畢之后,程序就可以跳轉到RAM中運行。若不考慮燒寫Flash,則Bootloader不必復制RO,程序始終在Flash中運行。

1.5 填寫中斷向量表
      
中斷向量表一般位于RAM地址的最高端,存放著各個ISR的入口地址。由于IRQ Exception為全部中斷所共用,因此必須在IRQ Exception服務例程中根據中斷狀態寄存器來判斷中斷源并調用相應的ISR。各個ISR的入口地址需要在這一步里填寫。

另外,S3C44B0X的中斷控制器支持Vectored和Non-Vectored兩種中斷處理模式,其中前者是Samsung自行開發的模式,并不被大多數ARM處理器所支持?紤]到代碼的可移植性,上面只討論了Non-Vectored Mode。

1.6 硬件初始化階段二
      
遵循“必要”原則繼續對硬件資源進行初始化,包括S3C44B0X內置的GPIO、Cache、中斷控制器和UART等。Bootloader中暫未用到的設備可以留待使用之前再進行初始化。

S3C44B0X內置有數據/指令合一的8KB Cache,且允許按照地址范圍設置兩個Non-Cacheable的區間。合理的配置是打開對RAM地址區間的Cache,關閉對其它地址區間的Cache,以避免可能存在的Cache一致性問題。

1.7 建立人機界面
      
引導過程的最后一步是在串行終端上建立人機交互界面。常見的做法是先等待固定的時間,若未接收到用戶輸入,則直接從Flash中加載或調用uClinux Kernel;若接收到用戶輸入,則顯示菜單模式或命令行模式的交互界面,并等待進一步的命令。

2. 加載uClinux Kernel
      
Bootloader是否需要執行加載操作,取決于uClinux Kernel Image的類型。根據不同的配置方式,可以生成以下幾種uClinux Kernel Image:

2.1 非壓縮,非XIP
      
XIP(eXecute In Place)是指在存放代碼的位置上就地運行程序;而非XIP就是指在運行之前需要對代碼進行重定位。該類型的uClinux Kernel Image以非壓縮格式存放在Flash中,需由Bootloader加載到RAM然后調用。該類型在開發調試階段最為常用。

2.2 非壓縮,XIP
      
該類型的uClinux Kernel Image以非壓縮格式存放在Flash中,不需加載,由Bootloader直接調用。復制Data段和清零BSS段的工作由Kernel自行完成。該類型常用于RAM空間非常有限的系統中,缺點是程序在Flash中運行的速度稍慢。

2.3 RAM自解壓
      
壓縮格式的uClinux Kernel Image由開頭的一段自解壓代碼和其后的壓縮數據組成。由于是以壓縮格式存放,因此Kernel只能以非XIP方式運行。RAM自解壓的uClinux Kernel Image存放在Flash中,由Bootloader加載到RAM中的臨時空間,然后調用自解壓代碼。Kernel被解壓到最終的目標空間然后運行;壓縮鏡像所占據的臨時空間在隨后由uClinux回收利用。該類型占用Flash較少,且運行速度較快,在最終產品中更為常見。

2.4 ROM自解壓
      
解壓縮代碼也能夠以XIP的方式在Flash中運行。ROM自解壓的uClinux Kernel Image存放在Flash中,不需加載,由Bootloader直接調用其自解壓代碼,將uClinux Kernel解壓到最終的目標空間并運行之。與RAM自解壓相比,ROM自解壓并不真正節省RAM,而且解壓縮的速度較慢,因此實用價值不大。

3.設置內核啟動參數
      
Linux 2.4版本以后的內核都期望以標記列表(tagged list)的形式來接收啟動參數。每個標記存放在一個tag結構中,每個tag結構由標識被傳遞參數的tag_header結構以及隨后的參數值組成。通常由Bootloader設置的啟動參數有:ATAG_MEM、ATAG_CMDLINE、ATAG_SERIAL等。啟動參數的標記列表以ATAG_CORE開始,以ATAG_NONE結束,代碼示例如下。其中0x0C000100是內核啟動參數在RAM中的基地址,Bootloader應當將要傳遞的啟動參數復制到該處RAM中;指針params的類型是struct tag。宏tag_next()以指向當前標記的指針為參數,計算下一個標記的起始地址。     paRAMs = (struct tag *)0x0C000100;
       params->hdr.tag = ATAG_CORE;
       params->hdr.size = tag_size(tag_core);
       params->u.core.flags = 0;
       params->u.core.pagesize = 0;
       params->u.core.rootdev = 0;
       params = tag_next(params);
       params->hdr.tag = ATAG_NONE;
       params->hdr.size = 0;

對應地,在Linux內核源碼arch/armnommu/mach-s3c44b0/arch.c中設置內核啟動參數在RAM中的基地址:
       MACHINE_START (S3C44B0, "44B0")      
       BOOT_PARAMS (0x0C000100)      
       MACHINE_END

4.調用uClinux Kernel
      

Bootloader調用Kernel的方法是直接跳轉到其第一條指令處。對于ARM處理器,在跳轉時應當滿足下列條件:r0=0;r1=Machine ID;禁止IRQ和FIQ;處理器運行在Supervisor模式;關閉MMU;關閉Data Cache。

對于S3C44B0X,它沒有MMU,其Cache是指令與數據合一的,因此只能全部關閉。各種ARM處理器的Machine ID均由www.arm.linux.org.uk分配;S3C44B0X的Machine ID是178。據此,用C代碼實現的Kernel調用示例如下,其中r0和r1的值通過參數傳遞:
       void (*CallKernel)(int zero, int mach) = (void (*)(int, int))KERNEL_ADDR;
       CallKernel(0, 178);

5. 輔助功能
      
完整的Bootloader還應該允許更新Flash中存放的uClinux Kernel Image以及Bootloader自身。為此,必要的輔助功能包括:從主機下載文件到目標板的RAM;用RAM中的數據燒寫Flash;以及實現上述操作所需的人機交互接口,這里就不贅述了。
本文地址:http://m.qingdxww.cn/thread-14620-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 實時控制解決方案的正確選擇——數字信號控制器(DSC)或通用MCU
  • PIC32CK SG單片機——輕松滿足新型網絡安全要求
  • dsPIC® DSC集成電機驅動器:非常適合在緊湊空間內進行實時控制
  • PIC32CM LS00 Curiosity Pro評估工具包
  • 貿澤電子(Mouser)專區

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美专区日韩| 日韩一区二区三区在线| 亚洲快播| 热99久久| 亚洲男女视频| 亚洲第一成人在线| 日本不卡高清免费v| 亚洲国内自拍| 日产一区日产片| 欧美福利视频导航| 欧美成人天天综合在线视色| 亚洲国产精品ⅴa在线观看| 欧美日韩精| 四虎在线最新永久免费| 三级黄网站| 奇米成人| 一级α爰做片免费观看| 三级黄在线播放| 日韩成人av在线| 欧美日韩一区在线观看| 色台湾色综合网站| 四虎在线视频免费观看| 日韩精品亚洲人成在线观看| 欧美日韩亚洲综合久久久| 三级免费| 一级毛片免费视频观看| 香港三级欧美国产精品| 亚洲国产综合精品中文字幕| 亚洲好视频| 欧美成人香蕉在线观看| 欧美日韩在线影院| 日韩亚洲欧美在线观看| 丝袜毛片| 性色生活片免费放| 亚洲国内自拍| 亚洲综合中文| 色综合网站在线| 日韩成人中文字幕| 欧美成人区| 婷婷成人综合| 欧美激情亚洲激情|