硬件启动
从EMMC启动 10100110
1.bootmode 01 参考手册/芯片手册
2.bootdevices 只有内部启动[1:0]的时候才会需要选择启动设备
支持NOR flash,NAND flash,SD/EMMC, qspi flash…..(如果是nand需要关注page)
通过boot_cfg 1,2,4(每个八位,4的八根全部接地) LCD_DATA_[0:23]
分压原理,拨码开关打开,接受到高电平。
裸机实验中生成的led.bin直接放到sd卡中是没办法启动的,需要加一个头文件
1.Boot rom 做的事情
设置内核时钟,enable cache,从boot_cfg读取image
Device initialization 0x00017fff/1024=96k rom
2.IVT和Bootdata数据
例如:sd卡的ivt表偏移地址是1k,因为前512k写了分区信息,如果覆盖sd就废了
3.DCD数据
复位以后, I.MX6U 片内的所有寄存器都会复位为默认值,但是这些默认值往往不是我们
想要的值,而且有些外设我们必须在使用之前初始化它。为此 I.MX6U 提出了一个 DCD(Device
Config Data)的概念,和 IVT、 Boot Data 一样, DCD 也是添加到 load.imx 里面的,紧跟在 IVT
和 Boot Data 后面, IVT 里面也指定了 DCD 的位置。 DCD 其实就是 I.MX6U 寄存器地址和对应
的配置信息集合, Boot ROM 会使用这些寄存器地址和配置集合来初始化相应的寄存器,比如
开启某些外设的时钟、初始化 DDR 等等。
C语言驱动led
1.首先设置芯片处于svc模式 CPSR 寄存器bit[4:0] 10011=0x13
2.设置sp指针
sp可以指向内部ram,也可以指向ddr,有512mb取值范围 0x8000-0x9FFFFFF
栈内存:2MB (需要栈在ram取值范围内)
3.跳转到c语言
使用b指令跳转到c语言函数,比如main函数
4.链接文件
.定位点 确定链接地址
.确保程序先跑start.s 汇编文件初始io
.bss 为定义了但是未初始化的数据 一般需要清零
Uboot
2023年3月11日
16:05
1.uboot(可以用于上位机 系统升级)
1.uboot 是一个裸机程序(bootloader)
2.uboot 就是一个bootloader 作用引导linux启动 (初始化ddr)
Linux 镜像(zimage) 设备树(dtb)[将linux zimage 从外部flash 读取到ddr]
Uboot 不仅可以启动linux,也可以启动其他系统 suchas vxworks(反之亦然)
1.U-Boot – DENX Software Engineering
2.soc 定制uboot
从emmc 启动
Uboot 类似于uefi 命令行操作
可以设置环境变量
Printevn /setenv/saveenv/bdinfo
Setenv envval 设置空值就是删除
使用nfs/tftp 下载镜像
标签:初始化,uboot,启动,预备,DCD,寄存器,Boot,嵌入式,Linux From: https://www.cnblogs.com/zhangzhekun/p/17208338.html