吴忠躺衫网络科技有限公司

電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>嵌入式開(kāi)發(fā)>淺談uClinux內(nèi)核在ARM開(kāi)發(fā)板中的移植

淺談uClinux內(nèi)核在ARM開(kāi)發(fā)板中的移植

2017-10-27 | rar | 0.5 MB | 次下載 | 1積分

資料介紹

 1.Bootloader
  1.1Bootloader概述
  Boot Loader就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段程序。通過(guò)這段程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。因此,正確建立uClinux的移植的前提條件是具備一個(gè)與uClinux配套、易于使用的Bootloader。
  ARMSYS開(kāi)發(fā)板提供了這樣一個(gè)uClinux專用的Bootloader,該Bootloader程序燒錄在系統(tǒng)的地址0x0處,每次上電即運(yùn)行,能夠正確完成硬件系統(tǒng)的初始化和uClinux的引導(dǎo)。
  理論上,uClinux引導(dǎo)時(shí)并非一定需要一個(gè)獨(dú)立于內(nèi)核的Bootloader。然而,將Bootloader與內(nèi)核分開(kāi)設(shè)計(jì)能夠使軟件架構(gòu)更加清晰,也有助于靈活地支持多種引導(dǎo)方式,實(shí)現(xiàn)一些有用的輔助功能。
  ARMSYS提供的Bootloader的主要任務(wù)可以概括如下:
  1.硬件初始化;
  2.從主機(jī)下載新的內(nèi)核映像和文件系統(tǒng)映像;
  3.燒寫NorFlash和Nandflash;
  4.加載uClinux 內(nèi)核映像并啟動(dòng)運(yùn)行;
  5.提供串行超級(jí)終端上的人機(jī)操作界面。
  1.2存儲(chǔ)空間分布
  Bootloader采用默認(rèn)的存儲(chǔ)空間分布地址來(lái)加載uClinux內(nèi)核、文件系統(tǒng),并按照正確引導(dǎo)uClinux的運(yùn)行。在ARMSYS的Bootloader中,默認(rèn)的存儲(chǔ)空間分布如下表:
  內(nèi)容 起始地址
  存儲(chǔ)介質(zhì)
  Bootloader程序空間 0x00000000
  Flash
  壓縮內(nèi)核映像 0x00010000
  Flash
  ROM文件系統(tǒng)映像 0x000e0000
  Flash
  內(nèi)核運(yùn)行地址 0x0c008000
  SDRAM
  壓縮內(nèi)核解壓地址 0x0c100000
  SDRAM
  文件系統(tǒng)加載 0x0c700000 SDRAM
  這個(gè)存儲(chǔ)空間的分配方式也不是固定不變的,可以通過(guò)修改Bootloader中的相關(guān)代碼來(lái)改變。
  1.3Bootloader的工作
  完整的Bootloader引導(dǎo)流程可描述如下:
  硬件初始化階段一
  ◎ 硬件初始化
  ◎ 復(fù)制二級(jí)中斷異常矢量表
  ◎ 初始化各種處理器模式
  ◎ 復(fù)制RO和RW,清零ZI
  (跳轉(zhuǎn)到C代碼入口函數(shù))
  硬件初始化階段二
  ◎ 初始化本階段使用到的硬件設(shè)備;
  ◎ 建立人機(jī)界面
  ◎
  實(shí)現(xiàn)映像文件的下載和燒錄工具
  ◎ 實(shí)現(xiàn)映像文件的加載和運(yùn)行工具
  下面對(duì)上述各步驟進(jìn)行逐一說(shuō)明,并對(duì)與uClinux相關(guān)的內(nèi)容詳細(xì)加以說(shuō)明。
  1.3.1 硬件初始化
  板子上電或復(fù)位后,程序從位于地址0x0的Reset Exception
  Vector處開(kāi)始執(zhí)行,因此需要在這里放置Bootloader的第一條指令:b
  ResetHandler,跳轉(zhuǎn)到標(biāo)號(hào)為ResetHandler處進(jìn)行第一階段的硬件初始化,主要內(nèi)容為:關(guān)Watchdog
  Timer,關(guān)中斷,初始化PLL和時(shí)鐘,初始化存儲(chǔ)器控制器。比較重要的是PLL的輸出頻率要計(jì)算正確,ARMSYS中把它設(shè)置為64MHz;這實(shí)際上就是處理器的工作主頻,這個(gè)時(shí)間參數(shù)在第二階段計(jì)算SDRAM的刷新計(jì)數(shù)值和UART的波特率等參數(shù)時(shí)還要用到。
  1.3.2建立二級(jí)異常中斷矢量表
  異常中斷矢量表(Exception Vector Table)是Bootloader與uClinux內(nèi)核發(fā)生聯(lián)系關(guān)鍵的地方之一。即使uClinux內(nèi)核已經(jīng)得到處理器的控制權(quán)運(yùn)行,一旦發(fā)生中斷,處理器還是會(huì)自動(dòng)跳轉(zhuǎn)到從0x0地址開(kāi)始的第一級(jí)異常中斷矢量表中的某個(gè)表項(xiàng)(依據(jù)于中斷類型)處讀取指令運(yùn)行。
  在編寫 Bootloader時(shí),地址0x0處的一級(jí)異常中斷矢量表只需簡(jiǎn)單地包含向二級(jí)異常中斷矢量表的跳轉(zhuǎn)指令就可以。這樣,就能夠正確地將發(fā)生的事件交給uClinux的中斷處理程序來(lái)處理。對(duì)于uClinux內(nèi)核,它在RAM空間中基地址為0xc000000處建立了自己的二級(jí)異常中斷矢量表,因此,
  Bootloader的第一級(jí)異常中斷矢量表如下所示:
  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 。
  ldr pc,=0x0c000018 ;IRQ
  Handler
  ldr pc,=0x0c00001c ;FIQ Handler
  LTORG
  如果在Bootloader執(zhí)行的全過(guò)程中都不必響應(yīng)中斷,那么上面的設(shè)置已能滿足要求。但在我們的
  ARMSYS上提供了USB下載器,需要用到中斷,那么Bootloader必須在同樣的地址(0xc000000)處配置自己的二級(jí)異常中斷矢量表,以便同uClinux兼容。這張表事先存放在Flash Memory里,引導(dǎo)過(guò)程中由Bootloader將其復(fù)制到RAM地址0x0C000000:
  存放矢量表:
  ;IRQ ==the program put this phrase to 0xc000000
  ExceptionHanlderBegin
  b 。
  ldr pc, MyHandleUndef ; HandlerUndef
  ldr
  pc, MyHandleSWI ; HandlerSWI
  ldr pc, MyHandlePabort ; HandlerPabort
  ldr
  pc, MyHandleDabort ; HandlerDAbort
  b 。 ; HandlerReserved
  ldr pc,
  MyHandleIRQ ; HandlerIRQ
  ldr pc, MyHandleFIQ ; HandlerFIQ
  MyHandleUndef DCD HandleUndef ;reserve a word(32bit)
  MyHandleSWI DCD
  HandleSWI
  MyHandlePabort DCD HandlePabort
  MyHandleDabort DCD
  HandleDabort
  MyHandleIRQ DCD HandleIRQ
  MyHandleFIQ DCD HandleFIQ
  ExceptionHanlderEnd
  建立二級(jí)矢量表:
  ;****************************************************
  ;* Setup IRQ handler
  *
  ;****************************************************
  ldr
  r0,=(_IRQ_BASEADDRESS + 0x100)
  ldr r2,=_IRQ_BASEADDRESS
  add r3,r0,
  #0x100
  0
  CMP r0, r3
  STRCC r2, [r0], #4;cc:Carry clear;save R2 to R0
  address, R0 =R0+ 4。
  BCC %B0
  ldr r1,=_IRQ_BASEADDRESS
  ldr r0,=ExceptionHanlderBegin ;if there isn‘t
  ’subs pc,lr,#4‘ at 0x18, 0x1c
  ldr r3,=ExceptionHanlderEnd
  0
  CMP r0, r3
  ;put the vector table at _IRQ_BASEADDRESS(0xc000000)
  LDRCC r2, [r0],
  #4
  STRCC r2, [r1], #4
  BCC %B0
  ldr r1,=DIsrIRQ;put the IRQ judge program at
  _IRQ_BASEADDRESS+0x80(0xc000080)
  ldr r0,=IsrIRQ ;if there isn’t ‘subs
  pc,lr,#4’ at 0x18, 0x1c
  ldr r3,=IsrIRQEnd
  0
  CMP r0, r3
  LDRCC r2,
  [r0], #4
  STRCC r2, [r1], #4
  BCC %B0
  ldr r1, =MyHandleIRQ ;MyHandleIRQ point to DIsrIRQ
  ldr r0,
  =ExceptionHanlderBegin
  ldr r4, =_IRQ_BASEADDRESS;
  sub r0, r1, r0
  add
  r0, r0,r4
  ldr r1, =DIsrIRQ
  str r1, [r0]
  定義Handlexxx:
  ^ (_IRQ_BASEADDRESS)
  HandleReset # 4
  HandleUndef # 4
  HandleSWI #
  4
  HandlePabort # 4
  HandleDabort # 4
  HandleReserved # 4
  HandleIRQ #
  4
  HandleFIQ # 4
  ^ (_IRQ_BASEADDRESS+0x80)
  DIsrIRQ # 4
  ;IntVectorTable
  ^
  (_IRQ_BASEADDRESS+0x100)
  HandleADC # 4
  HandleRTC # 4
  HandleUTXD1 #
  4
  HandleUTXD0 # 4
  HandleSIO # 4
  HandleIIC # 4
  HandleURXD1 #
  4
  HandleURXD0 # 4
  HandleTIMER5 # 4
  HandleTIMER4 # 4
  HandleTIMER3 #
  4
  HandleTIMER2 # 4
  HandleTIMER1 # 4
  HandleTIMER0 # 4
  HandleUERR01 #
  4
  HandleWDT # 4
  HandleBDMA1 # 4
  HandleBDMA0 # 4
  HandleZDMA1 #
  4
  HandleZDMA0 # 4
  HandleTICK # 4
  HandleEINT4567 # 4
  HandleEINT3 #
  4
  HandleEINT2 # 4
  HandleEINT1 # 4
  HandleEINT0 # 4
  將異常中斷矢量重構(gòu)到SDRAM,這樣的好處就是可以在其它的功能程序內(nèi)對(duì)中斷處理程序的地址任意賦值
