1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 100ask imx6ull开发板移植NXP官方UBOOT

100ask imx6ull开发板移植NXP官方UBOOT

时间:2022-10-26 12:31:22

相关推荐

100ask imx6ull开发板移植NXP官方UBOOT

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:

链接:/s/1abSmlcYJ6iTan6U0XEjtsQ提取码:4imf

编译阶段:

#nxp编译命令make distclean # 清除掉配置文件make mx6ull_14x14_evk_emmc_defconfig # 默认配置,生成.configmake -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_defconfigmx6ull_100ask_defconfig,并进行修改

(添加板子对应的头文件:不同的板子,有一些需要配置的信息,每个板子有一个)复制include/configs目录下的mx6ullevk.hmx6ull100ask.h,并进行修改

添加开发板对应的板级文件夹(每个板子都有特有的文件,也叫做板级文件),复制board/freescale/mx6ullevkmx6ull100ask

移动mx6ullevk.cmx6ull100ask.c

修改Makefile为mx6ull100ask.o,此时才会编译mx6ull100ask.c

修改imximage.cfg文件

修改Kconfig文件

修改MAINTAINERS文件

修改UBOOT图形配置界面,在arch/arm/cpu/armv7/mx6/Kconfig目录下添加:配置项和包含Kconfig

检查board/freescale/mx6ull100ask/imx100ask.c是否被编译成.o文件,以及查看nclude/configs/mx6ull100ask.h是否被引用

修改LCD驱动

修改board/freescale/mx6ull100ask/mx6ull100ask.c

修改include/configs/mx6ull100ask.h,把所有panel=TFT43AB换成100askTFT(panel的值要与.c中的.name的值一样)

使用SD卡启动查看屏幕是否显示正常,查看UBOOT的环境变量是否修改成功

修改网络驱动

修改include/configs/mx6ull100ask.h中的宏,选择ENET2,由于100ask的ENET2的PHY外接了上拉电阻,地址为0x1,不用修改,但要添加使能SMSC公司的LAN8729A驱动。

修改board/freescale/mx6ull100ask/mx6ull100ask.c中的复位引脚定义,由于只用到了ENET2,所以修改ENET2的RESET引脚(查看开发板原理图),删除掉74LV595(参考的nxp开发板上所使用的网卡驱动)的IO配置参数结构体

删除掉74LV595的初始化函数和控制74LV595的IO输出电平函数

在板子初始化函数中删除调用74lv595的初始化函数

添加网络复位引脚驱动,此处只添加了ENET2的复位引脚

添加网络IO复位引脚的初始化代码

修改drivers/net/phy/phy.c文件中的函数genphy_update_link,这个函数用于更新PHY的连接状态和速度

重新编译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通

修改板子名称,board/freescle/mx6ull100ask/mx6ull100ask.c,修改函数checkboard

启动阶段:

使用emmc启动,由于100ask的emmc内分区1和分区2都是采用的ext2格式,所以要使用ext2load命令来加载zImage和dtb

mmc dev 1:切换mmc设备到EMMC

ext2ls mmc 1:2 boot:查看EMMC的第一个分区文件

ext2load mmc 1:2 80800000 /boot/zImage:从EMMC中读取zImage到内存

ext2load mmc 1:2 83000000 /boot/100ask_imx6ull-14x14.dtb:读取dtb文件到内存

bootz 80800000 - 83000000:启动内核

启动成功

使用tftp启动:保证uboot能够ping通主机(依据修改网络驱动中的步骤进行配置)

=> tftp 80800000 zImageUsing FEC1 deviceTFTP from server 192.168.5.11; our IP address is 192.168.5.9Filename 'zImage'.Load address: 0x80800000Loading: ############################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################2.3 MiB/sdoneBytes transferred = 7924872 (78ec88 hex)=> tftp 83000000 100ask_imx6ull-14x14.dtbUsing FEC1 deviceTFTP from server 192.168.5.11; our IP address is 192.168.5.9Filename '100ask_imx6ull-14x14.dtb'.Load address: 0x83000000Loading: ###1.5 MiB/sdoneBytes transferred = 38370 (95e2 hex)=> bootz 80800000 - 83000000Kernel image @ 0x80800000 [ 0x000000 - 0x78ec88 ]## Flattened Device Tree blob at 83000000Booting using the fdt blob at 0x83000000Using Device Tree in place at 83000000, end 8300c5e1Starting kernel ...

问题阶段:

1. 由于正点原子的emmc镜像文件分区为fat格式,100ask的emmc镜像文件格式不同,所以要使用不同的命令来加载zImage和dtb2. 不知道使用什么命令来启动Linux,开发板使用emmc启动,然后查看环境变量

=> printenvbaudrate=115200board_name=EVKboard_rev=14X14boot_fdt=trybootcmd=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; fibootcmd_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=3bootdir=/bootbootscript=echo Running bootscript from mmc ...; sourceconsole=ttymxc0eth1addr=00:01:3f:2d:3e:4dethaddr=00:01:1f:2d:3e:4dethprime=eth1fdt_addr=0x83000000fdt_file=100ask_imx6ull-14x14.dtbfdt_high=0xfffffffffdtcontroladdr=9ef40478findfdt=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=zImageinitrd_addr=0x83800000initrd_high=0xffffffffip_dyn=yesloadaddr=0x80800000loadbootscript=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_unusedmmcargs=setenv bootargs console=${console},${baudrate} root=${mmcroot}mmcautodetect=nommcboot=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=1mmcpart=2mmcroot=/dev/mmcblk1p2 rootwait rwnetargs=setenv bootargs console=${console},${baudrate} root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcpnetboot=echo Booting from net ...; run netargs; setenv get_cmd tftp; ${get_cmd} ${image}; ${get_cmd} ${fdt_addr} ${fdt_file}; bootz ${loadaddr} - ${fdt_addr};panel=TFT7016script=boot.scrtee=notee_addr=0x84000000tee_file=uTee-6ullevkupdate=yesupdateset=if test $update = undefined; then setenv update yes; saveenv; fi;Environment size: 2738/8188 bytes

3. 实际运行的命令:

mmc dev 1ext2load mmc 1:2 0x80800000 /boot/zImageext2load mmc 1:2 0x83000000 /boot/100ask_imx6ull-14x14.dtbsetenv bootargs console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rwbootz 0x80800000 - 0x83000000

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。