历史上的今天
返回首页

历史上的今天

今天是:2024年12月30日(星期一)

正在发生

2020年12月30日 | I.MX6Q(TQIMX6Q/TQE9)学习笔记——新版BSP之u-boot移植

2020-12-30 来源:eefocus

前段时间就开始学习I.MX6Q了,但是最近工作实在是忙,间断了一些时间了。为了提高移植效率,还是考虑移植Freescale维护的3.10版本的内核。


源码获取


Freescale维护的3.10的内核是使用git管理的,但是直接使用git下载代码会比较慢,下面是我下载好的uboot和kernel:


I.MX6Q BSP源码(Freescale官方维护)

代码下载好后,先将u-boot解压到工作目录,然后在终端下切换到uboot根目录。由于这个版本的bsp是使用git管理的,因此,需要切换到指定分支。执行指令:


git branch -a

可以查看freescale维护的uboot的各个分支,我们checkout的分支是“remotes/origin/imx_v2013.04_3.10.17_1.0.0_ga”,执行指令:

git checkout -b tqimx6q imx_v2013.04_3.10.17_1.0.0_ga

这样,就在本地创建的分支tqimx6q并将远程分支imx_v2013.04_3.10.17_1.0.0_ga上的代码checkout到这个本地分支。我们之后的修改在tqimx6q分支进行即可。

U-Boot移植


新版U-Boot移植也不麻烦,主要是freescale给出了详细的官方手册"i.MX 6 BSP Porting Guide",具体的移植步骤如下:


Step1. 创建board目录。由于imx6q的很多代码是共通的,跟之前的移植一样,可以参考mx6qsabresd进行的,执行指令:


cp board/freescale/mx6qsabresd/ board/freescale/mx6q_tqimx6q -r

Step2. 修改board相关文件的名称:


cp board/freescale/mx6q_tqimx6q/mx6qsabresd.c board/freescale/mx6q_tqimx6q/mx6q_tqimx6q.c

Step3. 修改Makefile中的文件名。打开board/freescale/Makefile,将mx6qsabresd替换为mx6q_tqimx6q.c。

Step4. 创建board配置文件。同样参考mx6qsabresd,执行如下指令:

cp include/configs/mx6qsabresd.h include/configs/mx6q_tqimx6q.h

Step5. 添加编译选项。打开文件boards.cfg,找到配置项"mx6qsabresd"(如果没有改动的话,在277行),复制该行配置并添加在下面,然后修改为如下内容:

mx6q_tqimx6q                 arm         armv7       mx6q_tqimx6q        freescale      mx6             mx6qsabresd:IMX_CONFIG=board/freescale/mx6q_tqimx6q/mx6q_tqimx6q_ddr.cfg,MX6Q,DEFAULT_FDT_FILE="imx6q-tqimx6q.dtb",DDR_MB=1024,SYS_USE_SPINOR

Step6. 定制DDR配置。其实DDR相关的参数在之前的移植文章中已经有了。


cp board/freescale/imx/ddr/mx6q_4x_mt41j128.cfg board/freescale/mx6q_tqimx6q/mx6q_tqimx6q_ddr.cfg

然后修改文件mx6q_tqimx6q_ddr.cfg,修改后的文件内容如下:


DATA 4, 0x020e0798, 0x000C0000

DATA 4, 0x020e0758, 0x00000000

DATA 4, 0x020e0588, 0x00000030

DATA 4, 0x020e0594, 0x00000030

DATA 4, 0x020e056c, 0x00000030

DATA 4, 0x020e0578, 0x00000030

DATA 4, 0x020e074c, 0x00000030

DATA 4, 0x020e057c, 0x00000030

DATA 4, 0x020e058c, 0x00000000

DATA 4, 0x020e059c, 0x00000030

DATA 4, 0x020e05a0, 0x00000030

DATA 4, 0x020e078c, 0x00000030

DATA 4, 0x020e0750, 0x00020000

DATA 4, 0x020e05a8, 0x00000018

DATA 4, 0x020e05b0, 0x00000018

DATA 4, 0x020e0524, 0x00000018

