bootloader

来源:互联网 发布:香港电信网络制式 编辑:程序博客网 时间:2024/05/16 14:38

bootloader是系统的引导程序,需要对一些硬件进行初始化,为操作系统的启动做好准备

其中搬运操作系统的代码和设置启动参数是必须要bootloader完成

s3c2440在系统启动时硬件自动将nand flash的前4k搬到sram里面,s3c6410为8k

1.程序需要在sdram里面运行,需要初始化sdram,才能运行代码,所以需要初始化内存。从arm的datasheet里面知道初始化内存控制器就是初始化内存。关于模式问题,arm的datasheet写到上电后模式自动设置为svc模式。

2.bootloader阶段不需要地址映射,映射了毫无意义,而且会使系统效率降低,所以需要关闭MMU,而D-CACHE的权限C,B在TLB和内存中,需要经过MMU,所以D-CACHE也需要关闭。I-CACHE相对于D-CACHE少了回写这一步骤,而且是只读的,在不开启MMU的情况下也可以使用。所以关不关闭I-CACHE都可以。在此次学习中暂时决定关闭I-CACHE

3.为了系统的开机速度,不过不进行时钟的倍频,启动过程将会消耗相对多的时间,为了早点启动内核,所以要设置时钟

4.将kernel代码从nand flash搬到内存,则应该对nand flash进行初始化才能开始搬运

5.在调试过程中利用串口进行调试,则需要对uart进行设置,以方便调试,即将printk代码写出来

6.有些代码不能使用c语言编写,必须用汇编编写,而c语言的运行过程需要堆栈,所以在汇编调用c语言函数时需要预先设置好堆栈

7.关于bss段清零的问题,可以不进行设置,但是为了c语言标准,需要对bss段进行清零