一,移植步骤
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>; }; } } }