DATA 4, 0x020e051c, 0x00000018

DATA 4, 0x020e0518, 0x00000018

DATA 4, 0x020e050c, 0x00000018

DATA 4, 0x020e05b8, 0x00000018

DATA 4, 0x020e05c0, 0x00000018

DATA 4, 0x020e0774, 0x00020000

DATA 4, 0x020e0784, 0x00000018

DATA 4, 0x020e0788, 0x00000018

DATA 4, 0x020e0794, 0x00000018

DATA 4, 0x020e079c, 0x00000018

DATA 4, 0x020e07a0, 0x00000018

DATA 4, 0x020e07a4, 0x00000018

DATA 4, 0x020e07a8, 0x00000018

DATA 4, 0x020e0748, 0x00000018

DATA 4, 0x020e05ac, 0x00000018

DATA 4, 0x020e05b4, 0x00000018

DATA 4, 0x020e0528, 0x00000018

DATA 4, 0x020e0520, 0x00000018

DATA 4, 0x020e0514, 0x00000018

DATA 4, 0x020e0510, 0x00000018

DATA 4, 0x020e05bc, 0x00000018

DATA 4, 0x020e05c4, 0x00000018

DATA 4, 0x021b0800, 0xa1390003

DATA 4, 0x021b080c, 0x001F001F

DATA 4, 0x021b0810, 0x001F001F

DATA 4, 0x021b480c, 0x001F001F

DATA 4, 0x021b4810, 0x001F001F

DATA 4, 0x021b083c, 0x43270338

DATA 4, 0x021b0840, 0x03200314

DATA 4, 0x021b483c, 0x431A032F

DATA 4, 0x021b4840, 0x03200263

DATA 4, 0x021b0848, 0x4B434748

DATA 4, 0x021b4848, 0x4445404C

DATA 4, 0x021b0850, 0x38444542

DATA 4, 0x021b4850, 0x4935493A

DATA 4, 0x021b081c, 0x33333333

DATA 4, 0x021b0820, 0x33333333

DATA 4, 0x021b0824, 0x33333333

DATA 4, 0x021b0828, 0x33333333

DATA 4, 0x021b481c, 0x33333333

DATA 4, 0x021b4820, 0x33333333

DATA 4, 0x021b4824, 0x33333333

DATA 4, 0x021b4828, 0x33333333

DATA 4, 0x021b08b8, 0x00000800

DATA 4, 0x021b48b8, 0x00000800

DATA 4, 0x021b0004, 0x00020036

DATA 4, 0x021b0008, 0x09444040

DATA 4, 0x021b000c, 0x8A8F7955

DATA 4, 0x021b0010, 0xFF328F64

DATA 4, 0x021b0014, 0x01FF00DB

DATA 4, 0x021b0018, 0x00001740

DATA 4, 0x021b001c, 0x00008000

DATA 4, 0x021b002c, 0x000026d2

DATA 4, 0x021b0030, 0x008F1023

DATA 4, 0x021b0040, 0x00000047

DATA 4, 0x021b0000, 0x841A0000

DATA 4, 0x021b001c, 0x04088032

DATA 4, 0x021b001c, 0x00008033

DATA 4, 0x021b001c, 0x00048031

DATA 4, 0x021b001c, 0x09408030

DATA 4, 0x021b001c, 0x04008040

DATA 4, 0x021b0020, 0x00005800

DATA 4, 0x021b0818, 0x00011117

DATA 4, 0x021b4818, 0x00011117

DATA 4, 0x021b0004, 0x00025576

DATA 4, 0x021b0404, 0x00011006

DATA 4, 0x021b001c, 0x00000000

 

/* set the default clock gate to save power */

DATA 4, 0x020c4068, 0x00C03F3F

DATA 4, 0x020c406c, 0x0030FC03

DATA 4, 0x020c4070, 0x0FFFC000

DATA 4, 0x020c4074, 0x3FF00000

DATA 4, 0x020c4078, 0x00FFF300

DATA 4, 0x020c407c, 0x0F0000F3

DATA 4, 0x020c4080, 0x000003FF

 

