将NXP官方Linux kernel移植到自己的开发板

NXP官方kernel编译

1、安装库

sudo apt-get install lzop
2、官网获取kernel包  linux-imx-4.1.15-2.1.0-g8a006db.tar.bz2
解压缩:
tar -vxjf linux-imx-4.1.15-2.1.0-g8a006db.tar.bz2
3、根目录创建脚本文件 mx6ull_alientek_emmc.sh
1 # ! /bin/sh
2 make ARCH = arm CROSS_COMPILE = arm - linux - gnueabihf - distclean
3 make ARCH = arm CROSS_COMPILE = arm - linux - gnueabihf - imx_v7_defconfig
4 make ARCH = arm CROSS_COMPILE = arm - linux - gnueabihf - menuconfig
5 make ARCH = arm CROSS_COMPILE = arm - linux - gnueabihf - all - j16
赋予运行权限
chmod 777  mx6ull_alientek_emmc.sh
./mx6ull_alientek_emmc.sh
编译的过程中会弹出kernel编译的图形配置界面,
按两下esc退出,继续编译。编译完成界面:
Linux 内核编译完成以后会在 arch/arm/boot 目录下生成 zImage 镜像文件。

NXP官方kernel移植到自己的开发板

将官方的kernel包重命名

mv linux-imx-rel_imx_4.1.15_2.1.0_ga linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek

修改顶层 Makefile

直接在顶层 Makefile 文件里面定义 ARCH CROSS_COMPILE 这两
个的变量值为 arm arm-linux-gnueabihf-

配置并编译 Linux 内核

make clean
make imx_v7_mfg_defconfig   //配置 Linux 内核
make -j16 //编译linux内核
Linux 内核编译完成以后会在 arch/arm/boot 目录下生成 zImage 镜像文件,如果使用设备树
的话还会在 arch/arm/boot/dts 目录下开发板对应的 .dtb( 设备树 ) 文件,比如 imx6ull-14x14-evk.dtb
就是 NXP 官方的 I.MX6ULL EVK 开发板对应的设备树文件。至此我们得到两个文件:
①、 Linux 内核镜像文件: zImage
②、 NXP 官方 I.MX6ULL EVK 开发板对应的设备树文件: imx6ull-14x14-evk.dtb

根文件系统缺失错误

Linux 内核启动以后是需要根文件系统的,根文件系统存在哪里是由 uboot bootargs 环境
变 量 指 定 , bootargs 会 传 递 给 Linux 内 核 作 为 命 令 行 参 数 。 比 如 上 一 小 节 设 置
root=/dev/mmcblk1p2 ,也就是说根文件系统存储在 /dev/mmcblk1p2 中,也就是 EMMC 的分区 2
中。
如果新做的板子,那么第一次上电是没有 根文件系统的
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

添加开发板默认配置文件

arch/arm/configs 目 录 下 的 imx_v7_mfg_defconfig 重 新 复 制 一 份 , 命 名 为
imx_alientek_emmc_defconfig ,命令如下:
cd arch/arm/configs
cp imx_v7_mfg_defconfig imx_alientek_emmc_defconfig
打开 imx_alientek_emmc_defconfig 文件,找到“ CONFIG_ARCH_MULTI_V6=y ”这一行,
将其屏蔽掉
因为 I.MX6ULL ARMV7 架构的,因此要屏蔽掉 V6 相关选项。
使用如下命令来配置正点原子 EMMC 版开发板对应的 Linux 内核了:
make imx_alientek_emmc_defconfig

添加开发板对应的设备树文件

1、进入目录 arch/arm/boot/dts 中,复制一
imx6ull-14x14-evk.dts ,然后将其重命名为 imx6ull-alientek-emmc.dts ,命令如下:
cd arch/arm/boot/dts
cp imx6ull-14x14-evk.dts imx6ull-alientek-emmc.dts/
2、修 改 文 件 arch/arm/boot/dts/Makefile , 找 到 “ dtb-
$(CONFIG_SOC_IMX6ULL) ”配置项,在此配置项中加入“ imx6ull-alientek-emmc.dtb
422 行为“ imx6ull-alientek-emmc.dtb ”,这样编译 Linux 的时候就可以从 imx6ull-alientek
emmc.dts 编译出 imx6ull-alientek-emmc.dtb 文件。

编译测试

创 建 一 个 编 译 脚 本 ,
imx6ull_alientek_emmc.sh ,脚本内容如下:
1 # ! /bin/sh
2 make ARCH = arm CROSS_COMPILE = arm - linux - gnueabihf - distclean
3 make ARCH = arm CROSS_COMPILE = arm - linux - gnueabihf
imx_alientek_emmc_defconfig
4 make ARCH = arm CROSS_COMPILE = arm - linux - gnueabihf - menuconfig
5 make ARCH = arm CROSS_COMPILE = arm - linux - gnueabihf - all - j16
赋予权限和执行
chmod 777 imx6ull_alientek_emmc.sh   //给予可执行权限
./imx6ull_alientek_emmc.sh

修改emm为8bit传输数据

Linux 内核驱动里面 EMMC 默认是 4 线模式的, 4 线模式肯定没有 8 线模式的速度快,所
以本节我们将 EMMC 的驱动修改为 8 线模式。修改方法很简单,直接修改设备树即可,打开文
imx6ull-alientek-emmc.dts ,找到如下所示内容
734 & usdhc2 {
735 pinctrl - names = "default" ;
736 pinctrl - 0 = <& pinctrl_usdhc2 >;
737 non - removable ;
738 status = "okay" ;
739 };
修改为如下内容:
734 & usdhc2 {
735 pinctrl - names = "default" , "state_100mhz" , "state_200mhz" ;
736 pinctrl - 0 = <& pinctrl_usdhc2_8bit >;
737 pinctrl - 1 = <& pinctrl_usdhc2_8bit_100mhz >;
738 pinctrl - 2 = <& pinctrl_usdhc2_8bit_200mhz >;
739 bus - width = < 8 >;
740 non - removable ;
741 status = "okay" ;
742 };
修改1.8V供电到3.3V供电
734 & usdhc2 {
735 pinctrl - names = "default" , "state_100mhz" , "state_200mhz" ;
736 pinctrl - 0 = <& pinctrl_usdhc2_8bit >;
737 pinctrl - 1 = <& pinctrl_usdhc2_8bit_100mhz >;
738 pinctrl - 2 = <& pinctrl_usdhc2_8bit_200mhz >;
739 bus - width = < 8 >;
740 non - removable ;
741 no-1-8-v ;
742 status = "okay" ;
743 };
741 行就是加入的“ no-1-8-v ”选项。
修改完成以后保存一下 imx6ull-alientek-emmc.dts ,然后使用命令“ make dtbs ”重新编译一
下设备树,编译完成以后使用新的设备树重启 Linux 系统即可。不需要重新编译linux内核。
  • 18
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值