前言
uboot 移植的一般流程:
①、在 uboot 中找到参考的开发平台,一般是原厂的开发板。
②、参考原厂开发板移植 uboot 到我们所使用的开发板上。
正点原子的 I.MX6ULL 开发板参考的是 NXP 官方的 I.MX6ULL EVK 开发板做的硬件,所以本讲我们先使用NXP 官方开发板 uboot 进行编译测试,能跑起来的基础上再去移植、修改,学习如何在 uboot 中添加我们自己的板子。
官方 uboot 测试
将NXP 官方 I.MX6ULL EVK 开发板的 uboot ,直接拿到正点原子 EMMC 版本 I.MX6ULL开发板上,能跑起来吗?让我们来试试。
将 NXP官方源码 uboot-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2 发送到 Ubuntu中并解压,然后创建 VSCode 工程。
在移植之前,我们先编译一下 NXP 官方 I.MX6ULL EVK 开发板对应的 uboot。
配置uboot
configs 目录下有很多跟 I.MX6UL/6ULL 有关的配置如图:
根据自己购买的开发板型号选择相应的文件,这里我使用 mx6ull_14x14_evk_emmc_defconfig 作为默认配置文件。
编译uboot
可以使用如下命令编译:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16
编译结果如下:
为了简化流程,可以直接在顶层 Makefile 中直接给 ARCH 和CORSS_COMPILE 赋值。
在顶层 Makefile 中添加如下:
就可以使用如下命令来编译:
make mx6ull_14x14_evk_emmc_defconfig
make V=1 -j16
或者另一种方法:创建个shell 脚本名为 mx6ull_14x14_emmc.sh,脚本内容如下:
#!/bin/bash
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16
编译的时候就可以直接执行这个脚本,命令如下:
./mx6ull_14x14_emmc.sh
烧写验证
将 imxdownload 软件拷贝到 uboot 源码根目录下,然后使用 imxdownload 软件将 u-boot.bin烧写到 SD 卡中,烧写命令如下:
chmod 777 imxdownload //给予 imxdownload 可执行权限
./imxdownload u-boot.bin /dev/sda
设置开发板从 SD卡启动,连接串口工具,打印如下:
可以知道: NXP 官方 I.MX6ULL 开发板的uboot,在正点原子的 I.MX6ULL 开发板上是可以正常启动的。
检查驱动
检查SD 卡和 EMMC 驱动:
输入以下命令:
mmc dev 0 //mmc dev 1
mmc info
mmc 设备 0 是 SD 卡,mmc 设备 1 为 EMMC,检查结果正确。
检查LCD 驱动
我没有买屏幕,但官方例程是这样说的:uboot 里面的 LCD 驱动默认是给 4.3 寸 480x272 分辨率的,如果使用的其他分辨率的屏幕需要修改驱动。
检查网络驱动
网络正常情况下会打印如下信息:
但我们uboot启动时,提示“Board Net Initialization Failed”和“No ethernet found.”这两行。说明当前 uboot 的网络部驱动也是有问题的。
这是因为正点原子开发板的网络芯片复位引脚和 NXP 官方开发板不一样,因此需要修改驱动。
总结
①、 uboot 启动正常, DRAM 识别正确, SD 卡和 EMMC 驱动正常。
②、 uboot 里面的 LCD 驱动默认是给 4.3 寸 480x272 分辨率的,如果使用的其他分辨率的屏幕需要修改驱动。
③、网络不能工作,识别不出来网络信息,需要修改驱动。
下一讲内容就来解决这些问题。