/* enable AXI cache for VDOA/VPU/IPU */

DATA 4, 0x020e0010, 0xF00000CF

/* set IPU AXI-id0 Qos=0xf(bypass) AXI-id1 Qos=0x7 */

DATA 4, 0x020e0018, 0x007F007F

DATA 4, 0x020e001c, 0x007F007F

Step7. 定制board端子。其实有影响的端子在移植老版的uboot时已经知道,因此修改起来也是比较容易。


(1) 修改串口端子。具体修改内容如下:


iomux_v3_cfg_t const uart1_pads[] = {

        // MX6_PAD_CSI0_DAT10__UART1_TXD | MUX_PAD_CTRL(UART_PAD_CTRL),

        MX6_PAD_SD3_DAT7__UART1_TXD | MUX_PAD_CTRL(UART_PAD_CTRL),

        // MX6_PAD_CSI0_DAT11__UART1_RXD | MUX_PAD_CTRL(UART_PAD_CTRL),

        MX6_PAD_SD3_DAT6__UART1_RXD | MUX_PAD_CTRL(UART_PAD_CTRL),

};

(2) 修改SD卡端子。具体修改如下:

iomux_v3_cfg_t const usdhc2_pads[] = {

        MX6_PAD_SD2_CLK__USDHC2_CLK     | MUX_PAD_CTRL(USDHC_PAD_CTRL),

        MX6_PAD_SD2_CMD__USDHC2_CMD     | MUX_PAD_CTRL(USDHC_PAD_CTRL),

        MX6_PAD_SD2_DAT0__USDHC2_DAT0   | MUX_PAD_CTRL(USDHC_PAD_CTRL),

        MX6_PAD_SD2_DAT1__USDHC2_DAT1   | MUX_PAD_CTRL(USDHC_PAD_CTRL),

        MX6_PAD_SD2_DAT2__USDHC2_DAT2   | MUX_PAD_CTRL(USDHC_PAD_CTRL),

        MX6_PAD_SD2_DAT3__USDHC2_DAT3   | MUX_PAD_CTRL(USDHC_PAD_CTRL),

        // MX6_PAD_NANDF_D4__USDHC2_DAT4        | MUX_PAD_CTRL(USDHC_PAD_CTRL),

        // MX6_PAD_NANDF_D5__USDHC2_DAT5        | MUX_PAD_CTRL(USDHC_PAD_CTRL),

        // MX6_PAD_NANDF_D6__USDHC2_DAT6        | MUX_PAD_CTRL(USDHC_PAD_CTRL),

        // MX6_PAD_NANDF_D7__USDHC2_DAT7        | MUX_PAD_CTRL(USDHC_PAD_CTRL),

        // MX6_PAD_NANDF_D2__GPIO_2_2   | MUX_PAD_CTRL(NO_PAD_CTRL), /* CD */

};

 

iomux_v3_cfg_t const usdhc3_pads[] = {

        MX6_PAD_SD3_CLK__USDHC3_CLK   | MUX_PAD_CTRL(USDHC_PAD_CTRL),

        MX6_PAD_SD3_CMD__USDHC3_CMD   | MUX_PAD_CTRL(USDHC_PAD_CTRL),

        MX6_PAD_SD3_DAT0__USDHC3_DAT0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),

        MX6_PAD_SD3_DAT1__USDHC3_DAT1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),

        MX6_PAD_SD3_DAT2__USDHC3_DAT2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),

        MX6_PAD_SD3_DAT3__USDHC3_DAT3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),

        MX6_PAD_SD3_DAT4__USDHC3_DAT4 | MUX_PAD_CTRL(USDHC_PAD_CTRL),

        MX6_PAD_SD3_DAT5__USDHC3_DAT5 | MUX_PAD_CTRL(USDHC_PAD_CTRL),

        // MX6_PAD_SD3_DAT6__USDHC3_DAT6 | MUX_PAD_CTRL(USDHC_PAD_CTRL),

        // MX6_PAD_SD3_DAT7__USDHC3_DAT7 | MUX_PAD_CTRL(USDHC_PAD_CTRL),

        MX6_PAD_NANDF_D0__GPIO_2_0    | MUX_PAD_CTRL(NO_PAD_CTRL), /* CD */

};


