如何将自己的linux板卡信息添加到linux内核呢?
本章,我也是通过修改第三方半导体厂商开发板提供的 Linux BSP 包移植到我们自己的平台上。我选择的是nxp厂商官方的evk开发板,使用他们官方的内核修改为自己板卡的内核。
添加开发板默认配置文件
在编译linux内核之前,也要像编译uboot一样,需要先用配置文件设置好参数,这里我选择复制imx_v7_mfg_defconfig文件,因为通过这个文件配置出来的内核可以使用nxp提供的一个mfgtool工具进行烧录下载,非常方便。
将 目 录 下 的 imx_v7_mfg_defconfig 重 新 复 制 一 份 , 命 名 为imx_myboard_emmc_defconfig
之后就可以通过命令:make imx_myboard_emmc_defconfig来配置我们自己板卡对应的linux内核了。
添加开发板对应的设备树文件
进入目录 arch/arm/boot/dts 中,复制一份 imx6ull-14x14-evk.dts,然后将其重命名为 imx6ull-myboard-emmc.dts
dts 是设备树源码文件,编译 Linux 的时候会将其编译为.dtb 文件。imx6ull-myboard-emmc.dts创 建 好 以 后 我 们 还 需 要 修 改 文 件 arch/arm/boot/dts/Makefile , 找 到 “ dtb-$(CONFIG_SOC_IMX6ULL)”配置项,在此配置项中加入“imx6ull-myboard-emmc.dtb”
这样编译 Linux 的时候就可以从 imx6ull-myboard_emmc.dts 编译出 imx6ull-alientek-emmc.dtb 文件了。
编译测试
接 下 接 编 译 测 试 一 下 , 我 们 可 以 创 建 一 个 编 译 脚 本 ,imx6ull_myboard_emmc.sh:
四个步骤分别为:清理工程、配置linux内核、图形化配置linux内核、编译。
编译完成以后就会在目录 arch/arm/boot 下生成 zImage 镜像文件。在 arch/arm/boot/dts 目录下生成 imx6ull-myboard-emmc.dtb 文件。这两个就是我们需要烧录进开发板的linux镜像以及设备树文件了。
移植Linux内核的基本步骤
关于 Linux 内核的移植就讲解到这里,简单总结一下移植步骤:
①、在 Linux 内核中查找可以参考的板子,一般都是半导体厂商自己做的开发板。
②、编译出参考板子对应的 zImage 和.dtb 文件。
③、使用参考板子的 zImage 文件和.dtb 文件在我们所使用的板子上启动 Linux 内核,看能否启动。
④、如果能启动的话就万事大吉,如果不能启动那就悲剧了,需要调试 Linux 内核。不过一般都会参考半导体官方的开发板设计自己的硬件,所以大部分情况下都会启动起来。启动Linux 内核用到的外设不多,一般就 DRAM(Uboot 都初始化好的)和串口。作为终端使用的串口一般都会参考半导体厂商的 Demo 板。
⑤、修改相应的驱动,像 NAND Flash、 EMMC、 SD 卡等驱动官方的 Linux 内核都是已经提供好了,基本不会出问题。重点是网络驱动,因为 Linux 驱动开发一般都要通过网络调试代码,所以一定要确保网络驱动工作正常。如果是处理器内部 MAC+外部 PHY 这种网络方案的话,一般网络驱动都很好处理,因为在 Linux 内核中是有外部 PHY 通用驱动的。只要设置好复位引脚、 PHY 地址信息基本上都可以驱动起来。
⑥、 Linux 内核启动以后需要根文件系统