移植U-BOOT-2016.11到JZ2440详细教程(1)
前言
学习韦东山老师的移植U-BOOT 2012.04.01已经有一段时间了,一直想着自己来移植最新的U-BOOT,看看是否真正的掌握了移植方法。并通过这个过程,学着写一些自己的博客。
至于为什么要选择2016.11版本,而不是最新的2018.09,是因为从U-BOOT 2016.11以后的版本就不再支持S3C2410单板,以目前的能力,我们要移植U-BOOT到开发板上一定是选择当前支持的单板或者至少是相近的。 U-BOOT代码可以从这里下载,链接:[http://blog.csdn.net/yunlong654/article/details/ftp:/ftp.denx.de/pub/u-boot/]
因为现在我还没有从头到尾的把2016.11版本的U-BOOT移植成功,并且还在上班,所以接下来以一个模块为一个章节不定时更新。每一个章节结束,我都会附上相应的补丁文件,大家可以直接从补丁文件看到这一章修改了哪些地方。
U-BOOT 2016.11 启动流程分析
一般u-boot要做以下这些事:
a. 初始化硬件:关看门狗、设置时钟、设置SDRAM、初始化NAND FLASH
b. 如果bootloader比较大,要把它重定位到SDRAM
c. 把内核从NAND FLASH读到SDRAM
d. 设置"要传给内核的参数"
e. 跳转执行内核
下面主要列举了部分U-BOOT从上电到调用系统内核过程中的一些函数调用关系,其中加粗和斜体是移植U-BOOT中可能会修改到的函数。对部分函数进行了简单的注释,完整的启动流程分析以及函数注释可以看源代码,或者链接: [http://www.wowotech.net/u-boot/boot_flow_2.html].
- .globl reset (arch\arm\cpu\arm920t\start.S) 1 bl cpu_init_crit 2 bl lowlevel_init(\board\samsung\smdk2440\lowlevel_init.S) 3
-
bl board_init_f_alloc_reserve (\common\init\board_init.c)4
-
initcall_run_list(init_sequence_r)
board_init,17
根据以上函数调用关系,我们可以总结出U-BOOT从上电到调用系统内核中间经过的大致步骤如下:
- 初始化底层配置。
- 设置系统时钟。
- 初始化内存控制器。
- 初始化RAM。
- 分配代码各个部分所需空间。
- 拷贝代码到RAM并跳转到RAM相应地址继续执行。
- 清除BSS段。
- 初始化之前分配的各个空间。
- 跳转到run_main_loop,然后判断是直接调用系统内核,还是等待传入命令并执行相应的操作。
我们在移植的时候主要还是主要系统时钟和内存控制器以及RAM的代码,如果这块代码没有问题,那么就离移植U-BOOT成功不远了。
让CPU运行在SVC32模式即超级用户模式,可以进一步管理计算机;关闭看门狗;关中断;设置系统分频系数。 ↩︎
关闭数据和指令缓存;关闭MMU和caches。 ↩︎
初始化内存控制器。 ↩︎
分配空间给全局变量global_data,并计算剩余地址。 ↩︎
初始化全局变量global_data。 ↩︎
计算整个U-BOOT长度。 ↩︎
设置UPLL和MPLL,S3C2440有两个PLL(phase locked loop)一个是MPLL,一个是UPLL。MPLL用于CPU及其他外围器件。UPLL用于USB,用于产生FCLK, HCLK, PCLK三种频率。设置IO管脚。 ↩︎
初始化系统环境变量。 ↩︎
初始化波特率。 ↩︎
初始化串口。 ↩︎
以上三个函数都是帮助打印调试信息。 ↩︎
分配U-BOOT代码的存储空间。 ↩︎
初始化dram Bank信息。 ↩︎
打印drarm信息。 ↩︎
重定位代码。 ↩︎
清零BSS段。 ↩︎
单板相关初始化。 ↩︎
说明U-BOOT当前阶段。 ↩︎
配置u-boot使用hush shell来作为执行器。初始化相关函数。 ↩︎
从环境变量中获取"preboot"的定义,该变量包含了一些预启动命令,并执行这些命令。 ↩︎
从环境变量中取出"bootdelay",并转化为整型,以及"bootcmd"。 ↩︎
循环处理U-BOOT cmd指令。 ↩︎
- 移植U-BOOT-2016.11到JZ2440详细教程(3)
- 移植U-BOOT-2016.11到JZ2440详细教程(5)
- 移植U-BOOT-2016.11到JZ2440详细教程(6)
- 移植U-BOOT-2016.11到JZ2440详细教程(8)
- 移植U-BOOT-2016.11到JZ2440详细教程(4)
- 移植U-BOOT-2016.11到JZ2440详细教程(7)
- JZ2440平台移植uboot 2016.11(一)
- JZ2440平台移植uboot 2016.11(六)
- JZ2440平台移植uboot 2016.11(三)
- JZ2440平台移植uboot 2016.11(四)
- JZ2440平台移植uboot 2016.11(五)
- JZ2440平台移植uboot 2016.11(二)
- JZ2440平台移植uboot 2016.11(十一)
- JZ2440平台移植uboot 2016.11(八)
- S5pv210 u-boot-2010.03移植详细教程
- u-boot-2016.11移植到S3C2440之新建一个单板(1)
- 移植QT5.6到嵌入式开发板(史上最详细的QT移植教程)
- Springboot SpringCloud集成OAuth2入门详细教程
- 将 TensorFlow 移植到 Android手机,实现物体识别、行人检测和图像风格迁移详细教程
- ARM QT移植详细步骤教程