定制cd(card detect)端子,否则uboot将检测不到SD卡插入。打开board/freescale/mx6q_tqimx6q/mx6q_tqimx6q.c修改USDHC2_CD_GPIO:


#define USDHC2_CD_GPIO  IMX_GPIO_NR(1, 4)


Step8. 编译uboot。执行如下指令:

export ARCH=arm

export CROSS_COMPILE=arm-linux-gnueabi-

make mx6q_tqimx6q

其中,CROSS_COMPILE是交叉编译工具链的前缀,根据自己的实际情况修改。如果前面的步骤操作正确,uboot就可以顺利编译通过了。


烧写启动


经过前面的移植工作,uboot已经可以正常运行在tqimx6q开发板上了。这个版本的uboot与之前版本的uboot编译出的目标文件不同,具体的烧写指令如下:


sudo dd if=u-boot.imx of=/dev/sdb bs=512 seek=2

启动Log如下:

U-Boot 2013.04-04987-g98fdbdc-dirty (May 01 2015 - 23:15:34)

 

CPU:   Freescale i.MX6Q rev1.2 at 792 MHz

CPU:   Temperature 24 C, calibration data: 0x54e4bb69

Reset cause: POR

Board: MX6Q/SDL-SabreSD

I2C:   ready

DRAM:  1 GiB

MMC:   FSL_SDHC: 0, FSL_SDHC: 1, FSL_SDHC: 2

MMC: no card present

MMC init failed

Using default environment

 

No panel detected: default to Hannstar-XGA

Display: Hannstar-XGA (1024x768)

In:    serial

Out:   serial

Err:   serial

MMC: no card present

mmc0(part 0) is current device

Net:   Phy not found

PHY reset timed out

FEC [PRIME]

Warning: failed to set MAC address

Normal Boot

Hit any key to stop autoboot:  0 

MMC: no card present

mmc0(part 0) is current device

MMC: no card present

Booting from net ...

*** ERROR: `ethaddr' not set

*** ERROR: `ethaddr' not set

Wrong Image Format for bootm command

ERROR: can't get kernel image!

U-Boot > 


总结

经过上文介绍的移植,u-boot已经可以正常启动了。其实,这个版本的uboot移植与之前版本的uboot移植没有太大区别,思路差不多。


推荐阅读

史海拾趣

C&D公司的发展小趣事

为了保持技术领先地位,C&D公司积极与高校、科研机构等开展产学研合作。通过与这些机构的紧密合作,C&D公司不断引进新技术、新工艺和新材料,推动产品的持续创新。同时,公司还鼓励员工参与各种技术创新活动,激发员工的创新热情,为公司的持续发展注入新的活力。

Eurohm Resistors公司的发展小趣事

随着市场的不断扩张和竞争的加剧,Eurohm Resistors始终坚持品质至上的原则。公司建立了严格的质量控制体系,从原材料采购到生产流程,再到成品检验,每一个环节都严格把关。这种对品质的坚守不仅赢得了客户的信任,也为公司赢得了良好的口碑。

Flamar公司的发展小趣事

Flamar公司自成立以来,始终将技术创新视为企业发展的核心驱动力。在电子元件领域,公司研发团队成功开发出一种新型高性能磁耦合传送臂,这一创新产品凭借其高效、稳定的传输性能,在半导体设备制造中迅速获得市场认可。通过不断的技术迭代和优化,Flamar公司的磁耦合传送臂逐渐成为行业内的标杆产品,帮助公司在激烈的市场竞争中脱颖而出。

ABB公司的发展小趣事

面对电子行业供应链日益复杂的挑战,Flamar公司高度重视供应链管理和优化工作。公司通过引入先进的供应链管理系统,实现了对原材料采购、生产制造、物流配送等各个环节的精准控制。同时,公司还积极与上下游企业建立长期稳定的合作关系,共同构建高效的供应链生态体系。这些措施有效降低了公司的运营成本,提高了生产效率和产品质量,进一步增强了公司的市场竞争力。

