第1次升级和移植uboot纪实(2017.09->2022.04)

news/2024/7/8 0:48:20

目录

0. 前言

1. SPL

2. imximage.cfg

3. CONFIG_XX 与 条件编译

4. 总结:学会收敛问题


0. 前言

这次的工作主要是把某项目设备上的uboot版本从2017.09升级到2022.04,是作为该项目整个BSP升级计划的一部分。2017.09版本上的设备板级文件也要适当移植到2022.04版本上。

原来按照指导同事的估计,顶多需要三天,作者却花了将近一个月!当中弯路很多,记下以鉴后人!


1. SPL

SPL指的是 Second Program Loader,原本是为了简化uboot启动过程的工具。SPL加载的文件叫做u-boot.img...... 但这次首要的任务就是要去掉SPL,编译出u-boot.imx。我们的项目不需要多余的东西。但是纵观uboot的源代码, CONFIG_SPL_BUILD之类的条件编译比比皆是。选不选SPL,同一个函数就会进入另外的实现分支,可能会出现不能正确运作的问题。

去掉SPL,首先就要在 buildroot-menuconfig --> bootloader里面去掉 install SPL...(如果使用buildroot来构建uboot的话),再在uboot-menuconfig --> SPL/TPL 确保不选择 Enable SPL。其他有关SPL的选项也要注意配置。


2. imximage.cfg

在板级文件目录下,比如说./board/freecale/mx6slevk/,除了源文件、Makefile、Kconfig等,作者还第一次看到 imximage.cfg 文件。这种cfg文件其实是为了高效地批量地配置CPU寄存器而设置的。其中最关键的是里面的DCD(Device Configuration Data)部分:

/*

* Device Configuration Data (DCD)

*

* Each entry must have the format:

* Addr-type Address Value

*

* where:

* Addr-type register length (1,2 or 4 bytes)

* Address absolute address of the register

* value value to be stored in the register

*/

DATA 4 0x020c4018 0x00260324

DATA 4 0x020c4068 0xffffffff

DATA 4 0x020c406c 0xffffffff

DATA 4 0x020c4070 0xffffffff

DATA 4 0x020c4074 0xffffffff

DATA 4 0x020c4078 0xffffffff

DATA 4 0x020c407c 0xffffffff

DATA 4 0x020c4080 0xffffffff

DATA 4 0x020e0344 0x00003030

DATA 4 0x020e0348 0x00003030

DATA 4 0x020e034c 0x00003030

。。。。。。。

言简意赅的说明,什么寄存器要设什么值。本项目设备有个隐患是DDR不太稳定,这就需要设置DDR寄存器。

NXP有提供DDR压力设施工具,来测试DDR的表现,这个工具会给出DDR的几个寄存器应该的值,将这些值同步到cfg文件即可。作者还没试过此类DDR压力测试,采用的是老法师已经配好的cfg文件,名字改成 imximage.cfg,放在设备的板级文件夹下即可。

PS: 在 uboot-menuconfig里面要显示的声明DCD配置的地方,也就是放 imximage.cfg的地方。一般是 uboot-menuconfig --> ARM architecture --> DCD script, 或者是 uboot-menuconfig --> Boot images --> Extra Options


3. CONFIG_XX 与 条件编译

CONFIG_MX6QDL


4. 总结:学会收敛问题

没有printf

缩小问题范围

排除无关项


http://lihuaxi.xjx100.cn/news/366941.html

相关文章

gcc 4.8.5 的string问题

gcc 4.8.5及一下版本 的string 因为内部内存管理采用了COW的方式,导致了string在多线程的状态下容易崩溃。崩的很没有规律,表现就是string在赋值的时候就莫名其妙的崩了,查看堆栈,你也看不出啥。崩溃的很随机。 为了避免崩溃&…

Python修改列表元素有什么方法?

增删改查是处理数据最常见的方法,前两种说过了,这里就要说说python提供的两种修改列表元素的方法,一种是修改单个元素,还有一种的修改一组数据的方法。 一、修改单个元素 修改单个元素从原理上讲就是重新给指定位置的元素赋值。…

MATLB|基于改进教学的优化算法(TLSBO)的最优功率优化

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥 📝目前更新:🌟🌟🌟电力系统相关知识,期刊论文&…

【人工智能与机器学习】——朴素贝叶斯与支持向量机(学习笔记)

📖 前言:朴素贝叶斯(Naive Bayes)和支持向量机(Support Vector Machine,SVM)是两种不同的机器学习算法,它们都用于分类。朴素贝叶斯算法基于贝叶斯定理来进行分类,它是一…

Intelligent standby list cleaner(清理备用内存工具)--九五小庞

Intelligent standby list cleaner是一款待机列表清理软件,这款工具可以帮助用户监视计算机的内存使用情况,等计算机的内存使用到一定大小后,软件会自动清理内存列表,通过这种方式释放计算机内存来保障计算机的运行速度;很多大型软件或游戏对电脑的资源占用尤为严重,因此…

虚拟机vm+ubuntu搭建linux后台编译服务器

1、安装虚拟机+ubuntu(带桌面或不带桌面)略 2、扩展ubuntu空间 https://www.cnblogs.com/hehesi/p/16949743.html 2、配置网络,桥接模式加主机模式桥接模式对于主机和虚拟机之前通讯不太友好,速度较慢,还需插上外部网线,主机模式可以弥补内部通讯问题添加双网卡:选择相应…

[附源码]计算机毕业设计计算机相关专业考研资料管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

[漏洞复现]Thinkphp RCE

文章目录简介影响版本复现文件包含目录穿越修复简介 Thinkphp 是一款 PHP 框架,如果开启了多语言功能,就可以通过 get、header、cookie 等位置传入参数实现目录穿越和文件包含,从而利用 pearcmd 文件包含实现远程命令执行(RCE&am…