uboot 适配

参考芯片厂商的 SDK。

厂商 SDK 的 uboot 测试

首先编译一下。

NXP 的配置,mx6ull_14x14_evk_emmc_defconfig

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

同样的,也可以把上面的命令写进一个脚本。

也可以在顶层 Makefile 里直接给传入的参数赋值。

对于一个开发板,要运行 uboot ,必须要支持的东西

  • DDR

  • UART

  • 支持的不同的启动介质

    • SD 卡

    • MMC

    • NAND Flash

这些设备东西如果和官方的一样,那么芯片原厂的 uboot 是能在自己的开发板上跑起来的。只是有些地方会提示有问题。

烧写 uboot 到 SD 卡

可以看到,屏幕背点亮了,但是有些异常。NXP 配的屏幕是 480x272 的屏幕。

此外,查看 uboot 日志,首先能看到日志说明串口驱动没问题。

可以看到,DRAM 识别出来了,Net 初始化失败,mmc 通过命令测试驱动正常,SD 必然正常。

所以,接下来移植这套代码,要把不正常的驱动改正常。即在官方开发板修改使得支持自己的开发板。

适配自己的开发板

1.开发板 config 文件

configs 中都是已经有的板的配置文件,在这里以官方板为基础添加一个新的。

基于 mx6ull_14x14_evk_emmc_defconfig 来修改,可以改成自己的开发板的名字。这里改成 mx6ull_14x14_mini_emmc_defconfig,对此文件要做一些修改。

这个配置文件使用了一些配置文件。整个复制一份,进行适配,

修改配置文件为

2.配置头文件

3.板级配置文件

4.Kconfig

编译测试

LCD 适配

1.LCD IO

2.LCD 参数

ATK4384 显示屏参数

  • HSPW(thp) hsync_len:48

  • HBP(thb) left_margin:88

  • HFP(thf) right_margin:40

  • VSPW(tvp) vsync_len:3

  • VBP(tvb) upper_margin:32

  • VFP(tvf) lower_margin:13

  • CLOCK:31 MHz

修改 mx6ull_mini.c

3.uboot环境变量

修改 include/configs/mx6ull_mini.h 里的 panel 环境变量为 TFT4384

编译烧录测试。

网络驱动修改

网络方案。

IMX6ULL 内部有以太网 MAC 外设,需要外接一个 PHY 芯片。

在内部无 MAC 的芯片中,使用外接的 MAC+PHY ,如 DM9000 有一个类似 SRAM 的接口。W5500 使用 SPI 接口实现通信。

内部 MAC 的速度会快相当多,内部 MAC 会集成 DMA。具体的可以取看手册。

NXP EVK 使用的 PHY 为 KSZ8081,我手里这块板为 SR8201F,所以 uboot 启动会提示网络初始化失败。

MDIO 作为 PHY 的管理接口,用两根线实现与芯片通信,SDIO 和 SDC。

1.引脚

ENET2_RESET

2.器件ID

boot 测试

uboot 最终目的,启动 kernel,

从 EMMC 启动

现在的 uboot 在 SD 卡中。要去启动 MMC 中的 kernel,kernel 已经烧写在 mmc 了,要确定这里有内核。

先确定mmc 中有内核 fatls mmc 1:1

启动后,内核可以启动起来,但是有点小问题,还需要设置环境变量,指定根文件系统的位置。

可以把这个命令设置为自动运行的启动命令。

此外,还可以在屏幕上也启动一个控制台。

setenv bootargs 'console=tty1 console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'

网络启动

最后更新于

这有帮助吗?