uboot移植

一、NXP官方Uboot编译与测试
1、将NXP提供的uboot拷贝到ubuntu中。

一个开发板也好运行uboot,DDR或者叫DRAM,串口,SD、EMMC、NAND。板子能工作。

测似结果:
1、uboot能正常启动
2、LCD驱动要根据所使用的屏幕修改。
3、NET初始化失败。

二、移植NXP官方uboot到ALPHA开发板
2.1 添加板子默认配置文件
借鉴NXP官方6ULL EVK开发板,默认配置文件也用他的,

2.2添加板子对应的头文件
不同的板子,有一些需要配置的信息,一般是在一个头文件里面配置,每个板子有一个。对于NXP官方的6ULL EVK板子,这个头文件就是

2.3 添加板子对应的板级文件夹
每个板子都有特有的文件,也叫做板级文件。这里我们将6ULL EVK的板级文件直接拷贝过来。

2.4 修改uboot的配置界面

2.5 使用新添加的板子配置并编译Uboot

2.6 LCD驱动修改
1、确定LCD IO初始化正确,mx6ull_alientek_emmc.c中的lcd_pads。
2、LCD参数,mx6ull_alientek_emmc.c中的displays。fb_videomode表示RGB LCD参数。
MX6ULL_LCDIF1_BASE_ADDR (AIPS2_OFF_BASE_ADDR + 0x48000)
AIPS2_OFF_BASE_ADDR (ATZ2_BASE_ADDR + 0x80000)
ATZ2_BASE_ADDR AIPS2_ARB_BASE_ADDR
AIPS2_ARB_BASE_ADDR 0x02100000
MX6ULL_LCDIF1_BASE_ADDR = 0x02100000 + 0x80000 + 0x48000 = 0x21c8000

Panel环境变量表示LCD ID。

2.7 网络驱动修改
6ULL网络方案采用内部MAC+外部PHY,6ULL官方开发板使用的PHY芯片就是KSZ8081。正点原子的ALPHA开发板没有使用KSZ8081,我们使用的LAN8720A。因此要修改驱动。
LAN872有一个管理接口,叫做MDIO,两根线,MDIO和MDC,一个MDIO接口可以管理32个PHY芯片。MIDO通过PHY ADDR来确定访问那个PHY芯片。ALPHA开发板ENET1的PHY ADDR是0x0,ENET2的PHY ADDR是0X1.
每个LAN8720都有一个复位引脚,ENET1是SNVS_TAMPER7,ENET2是SNVS_TAMPER8。

LAN8720驱动,因为所有的PHY,其前32个寄存器一模一样,因此uboot里面已经写好了通用PHY驱动,所以理论上不需要修改。

驱动修改
1、修改PHY ADDR
2、删除原有的74LV595相关代码。
3、添加ALPHA开发板的网络复位IO

2.8 其他需要修改的地方

三、bootcmd和bootargs环境变量
3.1 bootcmd环境变量
宏CONFIG_BOOTCOMMAND也可以设置bootcmd的值。

   "run findfdt;" \
   "mmc dev ${mmcdev};" \
   "mmc dev ${mmcdev}; if mmc rescan; then " \
	   "if run loadbootscript; then " \
		   "run bootscript; " \
	   "else " \
		   "if run loadimage; then " \
			   "run mmcboot; " \
		   "else run netboot; " \
		   "fi; " \
	   "fi; " \
   "else run netboot; fi"

Findfdt 设置fdt_file环境变量,也就是dtb文件名字。

mmc dev 1 //切换到emmc
fatload mmc 1:1 80800000 zImage
fatload mmc 1:1 83000000 imx6ull-14x14-evk.dtb
booz 80800000 - 83000000

"loadbootscript=" \
	"fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};\0" \
展开以后:fatload mmc 1:1 80800000 boot.scr

loadimage=fatload mmc m m c d e v : {mmcdev}: mmcdev:{mmcpart} ${loadaddr} ${image}\0"
展开:fatload mmc 1:1 80800000 zImage

“loadfdt=fatload mmc m m c d e v : {mmcdev}: mmcdev:{mmcpart} ${fdt_addr} ${fdt_file}\0”
展开
fatload mmc 1:1 83000000 imx6ull-14x14-evk.dtb

bootz ${loadaddr} - ${fdt_addr};
booz 80800000 - 83000000

3.2 bootargs环境变量
宏CONFIG_BOOTARGS也可以设置bootargs的值

mmcargs=setenv bootargs console= c o n s o l e , {console}, console,{baudrate} "
CONFIG_BOOTARGS_CMA_SIZE
“root=${mmcroot}\0”
展开以后就是:
bootargs console= ttymxc0,115200 root=/dev/mmcblk1p2

Bootargs是会传递给Linux内核,设置了一些东西

Bootargs环境变量也叫做命令行参数。

四、uboot启动Linux测试
4.1 从EMMC启动
1、首先查看EMMC里面是否有系统,linux镜像zImage和.dtb文件。先将当前设备切换到EMMC:
mmc dev 1 //切换到EMMC
fatls mmc 1:1 //查看EMMC分区1里面的文件
fatload mmc 1:1 80800000 zImage //将zimage下载到DDR的0x80800000处
fatload mmc 1:1 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb //将dtb读取到0X83000000
bootz 80800000 – 83000000 //启动内核

如果内核启动成功,说明uboot支持emmc启动,验证成功。

4.2 从网络启动
tftp 80800000 zImage //从tftp服务器下载zimage
tftp 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb //从tftp服务器下载.dtb
bootz 80800000 – 83000000 //启动系统

五、uboot DDR初始化
1、裸 机
imxdownload软件下载,会在bin文件头部添加IVT DCD数据,

2、uboot
uboot编译生成u-boot.imx。u-boot.imx已经包含了IVT DCD数据。
u-boot.imx的头部信息是怎么添加的?
u-boot.imx的DCD中的DDR初始化代码该怎么修改。
uboot编译会输出

./tools/mkimage -n board/freescale/mx6ull_alientek_emmc/imximage.cfg.cfgtmp -T imximage -e 0x87800000 -d u-boot.bin u-boot.imx

可以看出uboot使用/tools/mkimage工具,向u-boot.bin添加board/freescale/mx6ull_alientek_emmc/imximage.cfg.cfgtmp文件信息,从而得到u-boot.imx。

默认只有imximage.cfg文件,imximage.cfg里面保存的就是DCD数据。DDR初始化也此文件里面。
我们要修改DDR初始化代码,就需要修改imximage.cfg文件。此文件默认拷贝的NXP给IMX6ULL EVK开发板写的,默认是给512MB DDR3L写的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值