山高疑日近,海阔觉天低

NXP Kernel移植

一,移植步骤
1.添加开发板默认配置文件:***_defconfig
arch/arm/configs目录下,复制并修改imx_v7_mfg_defconfig,其中imx_v7表示ArmV7构架处理器,包括(I.MX6,I.MX7,I.MX8M).NXP与uBoot不同这个defconfig=uBoot的defconfig+uBoot的板级*.h文件,内核所有的配置都在此,make *_defconfig 与uBoot一样会生成.config文件,
2.添加开发板对应的设备树dts:imx6ull-14×14-evk.dts
arch/arm/boot/dts下,复制并修改imx6ull-14×14-evk.dts。 需要修改当前文件夹下的Makefile,Makefile决定到底要编译那些dts文件,在dtb-$(CONFIG_SOC_IMX6ULL)中增加一行*.dtb,这样编译会产生相应的dtb文件到当前文件夹,特别注意dts文件第一行是#include “imx6ull.dtsi”,这个文件也在当前目录,是imx的基础设备树。make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs可以单独生成dtb文件,注意执行这条命令时.config必须存在。
强烈建议删除不必要的dsi文件,

//然后删除
find /path/to/directory -type f -not -name "imx6u*" -exec rm -f {} \;
//注意Makefile文件,Makefile可以写成如下形式,对的就是真么几行,不修改Makefile会出错 
dtb-$(CONFIG_SOC_IMX6UL) += imx6ull-HH-nand.dtb  imx6ull-HH-emmc.dtb 
//正常情况需要 一下几个文件:

3.根目录增加脚本:*.sh

#!/bin/bash
export PARA_ZHANG=ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
export CPUS=`grep -c processor /proc/cpuinfo`  //获取cpu核心数
#make ${PARA_ZHANG} distclean
#make ${PARA_ZHANG} imx_zhang_emmc_defconfig
make ${PARA_ZHANG} imx_v6_v7_defconfig  //指明配置文件
make ${PARA_ZHANG} menuconfig
#make ${PARA_ZHANG} all -j${CPUS}
make ${PARA_ZHANG} zImage -j${CPUS}
make ${PARA_ZHANG} dtbs -j${CPUS}

rm -rf ./.tmp
make ${PARA_ZHANG} modules -j${CPUS}
make ${PARA_ZHANG} modules_install INSTALL_MOD_PATH=./.tmp/rootfs/
cd .tmp/rootfs/
tar -jcvf modules.tar.bz2 *

cd ../../
mkdir -p ./.tmp/image
cp ./arch/arm/boot/zImage ./.tmp/image/
cp ./.tmp/rootfs/modules.tar.bz2 ./.tmp/image
echo " "
echo "img copy complete"
cp ./arch/arm/boot/dts/okmx6ull-s-nand.dtb ./.tmp/image
cp ./arch/arm/boot/dts/okmx6ull-s-emmc.dtb ./.tmp/image

echo -e "3[44;37;5m finish 3[0m"

最终在arch/arm/boot 下生成 zImage 镜像文件。在 arch/arm/boot/dts 目录下生成 imx6ull-alientek-emmc.dtb 文件

二,设备树
1.数据格式
① 字符串
compatible = “arm,cortex-a7”; 上述代码设置 compatible 属性的值为字符串“arm,cortex-a7”。
② 32 位无符号整数
reg = <0>; 上述代码设置 reg 属性的值为 0,reg 的值也可以设置为一组值,比如: reg = <0 0x123456 100>;
③ 字符串列表
属性值也可以为字符串列表,字符串和字符串之间采用“,”隔开,如下所示: compatible = “fsl,imx6ull-gpmi-nand”, “fsl, imx6ul-gpmi-nand”;
上述代码设置属性 compatible 的值为“fsl,imx6ull-gpmi-nand”和“fsl, imx6ul-gpmi-nand”。
2.典型设备树

/ {
compatible = "fsl,imx6ull-alientek-evk", "fsl,imx6ull";
cpus {
  #address-cells = <1>;
  #size-cells = <0>;

  //CPU0 节点
  cpu0: cpu@0 {
    compatible = "arm,cortex-a7";
    device_type = "cpu";
    reg = <0>;
  };
};
//soc 一级节点
soc {
  #address-cells = <1>;
  #size-cells = <1>;
  compatible = "simple-bus";
  ranges;
  //ocram 二级节点
  ocram: sram@00900000 {
    compatible = "fsl,lpm-sram";
    reg = <0x00900000 0x20000>;
  };
  //aips1 二级节点
  aips1: aips-bus@02000000 {
    compatible = "fsl,aips-bus", "simple-bus";
    #address-cells = <1>;
    #size-cells = <1>;
    reg = <0x02000000 0x100000>;
    ranges;
    //ecspi1 三级节点
    ecspi1: ecspi@02008000 {
      #address-cells = <1>;
      #size-cells = <0>;
      compatible = "fsl,imx6ul-ecspi", "fsl,imx51-ecspi";
      reg = <0x02008000 0x4000>;
      status = "disabled";
    };
  }

  //aips2 二级节点
  aips2: aips-bus@02100000 {
    compatible = "fsl,aips-bus", "simple-bus";
    #address-cells = <1>;
    #size-cells = <1>;
    reg = <0x02100000 0x100000>;
    ranges;
    //usbotg1 三级节点
    usbotg1: usb@02184000 {
      compatible = "fsl,imx6ul-usb", "fsl,imx27-usb";
      reg = <0x02184000 0x4000>;
      status = "disabled";
    };
  }

  //aips3 二级节点
  aips3: aips-bus@02200000 {
    compatible = "fsl,aips-bus", "simple-bus";
    #address-cells = <1>;
    #size-cells = <1>;
    reg = <0x02200000 0x100000>;
    ranges;
    //rngb 三级节点
    rngb: rngb@02284000 {
      compatible = "fsl,imx6sl-rng", "fsl,imx-rng", "imxrng";
      reg = <0x02284000 0x4000>;
    };
  }
}
}
赞(0) 打赏
未经允许不得转载:Mr.Zhang » NXP Kernel移植

你的打赏是我的动力

登录

找回密码

注册