本文是自己在学习了UBOOT与系统移植时结合自己的体会写的一篇博客,博客会持续更新。
首先感谢朱有鹏老师,我是买了他的课程学习的。这是结合自己的理解写的。
FIGHTING SPARK!!
1、UBOOT和系统移植
(1)UBOOT的主要作用就是用来启动内核的,嵌入式系统上电后先执行uboot(universal bootloader,通用的启动代码),然后UBOOT负责初始化DDR,初始化Flash,然后将OS从Flash中读取到DDR中,最后启动OS,启动流程大致如下:
Linux:BootLoader→内核→文件系统→用户程序
2、UBOOT必须要解决的问题
(1)开机自启动
一般的SoC都支持多种启动方式,比如SD卡启动、NORFlash启动、NandFlash启动、eMMC启动(我自己的4412开发板就支持emmc启动和TF卡启动)
(2)UBOOT必须进行和硬件相对应的代码级别的更改和移植,才能保证从相应介质启动,uboot中第一阶段的start.s文件中具体处理了这一块
(3)能够提供操作系统的部署功能,uboot必须能够完成整个操作系统(包括Uboot,kernel、rootfs等镜像)在Flash上面的烧录下载工作,能够进行soc级和板级硬件管理。
3、UBOOT能够进行SoC级和板级硬件管理
(1)UBOOT中实现了一部分硬件控制能力(在UBOOT代码中初始化了一部分硬件),因为uboot为了完成一些任务必须要让这些硬件工作,比如要实现刷机,就必须让驱动emmc,比如通过串口发送命令,就必须要驱动串口。
4、UBOOT的生命周期
(1)这个比较简单,从上电开始到启动内核时,uboot的生命周期就结束了。一旦结束就不能再回到UBOOT了,UBOOT的最终目的就是启动内核!
5、UBOOT的工作方式
(1)uboot本身是一个裸机程序,uboot大于16kb
(2)uboot本身是一个开源项目,经过编译之后生成uboot.bin文件。
今天就将简单的总结到这里,这些大概知道就行了。关键的20%是源代码的分析,我们要花%80的时间去研究它!明天开始分析启动代码!
对比cortex a8 和 cortex a9两款芯片来分析异同。