Uboot移植(一)

一个开发板运行uboot,DDR或者DRAM,串口,SD/EMMC等驱动要存在。这些基本要和原厂一样的
 
nxp官方uboot下载地址:https://github.com/Freescale/u-boot-fslc
 
nxp官方uboot执行结果:
1、uboot能正常启动,串口和SD/EMMC工作正常
2、LCD需要修改
3、网络需要调试
 

uboot中添加新的开发板

1、添加板子默认配置文件

添加编译脚本:make_alentek.sh
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_emmc_alentek_defconfig make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16
添加_defconfig文件:mx6ull_14x14_evk_emmc_alentek_defconfig
CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ullevk_alentek/imximage.cfg,MX6ULL_EVK_EMMC_REWORK" CONFIG_ARM=y CONFIG_ARCH_MX6=y CONFIG_TARGET_MX6ULL_14X14_ALENTEK=y CONFIG_CMD_GPIO=y
注:.imx文件在.bin文件加的头部信息就是在imximage.cfg中,也就是初始化时钟、DDR等操作
 

2、添加板级文件

board/freescale目录下添加:mx6ullevk_alentek/imximage.cfg
arch/arm/cpu/armv7/mx6/Kconfig汇总全部Kconfig配置文件,在 Kconfig 文件中,"source" 命令用于引入其他 Kconfig 文件的内容
 

3、Uboot LCD驱动修改

1、确定LCD IO初始化正确
2、LCD参数,fb_videomode表示RGBLCD屏的参数
struct fb_videomode { const char *name; /* optional */ u32 refresh; /* optional */ u32 xres; u32 yres; u32 pixclock; u32 left_margin; u32 right_margin; u32 upper_margin; u32 lower_margin; u32 hsync_len; u32 vsync_len; u32 sync; u32 vmode; u32 flag; };
3、修改环境变量panel
printenv panel 命令用于打印名为 "panel" 的环境变量的值,panel环境变量表示LCD ID
 

4、Uboot网络驱动修改

GMAC和PHY基础知识可参考:https://www.cnblogs.com/lethe1203/p/18088155

正点原子以太网网络方案:
IMX6UL/ULL内部有个以太网MAC外设,也就是ENET,需要外接一个PHY芯片来实现网络通信功能,也就是内部MAC+外部PHY芯片方案,一般CPU内部的MAC是带有一个专用的DMA
6ULL官方开发板使用的PHY芯片及时KSZ081,正点原子使用的PHY芯片为LAN8720A。因为需要在uboot网络驱动
硬件原理图如下:
0
LAN8720有一个管理接口,称为MDIO,两根线,MDIO和MDC,一个MDIO接口可以管理32哥PHY芯片,MDIO通过PHY ADDR来决定访问哪一个PHY芯片,ENET1的PHY ADDR是0x0,ENET2的PHY ADDR是0x2。每个LANE8720都有一个复位引脚。
IEEE802.3规定1了地址0-15共16个寄存器的功能,因此就存在通用PHY芯片。因此uboot里面已经写好了通用PHY驱动,所以理论上不需要修改
修改ENET2 网络驱动的话重点就三点
  • ENET2 复位引脚初始化
  • LAN8720A 的器件 ID
  • LAN8720 驱动
 
通过ping主机和网络下载来测试网络功能是否正常
 
 
 
posted @ 2024-03-21 20:20  lethe1203  阅读(25)  评论(0编辑  收藏  举报