1 开发板启动过程
1.1 回顾芯片手册第三章内存映射
对于arm来说,不是给它多大的内存都能读。寻址空间(地址空间)读写范围是有限的,寻址空间的大小与地址总线宽度有关,如32位,地址空间4G(2^32)。4412的CPU在工作的时需要读写内存,还需要控制硬件,读取寄存器,所以需要规范这4G的空间。
上电PC为0,0地址执行了IROM,内部三星公司写入了BL0(即boot load 0)
IRAM是内部的内存
SFR是特殊功能寄存器
最后3G 外扩内存(我们开发板上的内存1G,地址是0x40000000-0x80000000)
EMMC断电不丢失,安装系统是安装在EMMC中,上电后再把linux从EMMC加载到SD卡
1.2 linux启动流程
上电流程主要包括以下几个步骤:
- BL0(固件)进行基本软硬件初始化(这段代码先对基本的软硬件环境时钟等)。
- BL0读取拨码开关状态,确定启动方式。
- 如果拨码开关指定SD卡启动,BL0会将SD卡中的程序复制到内存中,外部存储器CPU无法运行。
- 然后再将对应存储器中的uboot搬移到内存,然后跳转到uboot运行(Universal Bootloader),进行基本软硬件初始化。
- UBOOT将EMMC中存储的Linux系统复制到内存中(前提是已经将Linux安装到了EMMC)。
- 将设备树二进制文件(Device Tree Blob,DTB)从EMMC加载到内存中,Linux系统需要用到它来配置硬件。
- 将根文件系统(Root File System,rootfs)从EMMC加载到内存中,Linux运行时需要访问其中的文件。
- Linux系统开始运行,当系统启动完成后,Linux再从内存中(或网络)挂载根文件系统。
这样,系统就完成了从上电到Linux系统正常运行的过程。在此过程中,通过读取拨码开关状态和选择不同的存储设备,可以决定系统的启动方式,例如从SD卡或EMMC中启动,并将对应的程序和文件加载到内存中。
2 系统移植步骤
知道了启动过程,那么大致需要完成系统移植的步骤也就清楚了
- uboot移植
- linux内核移植(包含设备树)
- 根文件系统移植
3 练习
简述开发板启动过程?略