笔记整理—uboot启动过程(1)

           在前文关于MKCONFIG的常用配置参数与链接脚本中逐渐的引入了通过uboot的文件启动校验头引入了uboot的汇编部分,该部分是为了去启动后续的uboot的c语言部分,但是c语言是需要使用到内存的,所以可用理解为:该汇编部分的主要目的就是为了格式化内存以便c语言可用运行。

        前文说到了x210的uboot使用到的16字节校验头,为了就是校验文件的完整性和正确性。异常向量表依照cpu写出,没有这玩也系统就容易跑飞。

reset    系统启动复位执行    b reset

        uboot中的异常向量表处理异常能使用就行(不像是内核一样要求高)。

.balignl 16 , 0xdeadbeef

         这句话的意思是以16字节对齐,若没有对齐则使用0xdeadbeaf填充,0xdeadbeaf是16进制数字,但刚好能组成一个英文词语——坏牛肉,所以就被用于做填充,其本质也是魔数有着特定的意思。(差8字节就填充2个坏牛肉)

        对齐访问的优势:1.效率要求。2.硬件要求。

TEXT_BASE 链接地址 C3E00000 在Makefile里

在汇编语言中
_TEXT_BASE:
    .word TEXT_BASE

_TEX_BASE:为标号
.word 为类型
TEXT_BASE 为值

        其就类似于指针,可用ldr加载_TEXT_BASE得到值,在此的.word表示4个字节。

CFG_PHY_UBOOT_BASE    33e00000 是uboot的物理地址 c3e00000是虚拟地址

        IRQ中断:

msr cosr_c , #0xd3

        向cpsr中的c位写入0xd3。cpsr是程序状态寄存器,c位是模拟位。其中:

0xd3:11010011
其中mode位为0-4位
T位位位第五位:1-ARM状态
10011表示svc模式
F位为第6位:1表示关闭FIQ
I位为第7位:1表示关闭IRQ

        这里禁止FIQ和IRQ、是为了后面为中断做好准备后再对齐进行开启。ARM类型的cpu在复位时默认为svc模式,但写T位是为了移植性,代码不依赖于预设是一种保障。

disable_L2cache    禁止L2cache
set_L2cache_auxctrl_cycle    设置L2cache的辅助控制
enable_L2cache    使能L2cache

        这就是去开启一个功能的正确方式,先关闭功能,再对其进行设置,最后再开启功能。刷新L1cache的Icache与Dcache。其中Icache为指令cache,Dcache为数据cache。

        关闭MMU,由于没有进行虚拟地址映射,所以先给关了。

        Read booting information 读取启动信息(E000 0004)。

        OM引脚选择:OM5:OM0从哪里启动(也就是启动介质)。

        bic r2 ,r1 ,#0xffffffc1只保留r1位中的后几位,清除了ffffffc1位内容,存入r2中。

        Nand信息:4kb 5-cycle 8-bitECC

        最终在r3中存入0x3表示MMC_sd启动!

ldr sp =0xd003600    设置栈IROM

bl lowlevel_init 跳转到低层次初始化

        在lowlevel_init之前因为要bl跳转了,不用栈的话只能调用一层函数,这样就回不到原位了,代码在SRAMZ中,DDR未启用,栈地址被uboot自定义。

        bl只会将返回的地址存储在LR中,但LR只能写一个返回地址,所以要启动栈。在进入第二层函数时要指第一层LR入栈,才能去做第二层函数。

        下一篇文章将对lowlevel_init进行详细说明,敬请期待。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值