imx6ull(1):uboot移植记录

发布于:2025-06-19 ⋅ 阅读:(13) ⋅ 点赞:(0)

为什么强调这里叫板级移植,因为用的是nxp官方基于自己的demo板移植好的代码。因为时间和精力有限,个人认为除非有必要(例如需要自己去大篇幅的定制属于自己的uboot)不然不需要去仔细研究,因为平台千千万,uboot有团队维护,非原厂的同学也有自己的日常业务开发工作,这里以学习和了解的态度,抱着能用就行的目标做。

野火的板子实际上跟原厂的没太大区别,所以这里烧录用原厂移植好的uboot是能正常跑起来的,这里我用的是原子资料里提供的原厂代码。

一、编译和烧录

执行下面指令:

1.清除编译出来的内容

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean

2.选择目标的配置项文件,这里我们使用的是 mx6ull_14x14_evk_emmc_defconfig,感兴趣的可以对比敲了这个指令后工程前后发生了什么变化可以了解下这个指令的作用,大概是配置工程对应这个板子的配置项。通过的话会生成一个.config文件,全部通过配置文件使能的配置项都会在这个文件里,这个文件对阅读代码会有帮助。

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_emmc_defconfig

3.编译,分配多少核去执行,这个根据实际的电脑硬件选择

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4

编译完得到uboot相关的固件,有.bin,.cfg,.imx,还有个是.lds文件,这个是链接文件,代码有些段的地址可以通过这个文件来推导,阅读的时候.map文件也可以关注一下,想看反汇编代码可以运行:

arm-linux-gnueabihf-objdump -s -d u-boot > uboot.s

将编译出来的烧录到sd卡,这里烧录工具使用的是原子的,野火的也能用不过没原子的方便,这里要注意的是得确定你插入的sd卡是哪个文件设备,可以通过插拔来对比,增加的设备是我插入的sd卡。

烧录固件到sd卡(imxdownload是原子资料里的):

./imxdownload u-boot.bin /dev/sdb

打印如下,正常跑起来,能读到emmc,但是屏幕显示不对

二、问题解决

上面那个这个警告打印是提示找不到环境变量,了解到uboot有默认的环境变量,如果用户修改并且保存了这个环境那就会使用保存的这个环境变量,当然存是存到flash设备例如sd卡,emmc,因为我现在的SD卡里只烧录了uboot但是啥都没所以会有那个警告,再敲保存环境的指令就行了。

当前不选择去重新添加一个属于自己的板级代码和对于配置项文件直接在上面修改,添加的话可以熟悉编译的过程,这里我个人了解一下即可。下面不去追究整个工程怎么搭建的,关注怎么从头到尾找到我们移植需要修改的文件。

这里的工程环境跟我过去使用的zephyr工程环境差不多,对于使用习惯IDE的可能需要时间适应。

大概是通过配置文件,脚本(conf文件、kconfig文件、makefile)来选择不同的板子。

例如上面我们编译的第二指令选择了配置文件mx6ull_14x14_evk_emmc_defconfig,这里打开 \configs\mx6ull_14x14_evk_emmc_defconfig

可以看到:

我们看到了我们选择的板子相关的路径是:IMX_CONFIG=board/freescale/mx6ullevk/xxx,打开这个文件夹。

1、imximage.cfg 看了下大概是imx6ull的uboot固件头内容,这个平台独有的内容,后面再记录。

2、mx6ullevk.c 这个就是板级文件了,相当于说这个工程是把这个soc的不同板子有区别的内容挪到了这个文件。

这里还有个MAINTAINERS文件,打开里面内容有个:include/configs/mx6ullevk.h,大胆的认为这个板用的头文件就是这一个,imximage.cfg包含了一个config.h。

确实是包含的这个头文件,但是这个文件是上面编译的第二步操作生成的,暂且不去细究。

接下来看看mx6ullevk.c 这个文件。

这里NXP官方和野火及隔壁原子的开发板的lcd使用的都是RGB888,下面截图是找的资料,第一图红色是对上面代码屏幕4个不好理解的参数描述。

这里对上面代码改成下面:

显示正常了但是这里体验不好的是开机会闪一下白屏再显示,暂且不去理会,是lcd上电时序问题,以前做mcu产品的时候的先让设备刷了屏后再打开背光可解决这个问题。如果想修改开机打印的lcd型号 “TFT43AB”可以修改上面那个结构体,但是同时在mx6ullevk.h里的环境设置 panel字段也要改成目标的屏幕字符串。

看网上一个老哥用野火的板子网卡是能直接用的,这里我尝试uboot下ping通我的电脑,结果一敲就挂了重启,百度搜了一下有个老哥跟我遇到一样的问题,降低编译器版本就好了,可能是原子提供的原厂uboot版本只能使用17年的编译器,哎一怒之下把以前下载的野火相关的东西都删了照着原子的文档重新搭了一次环境,这里看出如果环境跟硬件都用别人搭好的可省下很多时间。发现网上好多都是用原子的板子看原子的资料,用野火的板子的居然也是看的原子的资料😂,现在想想做教程的能不忘记初心也是种信仰,如果资料写得好收钱也有人买单例如隔壁韦xx。

最后一个问题,我家里的办公环境离路由器有点距离,不方便让板子接路由器,这里我想板子直接接笔记本电脑,笔记本电脑wifi上网。参考下面这篇文章:

分享文档 :关于电脑两个网卡,有线网络直连开发板,无线上网-OpenEdv-开源电子网

免费的教程上原子这块确实比较好,至于原理,这里我对计算机网络不熟悉,大概是虚拟机将配置一个虚拟网卡桥接到我的笔记本电脑的有线网络上,然后虚拟机将这个网卡的ip地址跟开发板设置成同一个网段,这样开发板就能跟虚拟机ping通了;虚拟机再整一个虚拟网卡桥接到笔记本电脑的无线网卡上这样虚拟机就能上网,照着整完ping一下,通了。

到这里uboot移植算是完成,有时间可以参考imx厂家怎么把自己板子的代码加进去的再整一份自己的。


网站公告

今日签到

点亮在社区的每一天
去签到