QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2572|回复: 3

请教bootloader的问题

[复制链接]
发表于 2006-4-7 00:14:36 | 显示全部楼层 |阅读模式
近日准备给自己做的4510板子写bootloader,看了《嵌入式系统 Boot Loader 技术内幕》,还有《4510B bootloader实现与分析》和他的源码。感觉收获颇大,但是有些不太明白的地方,向各位请教一下。
   在实现与分析一文的源代码中,首先进入SVC32模式,屏蔽了中断,设置SYSCFG寄存器,然后做了Memory map,将SDRAM映射到64MB地址0x0,bootloader在SDRAM中的拷贝被放在了0x0的位置,最后装载了kernel。
   这里有一句话:“编译好uclinux后,会生成两个二进制内核镜像文件:image.ram 和image.rom。image.rom是由一个bootloader加上image.ram生成的,所以可以自启动。而image.ram是一个纯粹的内核镜像文件,其运行的起始地址是0x8000,所以不能直接运行,需要由bootloader将其装载到SDRAM的0x8000处,才能启动。”对这句话我不是太明白,image.rom=bootloader+image.ram,image.rom是编译uclinux内核时生成的,和bootloader有什么关系?还有,为什么要把image.ram放到sdram的0x8000处?从0x00到0x8000这段32k的sdram里除了bootloader外是什么内容?
    又看了技术内幕,里面说道bootloader分2个stage,stage1 通常包括:硬件设备初始化,为加载 Boot Loader 的 stage2 准备 RAM 空间,拷贝 Boot Loader 的 stage2 到 RAM 空间中,设置好堆栈,跳转到 stage2 的 C 入口点。   
    stage2包括初始化本阶段要使用到的硬件设备,检测系统内存映射(memory map),将 kernel 映像和根文件系统映像从 flash 上读到 RAM 空间中,为内核设置启动参数,调用内核。 如果按这样分,实现与分析源代码哪些属于stage2?
    文章最后说道“确认你的内核在编译时配置了对串口终端的支持,并配置了正确的串口驱动程序。”   “你的 boot loader 对串口的初始化设置可能会和内核对串口的初始化设置不一致。”  “要确认 boot loader 所用的内核基地址必须和内核映像在编译时所用的运行基地址一致,尤其是对于 uClinux 而言。”
     这里又牵涉到配置编译uclinux的问题,uclinux里配置串口驱动程序,还有内核基地址应该是在哪里?关于uclinux的配置,有没有一个比较详细的说明文档?
     最近都看的有点糊涂了,谢谢解答一下
发表于 2006-4-7 23:25:31 | 显示全部楼层
又看了技术内幕,里面说道bootloader分2个stage,stage1 通常包括:硬件设备初始化,为加载 Boot Loader 的 stage2 准备 RAM 空间,拷贝 Boot Loader 的 stage2 到 RAM 空间中,设置好堆栈,跳转到 stage2 的 C 入口点。
第一阶段通常用汇编实现,第二阶段用C实现,从上面的话我觉得,跳到C代码之后基本应该算第二阶段了吧!
回复

使用道具 举报

发表于 2006-4-7 23:27:13 | 显示全部楼层
关于内核基地址的问题,建议还是看看移植!!
回复

使用道具 举报

 楼主| 发表于 2006-4-8 23:51:43 | 显示全部楼层
有移植方面好的文章可以推荐一下么,谢谢了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-4-25 23:37 , Processed in 0.079913 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表