下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1TC358743XBG評(píng)估板參考手冊(cè)
  2. 1.36 MB  |  330次下載  |  免費(fèi)
  3. 2開(kāi)關(guān)電源基礎(chǔ)知識(shí)
  4. 5.73 MB  |  6次下載  |  免費(fèi)
  5. 3100W短波放大電路圖
  6. 0.05 MB  |  4次下載  |  3 積分
  7. 4嵌入式linux-聊天程序設(shè)計(jì)
  8. 0.60 MB  |  3次下載  |  免費(fèi)
  9. 5基于FPGA的光纖通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
  10. 0.61 MB  |  2次下載  |  免費(fèi)
  11. 6基于FPGA的C8051F單片機(jī)開(kāi)發(fā)板設(shè)計(jì)
  12. 0.70 MB  |  2次下載  |  免費(fèi)
  13. 751單片機(jī)窗簾控制器仿真程序
  14. 1.93 MB  |  2次下載  |  免費(fèi)
  15. 8基于51單片機(jī)的RGB調(diào)色燈程序仿真
  16. 0.86 MB  |  2次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33564次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21548次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書(shū))
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
  16. 0.00 MB  |  6653次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537796次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191185次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
  14. 158M  |  183278次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)
做生意看风水| 在线百家乐| 百家乐投注很好| 玩百家乐官网澳门皇宫娱乐城| 大发888官方授权网| 百家乐洗码方法| 百家乐官网投注很好| 大发888娱乐场118| 澳门百家乐海洋阿强| 网上百家乐官网的打法| 博彩e族777| 线上百家乐的玩法技巧和规则| 巴黎人百家乐官网的玩法技巧和规则| 石渠县| 大发888娱乐场下载注册| 百家乐捡揽方法| 澳门百家乐官网破解方法| 鸿博娱乐| 威尼斯人娱乐官方| 网上百家乐好玩吗| 百家乐官网赌机破解| 木里| 大发888游戏代充| 百家乐网上投注文章| 百家乐官网技巧方法| 百家乐官网怎么玩高手| 大发888游戏平台hg dafa 888 gw| 百家乐PK| 属猪与属狗 做生意| 百家乐官网娱乐网送68元| 丹凤县| 大发888官网免费58| 百家乐真人博彩的玩法技巧和规则| 网页百家乐官网游戏下载| 百家乐官网览| 革吉县| 大发888怎么样| 威尼斯人娱乐城图| 百家乐官| 乐九百家乐娱乐城| 金花百家乐官网的玩法技巧和规则 |