I.MX6Q(TQIMX6Q/TQE9)学习笔记——新版BSP之u-boot移植

作者:网络    软件教程库   2020-05-11

前段时间就开始学习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 #160; #160; #160; #160; #160; #160; #160; #160; arm #160; #160; #160; #160; armv7 #160; #160; #160; mx6q_tqimx6q #160; #160; #160; #160;freescale #160; #160; #160;mx6 #160; #160; #160; #160; #160; #160; 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 */
};

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#39; not set
*** error: `ethaddr#39; not set
wrong image format for bootm command
error: can#39;t get kernel image!
u-boot  
总结
经过上文介绍的移植,u-boot已经可以正常启动了。其实,这个版本的uboot移植与之前版本的uboot移植没有太大区别,思路差不多。有什么问题可以留言。





本文链接:http://blog.csdn.net/girlkoo/article/details/45420977

本文作者:girlkoo

i.mx6q(tqimx6q/tqe9)学习笔记——新版bsp之u-boot移植

原文地址:http://blog.csdn.net/girlkoo/article/details/45420977

软件教程库 该篇文章地址:https://www.itjcku.com/9999/1091339.html

阅读全部内容


Tags:学习笔记新版移植

返回首页



推荐内容

eclipse应用技巧

最近发现eclipse作为ide还是有很多值得探索的使用技巧的,转载一下他人整理好的资源以做分享。 快捷键的使用,加速 ...

Mysql创建数据库的排序规则中文选择哪种编码

mysql中文编码 mysql创建数据库的排序规则 中文 选择哪种编码原文地址:http://blog. ...

线性表简述

一、简单实现增,删,改、查 package datatructs; /** * 表接口 */ public int ...

android测试本地服务调试流程

我今天调试的整个过程 1,安卓发现连不上本地的tomcat 2,使用浏览器直接尝试,发现可以连上 3,怀疑是安卓app和 ...

设计模式1

静态工厂模式,工厂方法模式,抽象工厂模式 工厂方法改进了添加新产品时,静态工厂不满足的开-闭原则;而抽象工厂满足了当产品 ...

c语言文件操作总结

#includelt;stdio.hgt; /********************************** ...

(c#)如果添加的字段中已经有了身份证号码,则年龄和性别和出生年月可得

//把界面文本框里面的身份证号进行提取,以二代身份证为例 model.ecardid = txt_cardno. ...

Scrum时间估算

在新公司里,不懂软件工程的产品经理经常逼迫研发人员作出很不靠谱的时间估算。常见场景有下面这些: 需求未细化的情况下要求给 ...

C++11中uniforminitialization和initializer_list

c++11中出现了uniform initialization的概念: int a1 = {1};//ok int a ...

关于Scrum

最近某些产品经理发出下两周的工作计划的时候,喜欢带上sprint这个字眼,看上去貌似是要走敏捷开发这一套,只可惜,我觉得 ...

输入输出简单解释

;汇编指令,表示程序将被汇编成能在intel386系列及以上的计算机上运行.386;model flat 表明程序使用保 ...

2015第18周五问题即机会

问题即机会,当一切问题都不存在的时候,请问你的机会在哪里? 你能达到怎样的境界,取决于你怎样认识这个世界。对于问题,有人 ...

solr配置方案

http://www.sjsjw.com/kf_cloud/article/44_5945_1823.asp cento ...

什么是二维码?

二维码,业界当然是人人听说,人人用过。 这个话题,我倒是百感交集,我一直认为,我有一种二维码情节。 一方面, 我自认 ...

1475:方格取数

1475: 方格取数 time limit:5 secmemory limit:64 mbsubmit:578solv ...

敏捷开发宣言(一)

原文: inpiduals and interactionsover processes and tools worki ...

(C#)一个项目的配置和增删改查

一、windows窗体项目环境配置步骤 1.文件mdash;gt;新建mdash;gt;项目mdash;gt;windo ...

比例简化

题目描述description 在社交媒体上,经常会看到针对某一个观点同意与否的民意调查以及结果。例如,对某一观点表示 ...

sockaddr和sockaddr_in的区别

struct sockaddr和struct sockaddr_in这两个结构体用来处理网络通信的地址。 在各种系统调用 ...

基于Html5的智能家居手机客户端设计(一)——找到openhab的rest

今天开始我的毕业设计,基于html5的智能家居手机客户端设计。挑剔了好久,终于找到我可以使用国外开源项目智能家居核心 ...

阅读《大道至简--软件工程实践者的思想》有感(3)

阅读完《大道至简--软件工程实践者的思想》,明白了软件与程序的区别,《战国策-秦策》中的那句话,王不如远交而近攻, ...

10条建议让你创建更好的jQuery插件

前言:在开发过很多 jquery 插件以后,我慢慢的摸索出了一套开发jquery插件比较标准的结构和模式。这样我就可以 ...

nexus7升级失败后手动刷系统

http://bbs.gfan.com/android-6934570-1-1.html 步骤如下: 1. 下载a ...

SWUSTOJ爬不出去的水井(0333)

爬不出去的水井(0333) time limit(ms): 1000memory limit(kb): 6 ...

移动端Web开发注意点

不用考虑浏览器兼容性 移动端开发主要对象是手持设备,其中绝大部分是ios和android系统,so,在开发此类页面时不必 ...

CDN云主机与传统虚拟主机功能对比

cdn云主机与传统虚拟主机功能对比   传统的虚拟主机都是单台服务器,一旦机器硬件损坏、ip被封、机房网络故障等,都将导 ...

找斐波那契数列中的第N个数

题目描述 description 用递归的方法求斐波那契数列中的第n个数 输入输出格式input/output 输入格 ...

nginx中ngx_list的数据结构

今天没事了,在查看nginx源代码中看到ngx_list的结构,发现设计为链表数组的形式,不知道为什么这样设计 str ...

C++Primer读书笔记:第11章泛型算法

第11章 泛型算法 1.概述 泛型算法依赖于迭代器,而不是依赖容器,需要指定作用的区间,即[开始,结束),表示的区间,如 ...

eclispse修改项目项目编码

最近遇到问题,在myeclipse新建或导入项目后,有些文件中文显示乱码,每次都要在项目property中修改其编码,所 ...


本网站部分内容来自互联网,版权归原作者所有,文章内容仅代表原作者个人观点。如有侵权请联系我们删除 电子邮件 itjcku@foxmail.com