百佳(BAIJIA)公司的发展小趣事

百佳公司深知技术创新是企业发展的核心动力。因此,他们不断加大研发投入,引进先进技术和设备,推动产品的升级换代。通过不断创新,百佳公司成功开发出了一系列具有自主知识产权的电子产品,不仅提升了企业的核心竞争力,也为行业的发展做出了重要贡献。

ABECO公司的发展小趣事

随着全球化进程的加速推进,ABECO开始实施全球化战略。公司积极开拓国际市场,参加各类国际展会和论坛,与全球客户建立联系。同时,公司还加强与国际同行的交流与合作,引进先进的技术和管理经验。通过不断的努力,ABECO逐渐在全球电子行业中树立起了自己的品牌形象,成为了一家具有影响力的跨国公司。


请注意,上述故事是基于已知信息进行的虚构创作,并不代表ABECO公司的真实发展历程。如果您需要更详细和准确的信息,建议直接联系ABECO公司或查阅相关文献资料。

问答坊 | AI 解惑

【赛题大汇总】选录09及往年各省、地区竞赛题目

【赛题大汇总】选录09及往年各省地区竞赛题目,各位有兴趣可以拿来练习预热哦~~ 2008年广西省大学生电子设计竞赛试题 A题:宽带前置放大电路 一、 任务 设计一个前置放大电路,使其在较宽的频带范围内具有良好的直流和交流特性,电路包括输入阻抗匹 ...…

查看全部问答>

双口RAM防止共享冲突的方式

一般双口RAM都提供了两个完全独立的端口,每个端口都有自己的控制线、地址线和数据线,CPU对双口RAM端口的操作等效于对它的外部RAM进行操作。双口RAM在使用上要注意的问题是如何避免两端CPU对同一RAM单元的争用,一般来说,双 ...…

查看全部问答>

使用sqlce.

现在设备的操作系统升级到了windows   ce   5.0.程序在新的操作系统上运行,提示错误“找不到程序集   system.data.sqlce   version=1.0.50000” ?…

查看全部问答>

128*64液晶显示

请问斑竹你贴的128*64液晶屏能直接与F149相连么? 不知F149的空间够不够大?…

查看全部问答>

这里有没有UFO(反重力飞行器)DIY爱好者

因为2012的影响,让我DIY UFO,我准备购买仪表,机器,和材料。不知道这里有没有UFO DIY的路过者,可以交流一下研究结果,与制造步骤。 放个片来点吸引力: …

查看全部问答>

是不是系统问题?

今天看到WindowsCE板块很火,到中午12点就210个帖子了。 就进去看看。可是进入该板块之后发现最新的回复是2011-10-26 是不是系统有问题?…

查看全部问答>

电源设计小贴士 20:注意那些意外谐振响应

简介:注意那些意外谐振响应您曾经将输入电压接通到您的电源却发现它已经失效了吗?短暂的输入电压上升时间和可产生两倍于输入电源电压的高 Q 谐振电路可能会是问题所在。如果您迅速中断感应元件中的电流便会出现类似问题。会出现这类问题的一些情 ...…

查看全部问答>

舵机程序

replyreload += \',\' + 1372493;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

分区PBR详解:分区引导扇区知识

转帖:感谢作者 分区PBR详解: 分区引导扇区知识 一、FAT32的分区引导扇区 分区引导扇区DBR(DOS BOOT RECORD)是由FORMAT高级格式化命令写到该扇区的内容;DBR是由硬盘的MBR装载的程序段。DBR装入内存后,即开始执行该引导程序段,其主要功能 ...…

查看全部问答>

【连载】【ALIENTEK 战舰STM32开发板】STM32开发指南--第六十一章 战舰STM32综合实验

第六十一章 战舰STM32开发板综合实验       前面已经给大家讲了55个实例了,本章将设计一个综合实例,作为本指南的最后一个实验,该实验向大家展示了STM32的强大处理能力,并且可以测试开发板的大部分功能。该实验代码非常多, ...…

查看全部问答>