MMU中文名是内存管理单元,
关MMU关掉MMU,因为u-boot软件是硬件实地址访问。
根本没有用到内存地址映射
因为MMU是;把虚拟地址转化为物理地址得作用,而目的是设置控制寄存器,而控制寄存器本来就是实地址(物理地址)
驱动与硬件的连接
地址的映射
控制外设,其实就是控制寄存器地址。由于MMU(内存管理单元),内核层的驱动不能直接操作硬件上的地址,通过虚拟地址来实现
驱动程序 --> 虚拟地址 --> MMU --> 物理地址(寄存器) --> 硬件
看门狗如果没关,硬件上默认到时会复位的。 所以要关掉
关掉中断,避免中断打断带来的保存返回的问题
第一条指令位置(参考u-boot.map) arch/arm/cpu/armv7/start.S 里的 _start: b reset
设置为SVC模式 msr cpsr,r0
关闭MMU Cache cpu_init_cp15
基本硬件设备初始化 board/samsung/fs4412/lowlevel_init.S 的 lowlevel_init
关中断 看门狗(时钟 串口,flash,内存等的初始化时间可能比较长,这样的话,看门狗会使开发板不停的重启,所以在初始化硬件之前,先关闭MMU Cache,关中断 看门狗)
,初始化时钟 串口,flash,内存
自搬移到内存 relocate_code
(把u-boot剩下的部分搬到内存中,然后运行)
设置栈, IRQ stack frame
(C代码运行之前,必须先设置栈)
===================================================
准备进入C部分 bl _main ( 参u-boot.map )
大部分硬件初始化 arch\arm\lib\board.c\board_init_f 里的init_sequence
搬移内核到内存运行
时钟 串口,flash,内存等的初始化时间可能比较长,这样的话,看门狗会使开发板不停的重启,所以在初始化硬件之前,先关闭MMU Cache,关中断 看门狗
uboot是在开发板上的EMMC里面,开发板上电后,BootLoader运行,设置为SVC模式,关闭MMU Cache,基本硬件初始化,自搬移到内存(uboot剩余程序进内存),设置栈,准备进入C语言部分,大部分硬件初始化,搬移内核到内存(通过网络—tftp服务,将uImage和设备树文件加载到内存),挂载根文件系统(通过网络—nfs服务,将rootfs加载到内存)加粗样式