NXP芯片 i.MX系列Uboot 移植过程简析

我们拿到芯片厂商提供的软件,经常要根据自己的需要移植到自己设计的板子上,因为自己设计的开发板难免会与官方给出的存在差异。在这里我简单地介绍下,uboot的移植过程,在这里还是以NXP i.MX 的芯片为例。

1. DDR

首先说一下DDR,用户在根据官方的开发板定制自己的板子的时候,除了去除一些外设,DDR方面也经常会有不同之处。在这里就讲一下在i.MX 系列的芯片中DDR 是如何更改的。在这里说一下DCD table,这个DCD table是在最终的uboot image 中进行ddr 初始化的代码。那么对于新的板子我们怎么修改DDR的配置呢,我们现在切入正题。
我们可以根据官方提供的相关代码来修改,根据自己的板子的DDR情况来改。以imx6q为例。

1.将board/freescale/mx6<customer_board_name>/imximage.cfg 拷贝并且命名为mx6q.cfg.然后根据自己板子的需要,修改相关的配置信息。这些信息会被ROM代码读取并且进行
DDR的初始化工作。
2.如果是 i.MX 8QuadMax A0  i.MX 8QuadXPlus A0,UBoot 并不包含DCD table.所以我
们要利用imx-mkimage 工具,将DCD table 合入 最终的uboot中。
3. 如果是 i.MX 8QuadXPlus B0  i.MX 8QuadMax B0, DDR的初始化在scfw中,用户需要去
修改scfw中的内容。 
4. 如果是 i.MX 8M Quad, U-Boot中不包括DCD,需要在SPL中对DDR进行初始化工作。

2. 添加驱动(Driver)

我们会根据自己的需要修改相应的配置文件(config文件),那么配置文件修改的只是一些宏定义。跟驱动相关的具体代码是在那里实现的呢。接下来我们讲一下如何添加驱动,
1. 找到mx<customer_board>.c,该文件一般位于目录 board/freescale/mx<customer_board>/.
2. 编辑 mx<customer_board>.c 并且添加驱动初始化的相关代码 ,例如clock, IOMUX, and GPIO.
3. 驱动初始化的代码调用一般会放在函数 board_init 或者 board_late_init中进行

 函数 board_early_init_f() 会在早期初始化的时候调用,记着别忘记定义宏CONFIG_BOARD_EARLY_INIT_F。
你可以将UART/SPI-NOR/NAND IOMUX 等相关的函数放入其中, 这些往往要求在早期进行初始化。
 函数board_init() 一般在 board_early_init_f  board_late_init之间调用,你可以进行一些板级的初始
化工作

3.修改打印板子名称

T如果要修改板子名称,主要使用checkboard() 函数。这个函数主要是由 init_sequence_f[] 调用。那么他是在那里实现的呢,他也是在文件 board/freescale/mx6-xxx.c中实现的.
有两种方法可以修改板子的名称

1. 删除identify_board_id( ) (这个函数在checkboard()中)并且用printf("Board:i.MX 
	on custom board\n");替换printf("Board: ");
3.	用户可以根据自己的板子的情况,实现 __print_board_info() 函数

好了uboot的移植就讲到这里了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值