[IMX6Q][Android5.1]移植笔记 --- kernel移植

转自 http://blog.csdn.net/kris_fei/article/details/50883969

platform: IMX6Q

os: Android 5.1
kernel: 3.14.52



1. 增加dts文件

[plain]  view plain  copy
  1. #cd arch/arm/boot/dts  
  2. #cp imx6q-sabresd.dts ecovacsimx6q-sabresd.dts  
  3. #cp imx6qdl-sabresd.dtsi ecovacsimx6qdl-sabresd.dtsi  
因为这两个文件会被其他dts文件include到,这样删除原始外设信息时,编译就不会报错了。

2. mach type匹配
保证device tree中的值和mach desc结构中的值有相同的一个,
本质上就是匹配里面的compatible属性值是否一致,
否则kernel因为匹配不成功而开机失败。


本例使用imx6平台,对应的dts文件是:
kernel_imx/arch/arm/boot/dts/ecovacsimx6q-sabresd.dts
[cpp]  view plain  copy
  1. / {  
  2.     model = "Freescale i.MX6 Quad SABRE Smart Device Board";  
  3.     compatible = "fsl,imx6q-sabresd""fsl,imx6q";  
  4. };  

对应的mach desc结构在:
kernel_imx/arch/arm/mach-imx/mach-imx6q.c
[cpp]  view plain  copy
  1. DT_MACHINE_START(IMX6Q, "Freescale i.MX6 Quad/DualLite (Device Tree)")  
  2. ......  
  3.     .init_machine   = imx6q_init_machine,  
  4.     .init_late      = imx6q_init_late,  
  5.     .dt_compat   = imx6q_dt_compat,  
  6.     .reserve     = imx6q_reserve,  
  7.     .restart    = mxc_restart,  
  8. MACHINE_END  
  9.   
  10.   
  11. static const char *imx6q_dt_compat[] __initdata = {  
  12.     "fsl,imx6dl",  
  13.     "fsl,imx6q",  
  14.     NULL,  
  15. };  

3. 修改uart
板子和参考方案的uart不一样,需要修改,参考uart1增加uart2的配置。
kernel_imx/arch/arm/boot/dts/ecovacsimx6qdl-sabresd.dtsi
[plain]  view plain  copy
  1. diff --git a/arch/arm/boot/dts/ecovacsimx6qdl-sabresd.dtsi b/arch/arm/boot/dts/ecovacsimx6qdl-sabresd.dtsi  
  2. index d39576b..5e643d3 100644  
  3. --- a/arch/arm/boot/dts/ecovacsimx6qdl-sabresd.dtsi  
  4. +++ b/arch/arm/boot/dts/ecovacsimx6qdl-sabresd.dtsi  
  5. @@ -822,6 +822,13 @@  
  6.                         >;  
  7.                 };  
  8.    
  9. +               pinctrl_uart2: uart2grp {  
  10. +                       fsl,pins = <  
  11. +                               MX6QDL_PAD_GPIO_7__UART2_TX_DATA        0x1b0b1  
  12. +                               MX6QDL_PAD_GPIO_8__UART2_RX_DATA        0x1b0b1  
  13. +                       >;  
  14. +               };  
  15. +  
  16.                 pinctrl_uart5_1: uart5grp-1 {  
  17.                         fsl,pins = <  
  18.                                 MX6QDL_PAD_KEY_COL1__UART5_TX_DATA      0x1b0b1  
  19. @@ -1018,6 +1025,12 @@  
  20.         status = "okay";  
  21.  };  
  22.    
  23. +&uart2 {  
  24. +       pinctrl-names = "default";  
  25. +       pinctrl-0 = <&pinctrl_uart2>;  
  26. +       status = "okay";  
  27. +};  

fsl,pins的解释位于
kernel_imx/Documentation/devicetree/bindings/pinctrl/fsl,imx6q-pinctrl.txt
GPIO的宏定义位于:
kernel_imx/arch/arm/boot/dts/imx6q-pinfunc.h

4. 检查和调试
编译时lunch选项要选择imx6系列的,确保ecovacsimx6q-sabresd.dts
和mach-imx6q.c 有被编译进去。


如果开机kernel没有log,那么可以通过jtag或者reset之后在
u-boot阶段dump kernel log的方法分析原因出在哪里了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值