找回密码
 注册
搜索

【TQIMX6Q教程】新版BSP之kernel移植

已有 60 次阅读2015-5-22 15:48 |个人分类:市场活动| 天嵌, 嵌入式, 开发板

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

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

  1. uart1 {  
  2.         ...  
  3.         pinctrl_uart1_2: uart1grp-2 {  
  4.                 fsl,pins = <  
  5.                         MX6QDL_PAD_SD3_DAT7__UART1_TX_DATA 0x1b0b1  
  6.                         MX6QDL_PAD_SD3_DAT6__UART1_RX_DATA 0x1b0b1  
  7.                 >;  
  8.         };  
  9. };  

  实际上就是在原有uart pinctrl配置的基础上又添加了另外一种配置方式。

 

  (2) 打开tqimx6q.dtsi,将uart1的pinctrl指定为pinctrl_uart1_2。

  1. &uart1 {  
  2.         pinctrl-names = "default";  
  3.         pinctrl-0 = <&pinctrl_uart1_2>;  
  4.         status = "okay";  
  5. };  

  (3) 板载SD卡配置修改

  1. &usdhc2 {  
  2.         pinctrl-names = "default";  
  3.         pinctrl-0 = <&pinctrl_usdhc2_2>;  
  4.         cd-gpios = <&gpio1 4 0>;  
  5.         wp-gpios = <&gpio1 2 0>;  
  6.         no-1-8-v;  
  7.         keep-power-in-suspend;  
  8.         enable-sdio-wakeup;  
  9.         status = "okay";  
  10. };  

  重新指定了pinctrl、cd(card detect)和wp(write protection)端子。

  (4) 板载SD WIFI接口赞改

 

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

  1. &usdhc3 {  
  2.         pinctrl-names = "default";  
  3.         pinctrl-0 = <&pinctrl_usdhc3_2>;  
  4.         cd-gpios = <&gpio2 0 0>;  
  5.         wp-gpios = <&gpio2 1 0>;  
  6.         no-1-8-v;  
  7.         keep-power-in-suspend;  
  8.         enable-sdio-wakeup;  
  9.         status = "okay";  
  10. };  

  Step4. 设置环境变量

  1. export ARCH=arm  
  2. export CROSS_COMPILE=arm-linux-gnueabi- 

  Step5. 配置内核

  1. make imx_v7_defconfig  

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

  1. make menuconfig  

  然后将如下配置项取消:

  1. Boot options  --->  
  2. [*]   Support for the traditional ATAGS boot data passing (NEW)  

  Step6. 编译内核及DTB

 

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

  1. make uImage LOADADDR=0x12000000  

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

  1. make imx6q-tqimx6q.dtb  

  烧写镜像

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

 

  (1) 烧写内核镜像

  1. sudo dd if=uImage of=/dev/sdb bs=512 seek=2048 conv=fsync  

  (2) 烧写DTB文件

  1. sudo dd if=tqimx6q.dtb of=/dev/sdb bs=512 seek=20480 conv=fsync  

  通过以上指令,将zImage烧写到SD卡偏移1M的位置上,讲tqimx6q.dtb烧写到了SD卡偏移10M的位置上。

  启动内核

 

  将SD卡插到开发板后给开发板上电,按任意键打断uboot启动,并按如下内容配置uboot环境变量。

  1. setenv bootargs 'noinitrd console=ttymxc0,115200 root=/dev/mmcblk0p1 rw init=/linuxrc'  
  2. setenv bootcmd 'mmc dev 0; mmc read 0x11ffffc0 0x800 0x3000; mmc read 0x18000000 0x5000 0x800; bootm 0x11ffffc0 - 0x18000000'  
  3. saveenv  

  然后重启开发板即成功启动内核。

  总结

 

  通过以上修改,内核已经可以在开发板上成功启动了。从Log上可以清楚的看到,kernel已经识别到了SD卡,但是不识别分区,后面的文章将讲述如何挂载根文件系统。如有错误,请帮忙指出;有疑问可以留言讨论。


路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

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.

返回顶部