没有合适的资源?快使用搜索试试~ 我知道了~
嵌入式系统/ARM技术中的针对系统的改进ARM开发了板上uClinux内核移植
2 下载量 4 浏览量
2020-10-21
21:50:45
上传
评论
收藏 105KB PDF 举报
温馨提示
1.简述: 引导加载程序是系统加电后运行的第一段软件代码。PC机中的引导加载程序由BIOS(其本质就是一段固件程序)和位于硬盘MBR中的OS BootLoader(比如,LILO和GRUB等)一起组成。BIOS在完成硬件检测和资源分配后,将硬盘MBR中的BootLoader读到系统的RAM中,然后将控制权交给OS BootLoader。BootLoader的主要运行任务就是将内核映象从硬盘上读到 RAM 中,然后跳转到内核的入口点去运行。 2.1Bootloader概述 Boot Loader 就是在操作系统内核运行之前运行的一段程序。通过这段程序,我们可以初始化硬件设备、建立内存
资源推荐
资源详情
资源评论
嵌入式系统嵌入式系统/ARM技术中的针对系统的改进技术中的针对系统的改进ARM开发了板上开发了板上
uClinux内核移植内核移植
1.简述: 引导加载程序是系统加电后运行的第一段软件代码。PC机中的引导加载程序由BIOS(其本质就是
一段固件程序)和位于硬盘MBR中的OS BootLoader(比如,LILO和GRUB等)一起组成。BIOS在完成硬件检
测和资源分配后,将硬盘MBR中的BootLoader读到系统的RAM中,然后将控制权交给OS BootLoader。
BootLoader的主要运行任务就是将内核映象从硬盘上读到 RAM 中,然后跳转到内核的入口点去运行。
2.1Bootloader概述 Boot Loader 就是在操作系统内核运行之前运行的一段程序。通过这段程序,我们可以
初始化硬件设备、建立内存
1.简述:简述:
引导加载程序是系统加电后运行的第一段软件代码。PC机中的引导加载程序由BIOS(其本质就是一段固件程序)和位于
硬盘MBR中的OS BootLoader(比如,LILO和GRUB等)一起组成。BIOS在完成硬件检测和资源分配后,将硬盘MBR中的
BootLoader读到系统的RAM中,然后将控制权交给OS BootLoader。BootLoader的主要运行任务就是将内核映象从硬盘上读
到 RAM 中,然后跳转到内核的入口点去运行。
2.1Bootloader概述概述
Boot Loader 就是在操作系统内核运行之前运行的一段程序。通过这段程序,我们可以初始化硬件设备、建立内存空间的
映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。ARMSYS开发板
提供了这样一个uClinux专用的Bootloader,该Bootloader程序烧录在系统的地址0x0处,每次上电即运行,能够正确完成硬件
系统的初始化和uClinux的引导。理论上,uClinux引导时并非一定需要一个独立于内核的Bootloader。然而,将Bootloader与
内核分开设计能够使软件架构更加清晰。
ARMSYS提供的Bootloader的主要任务可以概括如下:
1.硬件初始化;
2.从主机下载新的内核映像和文件系统映像;
3.烧写NorFlash和Nandflash;
4.加载uClinux 内核映像并启动运行;
5.提供串行超级终端上的人机操作界面。
2.2存储空间分布
Bootloader采用默认的存储空间分布地址来加载uClinux内核、文件系统,并按照正确引导uClinux的运行。默认的存储空
间分布如下表:
内容 起始地址
存储介质Bootloader程序空间 0x00000000
Flash压缩内核映像 0x00010000
FlashROM文件系统映像 0x000e0000
Flash内核运行地址 0x0c008000
SDRAM压缩内核解压地址 0x0c100000
SDRAM文件系统加载 0x0c700000
2.3Bootloader的工作
完整的Bootloader引导流程可描述如下:
硬件初始化阶段一
1 硬件初始化
2 复制二级中断异常矢量表
3 初始化各种处理器模式
4 复制RO和RW,清零ZI
硬件初始化阶段二
5 初始化本阶段使用到的硬件设备;
6 建立人机界面
7 实现映像文件的下载和烧录工具
8 实现映像文件的加载和运行工具
2.3.1 硬件初始化硬件初始化
板子上电或复位后,程序从位于地址0x0的Reset Exception Vector处开始执行,因此需要在这里放置Bootloader的第一条
指令:b ResetHandler,跳转到标号为ResetHandler处进行第一阶段的硬件初始化,主要内容为:关Watchdog Timer,关中
断,初始化PLL和时钟,初始化存储器控制器。比较重要的是PLL的输出频率要计算正确,ARMSYS中把它设置为64MHz;
2.3.2建立二级异常中断矢量表建立二级异常中断矢量表
异常中断矢量表(Exception Vector Table)是Bootloader与uClinux内核发生联系关键的地方之一。即使uClinux内核已经
得到处理器的控制权运行,一旦发生中断,处理器还是会自动跳转到从0x0地址开始的第一级异常中断矢量表中的某个表项处
读取指令运行。
在编写 Bootloader时,地址0x0处的一级异常中断矢量表只需简单地包含向二级异常中断矢量表的跳转指令就可以。对于
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必须在同样的地址xc000000)处配置自己的二级异常中断矢量表。如表所示流程:
存放矢量表:
;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
剩余6页未读,继续阅读
资源评论
weixin_38688906
- 粉丝: 12
- 资源: 904
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- OpenCV计算机视觉项目实战 - 目标追踪(基于Python + OpenCV)
- 2017年毕业设计.zip
- 智能菜谱推荐系统借助 SpringBoot 腾飞:代码影响力与美食推广
- Unity 与 CryEngine优缺点对比
- 1、使用Redis存储AccessToken 2、使用MySQL存储ClientDetails和UserDetails信息.zip
- 电线杆残旧检测3-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rar
- 1412基于Python源码神经网络人脸识别疲劳检测与预警系统设计毕业案例设计.zip
- 学院个人信息管理系统的 SpringBoot 代码魔法演绎
- 物品检测10-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rar
- 【Java从入门到放弃 之 从字节码的角度异常处理】文章中的字节码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功