300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > NXP芯片 i.MX系列Uboot 移植过程简析

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

时间:2020-05-28 08:18:53

相关推荐

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的移植就讲到这里了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。