IMX6Q(TQIMX6Q_BASEC_V1) kernel

匿名 (未验证) 提交于 2019-12-03 00:26:01

本文转载自girlkoo 大侠的博客,仅仅修改了设备树gpio_cd引脚的状态 以及 uboot参数。

原文链接如下:

https://blog.csdn.net/girlkoo/article/details/45439687

前篇文章已经在tqimx6q上成功跑起了新版BSP的uboot,本文来配置下新版BSP的kernel,使kernel能在tqimx6q上正常启动。

准备工作

每次移植kernel的时候都会做的工作就是找到与当前开发板接近的config,其实uboot移植的时候也是一样的。由于tqimx6q的芯片是imx6q的,所以,还是以mx6q_sabresd为例。另外,自己动手移植BSP时应该充分使用官方文档,本人以为,以下文档是非常有用的:

(1) i.MX 6 BSP Porting Guide: 该文档详细的记载了BSP移植的流程。


在第二份文章中搜索defconfig,就可以找到imx6q使用的config文件是:imx_v7_defconfig,如果直接在arch/arm/configs目录下grep搜索MX6Q的话,可以搜到三个文件,其实也是可以确认使用哪个配置文件比较合适的。

内核移植

确定好了配置文件,接下看就开始内核移植。本文的目前不是移植好所有的驱动,而是先让内核能够在tqimx6q开发板上跑起来,接下来再去慢慢各个击破驱动。

Step1. 定制DTS

Step2. 修改include文件

用自己熟悉的文本编辑器打开文件mx6q-tqimx6q.dts,然后将imx6qdl-sabresd.dtsi改为tqimx6q.dtsi。

Step3. 定制pinctrl

移植uboot的时候就知道,sabresd开发板的系统uart端子与tqimx6q的是不一致的,而且SD3的端子与tqimx6q的uart端子冲突,因此配置这几个端子的pinctrl即可。其实,我认为freescale维护这个版本的DTB结构不是太好,imx6qdl.dtsi应该是imx6qdl共通的配置,不应该将uart这些pinctrl添加在这里,如果添加在这里的话应该将各种配置情况都罗列出来。本文没有尝试改变这种结构,在现有结构的基础上,尽可能少的修改了DTS文件,具体步骤如下:

打开imx6qdl.dtsi,然后做如下修改:

(1) 打开imx6qdl.dtsi,添加tqimx6q的uart pinctrl配置。

实际上就是在原有uart pinctrl配置的基础上又添加了另外一种配置方式。
(2) 打开tqimx6q.dtsi,将uart1的pinctrl指定为pinctrl_uart1_2。
  1. "default"
  2. "okay"

(3) 板载SD卡配置修改

  1. "default"
  2. "okay"
重新指定了pinctrl、cd(card detect)和wp(write protection)端子。
(4) 板载SD WIFI接口赞改

由于tqimx6q的SD3用户SDIO WIFI,且SD3_DAT7和SD3_DAT6端子用作uart,故需要修改其pinctrl,不至于与uart冲突。我们将SD3的pinctrl暂作如下修改:

  1. "default"
  2. "okay"

Step4. 设置环境变量

Step5. 配置内核由于官方默认方式是使用传统的ATAGS方式传递内核参数的,但为了提高开发效率,本文还是使用了新的DTB方式传递内核参数。为此,需要配置内核,关闭老式ATAGS方式内核参数传递的支持:然后将如下配置项取消:
  1. for
Step6. 编译内核及DTB

修改并保存内核配置项之后就可以尝试编译内核了:

内核编译时间比较长,需耐心等待。内核编译完成后编译DTB:
烧写镜像

内核编译完成后可以得到内核镜像zImage和DTB文件tqimx6q.dtb,接下来我们将这两个文件烧写到SD卡并尝试启动开发板。

(1) 烧写内核镜像

  1. if
(2) 烧写DTB文件
  1. if
通过以上指令,将zImage烧写到SD卡偏移1M的位置上,讲tqimx6q.dtb烧写到了SD卡偏移10M的位置上。
启动内核
将SD卡插到开发板后给开发板上电,按任意键打断uboot启动,并按如下内容配置uboot环境变量。
然后重启开发板即成功启动内核。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!