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

前篇文章已经在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

cp imx6q-sabresd.dts imx6q-tqimx6q.dts
cp imx6qdl-sabresd.dtsi tqimx6q.dtsi
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配置。

uart1 {
		...
		pinctrl_uart1_2: uart1grp-2 {
				fsl,pins = <
						MX6QDL_PAD_SD3_DAT7__UART1_TX_DATA 0x1b0b1
						MX6QDL_PAD_SD3_DAT6__UART1_RX_DATA 0x1b0b1
				>;
		};
};
实际上就是在原有uart pinctrl配置的基础上又添加了另外一种配置方式。
(2) 打开tqimx6q.dtsi,将uart1的pinctrl指定为pinctrl_uart1_2。

&uart1 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_uart1_2>;
        status = "okay";
};

(3) 板载SD卡配置修改

&usdhc2 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_usdhc2_2>;
        cd-gpios = <&gpio1 4 0>;
        wp-gpios = <&gpio1 2 0>;
        no-1-8-v;
        keep-power-in-suspend;
        enable-sdio-wakeup;
        status = "okay";
};
重新指定了pinctrl、cd(card detect)和wp(write protection)端子。
(4) 板载SD WIFI接口赞改

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

&usdhc3 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_usdhc3_2>;
        cd-gpios = <&gpio2 0 0>;
        wp-gpios = <&gpio2 1 0>;
        no-1-8-v;
        keep-power-in-suspend;
        enable-sdio-wakeup;
        status = "okay";
};

Step4. 设置环境变量

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-

Step5. 配置内核

make imx_v7_defconfig
由于官方默认方式是使用传统的ATAGS方式传递内核参数的,但为了提高开发效率,本文还是使用了新的DTB方式传递内核参数。为此,需要配置内核,关闭老式ATAGS方式内核参数传递的支持:

make menuconfig
然后将如
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值