||
前篇文章已经在tqimx6q上成功跑起了新版BSP的uboot,本文来配置下新版BSP的kernel,使kernel能在tqimx6q上正常启动。
准备工作
每次移植kernel的时候都会做的工作就是找到与当前开发板接近的config,其实uboot移植的时候也是一样的。由于tqimx6q的芯片是imx6q的,所以,还是以mx6q_sabresd为例。另外,自己动手移植BSP时应该充分使用官方文档,本人以为,以下文档是非常有用的:
(1) i.MX 6 BSP Porting Guide: 该文档详细的记载了BSP移植的流程。
(2) i.MX 6 SABRE-SD Linux User's Guide: 该文档详细的记载了各种启动介质的制作方法。
在第二份文章中搜索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。
(3) 板载SD卡配置修改
重新指定了pinctrl、cd(card detect)和wp(write protection)端子。
(4) 板载SD WIFI接口赞改
由于tqimx6q的SD3用户SDIO WIFI,且SD3_DAT7和SD3_DAT6端子用作uart,故需要修改其pinctrl,不至于与uart冲突。我们将SD3的pinctrl暂作如下修改:
Step4. 设置环境变量
Step5. 配置内核
由于官方默认方式是使用传统的ATAGS方式传递内核参数的,但为了提高开发效率,本文还是使用了新的DTB方式传递内核参数。为此,需要配置内核,关闭老式ATAGS方式内核参数传递的支持:
然后将如下配置项取消:
Step6. 编译内核及DTB
修改并保存内核配置项之后就可以尝试编译内核了:
内核编译时间比较长,需耐心等待。内核编译完成后编译DTB:
烧写镜像
内核编译完成后可以得到内核镜像zImage和DTB文件tqimx6q.dtb,接下来我们将这两个文件烧写到SD卡并尝试启动开发板。
(1) 烧写内核镜像
(2) 烧写DTB文件
通过以上指令,将zImage烧写到SD卡偏移1M的位置上,讲tqimx6q.dtb烧写到了SD卡偏移10M的位置上。
启动内核
将SD卡插到开发板后给开发板上电,按任意键打断uboot启动,并按如下内容配置uboot环境变量。
然后重启开发板即成功启动内核。
总结
通过以上修改,内核已经可以在开发板上成功启动了。从Log上可以清楚的看到,kernel已经识别到了SD卡,但是不识别分区,后面的文章将讲述如何挂载根文件系统。如有错误,请帮忙指出;有疑问可以留言讨论。
Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )
GMT+8, 2024-6-28 07:58 , Processed in 0.029643 second(s), 17 queries , Gzip On.
Powered by Discuz! X3.5
© 2001-2023 Discuz! Team.