zyz1016 发表于 2006-4-7 00:14:36

请教bootloader的问题

近日准备给自己做的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的配置,有没有一个比较详细的说明文档?
   最近都看的有点糊涂了,谢谢解答一下

lumit-support-1 发表于 2006-4-7 23:25:31

又看了技术内幕,里面说道bootloader分2个stage,stage1 通常包括:硬件设备初始化,为加载 Boot Loader 的 stage2 准备 RAM 空间,拷贝 Boot Loader 的 stage2 到 RAM 空间中,设置好堆栈,跳转到 stage2 的 C 入口点。
第一阶段通常用汇编实现,第二阶段用C实现,从上面的话我觉得,跳到C代码之后基本应该算第二阶段了吧!

lumit-support-1 发表于 2006-4-7 23:27:13

关于内核基地址的问题,建议还是看看移植!!

zyz1016 发表于 2006-4-8 23:51:43

有移植方面好的文章可以推荐一下么,谢谢了
页: [1]
查看完整版本: 请教bootloader的问题