电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>嵌入式开发>浅谈uClinux内核在ARM开发板中的移植

浅谈uClinux内核在ARM开发板中的移植

2017-10-27 | rar | 0.5 MB | 次下载 | 1积分

资料介绍

 1.Bootloader
  1.1Bootloader概述
  Boot Loader就是在操作系统内核运行之前运行的一段程序。通过这段程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。因此,正确建立uClinux的移植的前提条件是具备一个与uClinux配套、易于使用的Bootloader。
  ARMSYS开发板提供了这样一个uClinux专用的Bootloader,该Bootloader程序烧录在系统的地址0x0处,每次上电即运行,能够正确完成硬件系统的初始化和uClinux的引导。
  理论上,uClinux引导时并非一定需要一个独立于内核的Bootloader。然而,将Bootloader与内核分开设计能够使软件架构更加清晰,也有助于灵活地支持多种引导方式,实现一些有用的辅助功能。
  ARMSYS提供的Bootloader的主要任务可以概括如下:
  1.硬件初始化;
  2.从主机下载新的内核映像和文件系统映像;
  3.烧写NorFlash和Nandflash;
  4.加载uClinux 内核映像并启动运行;
  5.提供串行超级终端上的人机操作界面。
  1.2存储空间分布
  Bootloader采用默认的存储空间分布地址来加载uClinux内核、文件系统,并按照正确引导uClinux的运行。在ARMSYS的Bootloader中,默认的存储空间分布如下表:
  内容 起始地址
  存储介质
  Bootloader程序空间 0x00000000
  Flash
  压缩内核映像 0x00010000
  Flash
  ROM文件系统映像 0x000e0000
  Flash
  内核运行地址 0x0c008000
  SDRAM
  压缩内核解压地址 0x0c100000
  SDRAM
  文件系统加载 0x0c700000 SDRAM
  这个存储空间的分配方式也不是固定不变的,可以通过修改Bootloader中的相关代码来改变。
  1.3Bootloader的工作
  完整的Bootloader引导流程可描述如下:
  硬件初始化阶段一
  ◎ 硬件初始化
  ◎ 复制二级中断异常矢量表
  ◎ 初始化各种处理器模式
  ◎ 复制RO和RW,清零ZI
  (跳转到C代码入口函数)
  硬件初始化阶段二
  ◎ 初始化本阶段使用到的硬件设备;
  ◎ 建立人机界面
  ◎
  实现映像文件的下载和烧录工具
  ◎ 实现映像文件的加载和运行工具
  下面对上述各步骤进行逐一说明,并对与uClinux相关的内容详细加以说明。
  1.3.1 硬件初始化
  板子上电或复位后,程序从位于地址0x0的Reset Exception
  Vector处开始执行,因此需要在这里放置Bootloader的第一条指令:b
  ResetHandler,跳转到标号为ResetHandler处进行第一阶段的硬件初始化,主要内容为:关Watchdog
  Timer,关中断,初始化PLL和时钟,初始化存储器控制器。比较重要的是PLL的输出频率要计算正确,ARMSYS中把它设置为64MHz;这实际上就是处理器的工作主频,这个时间参数在第二阶段计算SDRAM的刷新计数值和UART的波特率等参数时还要用到。
  1.3.2建立二级异常中断矢量表
  异常中断矢量表(Exception Vector Table)是Bootloader与uClinux内核发生联系关键的地方之一。即使uClinux内核已经得到处理器的控制权运行,一旦发生中断,处理器还是会自动跳转到从0x0地址开始的第一级异常中断矢量表中的某个表项(依据于中断类型)处读取指令运行。
  在编写 Bootloader时,地址0x0处的一级异常中断矢量表只需简单地包含向二级异常中断矢量表的跳转指令就可以。这样,就能够正确地将发生的事件交给uClinux的中断处理程序来处理。对于uClinux内核,它在RAM空间中基地址为0xc000000处建立了自己的二级异常中断矢量表,因此,
  Bootloader的第一级异常中断矢量表如下所示:
  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执行的全过程中都不必响应中断,那么上面的设置已能满足要求。但在我们的
  ARMSYS上提供了USB下载器,需要用到中断,那么Bootloader必须在同样的地址(0xc000000)处配置自己的二级异常中断矢量表,以便同uClinux兼容。这张表事先存放在Flash Memory里,引导过程中由Bootloader将其复制到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
  建立二级矢量表:
  ;****************************************************
  ;* 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
  将异常中断矢量重构到SDRAM,这样的好处就是可以在其它的功能程序内对中断处理程序的地址任意赋值
下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1TC358743XBG评估板参考手册
  2. 1.36 MB  |  330次下载  |  免费
  3. 2开关电源基础知识
  4. 5.73 MB  |  6次下载  |  免费
  5. 3100W短波放大电路图
  6. 0.05 MB  |  4次下载  |  3 积分
  7. 4嵌入式linux-聊天程序设计
  8. 0.60 MB  |  3次下载  |  免费
  9. 5基于FPGA的光纤通信系统的设计与实现
  10. 0.61 MB  |  2次下载  |  免费
  11. 6基于FPGA的C8051F单片机开发板设计
  12. 0.70 MB  |  2次下载  |  免费
  13. 751单片机窗帘控制器仿真程序
  14. 1.93 MB  |  2次下载  |  免费
  15. 8基于51单片机的RGB调色灯程序仿真
  16. 0.86 MB  |  2次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成电路应用800例(新编版)
  4. 0.00 MB  |  33564次下载  |  免费
  5. 3接口电路图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21548次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6653次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537796次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420026次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191185次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183278次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费