100ask imx6ull开发板移植NXP官方Uboot
使用环境:Ubuntu16.04
开发板:100ask imx6ull
uboot镜像:正点原子提供的nxp官方uboot
下载工具:imxdownload工具
参考正点原子的移植教程进行移植uboot,移植成功,且在uboot中启动Linux。
准备阶段: 1. 使用100ask的下载工具将emmc.img烧写到emmc中 2. 准备好TF卡 3. 准备好nxp原厂uboot: 链接: https://pan.baidu.com/s/1abSmlcYJ6iTan6U0XEjtsQ 提取码:4imf
编译阶段:
make distclean
make mx6ull_14x14_evk_emmc_defconfig
make -j12
工具阶段:
-
启动Linux
-
将Linux镜像文件拷贝到DRAM :可以用nfs、tftp、emmc等方式 -
将设备树文件拷贝到DRAM -
使用bootz命令启动 -
使用USB更新Uboot:
-
编译出u-boot-dtb.imx -
拷贝到100ask烧写工具的files目录下 -
连接好OTG线,模式为USB启动 -
查看到已连接后开始更新UBOOT  -
切换成emmc启动,查看UBOOT编译时间是否发生改变  -
SD卡更新UBOOT(正点原子)
-
使用正点原子的烧录工具imxdownload,./imxdownload u-boot.bin /dev/sdb 下载到SD卡中 -
开发板使用SD卡启动,查看UBOOT编译时间是否发生改变 -
使用SD卡更新Uboot(100ask)
-
使用 dd 命令烧写 imx 镜像文件到 /dev/sdb 设备, 注意: 是烧写到 1K 偏移处: sudo dd if=u-boot.imx of=/dev/sdb bs=1k seek=1 conv=fsync -
开发板使用SD卡启动,查看UBOOT编译时间是否发生改变
移植阶段:
- (添加板子默认配置文件) 复制
configs 目录下的默认的配置文件mx6ull_14x14_evk_emmc_defconfig 为mx6ull_100ask_defconfig ,并进行修改

