源于:B站链接
boot的目的:
跳转到c语言中: 关闭看门狗,中断,MMU,CACHE
配置系统工作时钟
配置SDRAM的控制器(行地址数、列地址数、多少块、周期性的充电)
让SP指向可读可写的设备区间中,满足递减栈的规则SDRAM
代码搬移
执行速度问题,把程序从存储器(nor-flash)搬移到快速的内存
只把存储器的一部分代执行出来,把存储在其他位置上的代码搬移到内存,对应存储器的控制器的初始化
bl main
底层开发主要是启动开发
loader的目的:
执行应用逻辑,点灯,URAT,load linux kernel
.bin 二进制文件
创建接口开发工程
1、Makefile
1.1、通用的Makefile ,支持SD卡启动和在uboot下直接运行在ram
1)程序运行时的地址不同(根据提供的芯片手册来cha)
DDR2:0X200000000
SD卡:0x0,前16k校验
2)SD 16KB,需要加一个头信息,校验
RAM:不需要加头信息
1.2、变量集合
TARGET:DEP
COMMAND
2、链接脚本(地址安排)
2.1、概念
告诉编译器如何工作的一个文本文件
2.2、要素
1)、哪一个.o放到代码段的起始位置
2)、所有的.o放到哪个基地址上
3)、代码段、数据段等等是不连续
2.3、基本语法
SECTIONS
.txt 代码段
.rodata 只读数据段
.data 只读只写的数据段
.bss 未初始化数据段
.text :
{
start.o
*(.text)
}
. =ALIGN(4); //代码段结束后以4字节计算
3、文件组成
3.1 inc文件夹(存放头文件)
3.2 Makefile(首字母大写)