-
(添加板子对应的头文件:不同的板子,有一些需要配置的信息,每个板子有一个)复制include/configs 目录下的mx6ullevk.h 为mx6ull100ask.h ,并进行修改  -
添加开发板对应的板级文件夹(每个板子都有特有的文件,也叫做板级文件),复制board/freescale/mx6ullevk 为mx6ull100ask
-
移动mx6ullevk.c 为mx6ull100ask.c -
修改Makefile为mx6ull100ask.o ,此时才会编译mx6ull100ask.c  -
修改imximage.cfg 文件  -
修改Kconfig文件 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yku5d497-1651721987150)(D:\Note\image\2022-04-29-21-03-58-image.png)]](https://img-blog.csdnimg.cn/7d8d4e3776084e95990fb88dc6d3023b.png) -
修改MAINTAINERS文件 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L44MeP3Y-1651721987151)(image/2022-05-02-11-14-05-image.png)]](https://img-blog.csdnimg.cn/f7011046b94e45b896f540b6909666f4.png) -
修改UBOOT图形配置界面,在arch/arm/cpu/armv7/mx6/Kconfig 目录下添加:配置项和包含Kconfig ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rlu3Kepp-1651721987152)(D:\Note\image\2022-04-29-20-26-25-image.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y7GWFWOu-1651721987154)(D:\Note\image\2022-04-29-20-27-07-image.png)]](https://img-blog.csdnimg.cn/fdce6e8cbd8b445ba3e3820ba3fbba5f.png) -
检查board/freescale/mx6ull100ask/imx100ask.c 是否被编译成.o文件,以及查看nclude/configs/mx6ull100ask.h 是否被引用 -
修改LCD驱动
-
修改board/freescale/mx6ull100ask/mx6ull100ask.c ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AWKuFiOg-1651721987156)(D:\Note\image\2022-04-30-09-49-53-image.png)]](https://img-blog.csdnimg.cn/f8b79acc68554e3dad93ecb1bf369def.png) -
修改include/configs/mx6ull100ask.h ,把所有的panel=TFT43AB 换成100askTFT (panel的值要与.c中的.name的值一样) ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E6sSMGbV-1651721987158)(D:\Note\image\2022-04-30-09-56-16-image.png)]](https://img-blog.csdnimg.cn/8c92c86a56154e32b3b35fad9f4eb888.png) -
使用SD卡启动查看屏幕是否显示正常,查看UBOOT的环境变量是否修改成功 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VPFYqYfi-1651721987159)(D:\Note\image\2022-04-30-10-30-05-image.png)]](https://img-blog.csdnimg.cn/6c3190c6c2e846aeaecfbd5fddc2b182.png) -
修改网络驱动
-
修改include/configs/mx6ull100ask.h 中的宏,选择ENET2,由于100ask的ENET2的PHY外接了上拉电阻,地址为0x1,不用修改,但要添加使能SMSC公司的LAN8729A驱动。 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AYw99488-1651721987161)(D:\Note\image\2022-04-30-12-32-08-image.png)]](https://img-blog.csdnimg.cn/f1ae1ac0c68c421b877476b9784ca3a5.png) -
修改board/freescale/mx6ull100ask/mx6ull100ask.c 中的复位引脚定义,由于只用到了ENET2,所以修改ENET2的RESET引脚(查看开发板原理图),删除掉74LV595(参考的nxp开发板上所使用的网卡驱动)的IO配置参数结构体 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hDQiOkBn-1651721987162)(D:\Note\image\2022-04-30-12-41-15-image.png)]](https://img-blog.csdnimg.cn/7899310c8cf244a58bff7a12cb802f15.png) -
删除掉74LV595的初始化函数和控制74LV595的IO输出电平函数 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nP14Bq9u-1651721987164)(D:\Note\image\2022-04-30-12-42-17-image.png)]](https://img-blog.csdnimg.cn/5e07aef4db2d466c88bd506e28439c35.png) -
在板子初始化函数中删除调用74lv595的初始化函数 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-83XxQjyh-1651721987165)(D:\Note\image\2022-04-30-12-43-29-image.png)]](https://img-blog.csdnimg.cn/b609d200763a47509ea13a0fa466830e.png) -
添加网络复位引脚驱动,此处只添加了ENET2的复位引脚 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jNQGujmM-1651721987168)(D:\Note\image\2022-04-30-12-45-48-image.png)]](https://img-blog.csdnimg.cn/684fa39be5964a95a44d9b97046c737f.png) -
添加网络IO复位引脚的初始化代码 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IkbSBUCK-1651721987170)(D:\Note\image\2022-04-30-12-48-40-image.png)]](https://img-blog.csdnimg.cn/8f1ea91c97034c1a9862165448e9279c.png) -
修改drivers/net/phy/phy.c 文件中的函数genphy_update_link ,这个函数用于更新PHY的连接状态和速度 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ni8f3lKw-1651721987174)(D:\Note\image\2022-04-30-15-26-58-image.png)]](https://img-blog.csdnimg.cn/315467208e7f4c448c26f3a3bae06896.png) -
重新编译uboot,并将u-boot.bin烧写到SD卡中启动./imxdownload u-boot.bin /dev/sdb ,连接到路由器后启动开发板会自动dhcp来获取ip或者进行配置环境变量,配置完成后ping一下主机可以ping通 setenv ipaddr 192.168.1.55 //开发板 IP 地址
setenv ethaddr b8:ae:1d:01:00:00 //开发板网卡 MAC 地址
setenv gatewayip 192.168.1.1 //开发板默认网关
setenv netmask 255.255.255.0 //开发板子网掩码
setenv serverip 192.168.1.250 //服务器地址,也就是 Ubuntu 地址
saveenv //保存环境变量
-
配置完成后ping一下主机可以ping通 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aO0gRShU-1651721987176)(D:\Note\image\2022-04-30-15-14-02-image.png)]](https://img-blog.csdnimg.cn/4f832cdbc80e452c9e9c602fdf75ac8b.png)
-
修改板子名称,board/freescle/mx6ull100ask/mx6ull100ask.c ,修改函数checkboard ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n6prP9YZ-1651721987177)(image/2022-05-02-11-28-09-image.png)]](https://img-blog.csdnimg.cn/8e737d990187453ebf12846a61f33c43.png) 启动阶段:
-
使用emmc启动,由于100ask的emmc内分区1和分区2都是采用的ext2格式,所以要使用ext2load命令来加载zImage和dtb
-
mmc dev 1 :切换mmc设备到EMMC -
ext2ls mmc 1:2 boot :查看EMMC的第一个分区文件 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vxWZQXY4-1651721987178)(image/2022-05-05-11-32-24-image.png)]](https://img-blog.csdnimg.cn/83ae8db3001f46249762b9f3042c70bb.png) -
ext2load mmc 1:2 80800000 /boot/zImage :从EMMC中读取zImage到内存 -
ext2load mmc 1:2 83000000 /boot/100ask_imx6ull-14x14.dtb :读取dtb文件到内存 -
bootz 80800000 - 83000000 :启动内核 -
启动成功 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-swlIz4Jw-1651721987180)(image/2022-05-05-11-34-14-image.png)]](https://img-blog.csdnimg.cn/34c7a23a6fe74c918d0d1420178ea004.png) -
使用tftp启动:保证uboot能够ping通主机(依据修改网络驱动中的步骤进行配置)
=> tftp 80800000 zImage
Using FEC1 device
TFTP from server 192.168.5.11; our IP address is 192.168.5.9
Filename 'zImage'.
Load address: 0x80800000
Loading:
2.3 MiB/s
done
Bytes transferred = 7924872 (78ec88 hex)
=> tftp 83000000 100ask_imx6ull-14x14.dtb
Using FEC1 device
TFTP from server 192.168.5.11; our IP address is 192.168.5.9
Filename '100ask_imx6ull-14x14.dtb'.
Load address: 0x83000000
Loading:
1.5 MiB/s
done
Bytes transferred = 38370 (95e2 hex)
=> bootz 80800000 - 83000000
Kernel image @ 0x80800000 [ 0x000000 - 0x78ec88 ]
Booting using the fdt blob at 0x83000000
Using Device Tree in place at 83000000, end 8300c5e1
Starting kernel ...
问题阶段:
1. 由于正点原子的emmc镜像文件分区为fat格式,100ask的emmc镜像文件格式不同,所以要使用不同的命令来加载zImage和dtb
2. 不知道使用什么命令来启动Linux,开发板使用emmc启动,然后查看环境变量
=> printenv
baudrate=115200
board_name=EVK
board_rev=14X14
boot_fdt=try
bootcmd=run updateset;run findfdt;run findtee;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
bootcmd_mfg=run mfgtool_args; if test ${tee} = yes; then bootm ${tee_addr} ${initrd_addr} ${fdt_addr}; else bootz ${loadaddr} ${initrd_addr} ${fdt_addr}; fi;
bootdelay=3
bootdir=/boot
bootscript=echo Running bootscript from mmc ...; source
console=ttymxc0
eth1addr=00:01:3f:2d:3e:4d
ethaddr=00:01:1f:2d:3e:4d
ethprime=eth1
fdt_addr=0x83000000
fdt_file=100ask_imx6ull-14x14.dtb
fdt_high=0xffffffff
fdtcontroladdr=9ef40478
findfdt=if test $fdt_file = undefined; then if test $board_name = EVK && test $board_rev = 9X9; then setenv fdt_file imx6ull-9x9-evk.dtb; fi; if test $board_name = EVK && test $board_rev = 14X14; then setenv fdt_file imx6ull-14x14-evk.dtb; fi; if test $fdt_file = undefined; then setenv fdt_file imx6ull-14x14-alpha.dtb; fi; fi;
image=zImage
initrd_addr=0x83800000
initrd_high=0xffffffff
ip_dyn=yes
loadaddr=0x80800000
loadbootscript=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};
loadfdt=ext2load mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${bootdir}/${fdt_file}
loadimage=ext2load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${bootdir}/${image}
loadtee=fatload mmc ${mmcdev}:${mmcpart} ${tee_addr} ${tee_file}
mfgtool_args=setenv bootargs console=${console},${baudrate} rdinit=/linuxrc g_mass_storage.stall=0 g_mass_storage.removable=1 g_mass_storage.file=/fat g_mass_storage.ro=1 g_mass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF g_mass_storage.iSerialNumber="" clk_ignore_unused
mmcargs=setenv bootargs console=${console},${baudrate} root=${mmcroot}
mmcautodetect=no
mmcboot=echo Booting from mmc ...; run mmcargs; if test ${tee} = yes; then run loadfdt; run loadtee; bootm ${tee_addr} - ${fdt_addr}; else if test ${boot_fdt} = yes || test ${boot_fdt} = try; then if run loadfdt; then bootz ${loadaddr} - ${fdt_addr}; else if test ${boot_fdt} = try; then bootz; else echo WARN: Cannot load the DT; fi; fi; else bootz; fi; fi;
mmcdev=1
mmcpart=2
mmcroot=/dev/mmcblk1p2 rootwait rw
netargs=setenv bootargs console=${console},${baudrate} root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp
netboot=echo Booting from net ...; run netargs; setenv get_cmd tftp; ${get_cmd} ${image}; ${get_cmd} ${fdt_addr} ${fdt_file}; bootz ${loadaddr} - ${fdt_addr};
panel=TFT7016
script=boot.scr
tee=no
tee_addr=0x84000000
tee_file=uTee-6ullevk
update=yes
updateset=if test $update = undefined; then setenv update yes; saveenv; fi;
Environment size: 2738/8188 bytes
3. 实际运行的命令:
mmc dev 1
ext2load mmc 1:2 0x80800000 /boot/zImage
ext2load mmc 1:2 0x83000000 /boot/100ask_imx6ull-14x14.dtb
setenv bootargs console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw
bootz 0x80800000 - 0x83000000
|