记一次uboot编译/经验/教训
记一次uboot编译/经验/教训
- 最近学习uboot移植有关的知识,在了解原理后自己编译uboot,但是出现了好多各式各样的错误,最后换了几次系统环境之后才找到错误来源
1.准备源码与交叉编译工具链
环境:ubuntu19.04虚拟机
- 首先从linux公社下载了2013.01版的uboot(uboot从多年前开始使用时间作为版本号)使用 tar xvf命令解压
注意:不要把解压后的文件夹放在windows共享文件夹下,因为windows下没有符号链接,会导致编译失败,必须把它复制到虚拟机自己的文件夹下。
而我这里在复制文件夹时出现了如下错误:
解决办法是直接复制压缩包,然后在复制后的目录解压
- 系统中要有gcc交叉编译器,我用的是5.4.0版本
如果是下载的编译之后打包的压缩包,则将压缩包解压,将解压后文件下的bin目录添加到环境变量PATH中:
export PATH=<bin的绝对路径>:$PATH
(尖括号不加)
当然我们应该把这句话添加到 ~/.bashrc里面,以便于之后再次开机不需要重新输入命令
2.配置编译
- 配置架构与编译器
进入uboot解压后的目录 sudo vi Makefile
在里面开头加上如下内容
ARCH=arm
CROSS_COMPILE=<bin的绝对路径>/arm-linux-none-linux-gnueabi-
(尖括号不加)
要注意的是,即使我们前面已经把交叉编译器添加进PATH了,但是这里如果不用绝对路径的话仍然可能会导致找不到编译器,所以添加绝对路径更加保险
- 编译mini2440目标程序
这里uboot有关于mini2440的配置,所以可以直接编译,在uboot目录下输入:
sudo make mini2440
遇到的困难/错误
- 一开始我的ubuntu19.04给出了如下错误信息
网上资料表明是64位机器与32位不兼容,需要apt安装32位有关的库libgl1-mesa-dri:i386
但我的ubuntu安装了后并未改善
- 之后我决定换32位系统————希望根治不兼容问题
于是安装了ubuntu16.04.6的i386版本虚拟机
重新做了一遍以上步骤之后,报错如下:
而且这两次都与offsets有关:
从报错来看,编译器出问题不是很可能,应该就是系统环境所造成的库的缺失,但是按照网上的办法安装了库也没有用,于是我想用我另外一个ubuntu16的系统来代替虚拟机试一试
不过在这之前我想到了windows自带的WSL,我的是ubuntu18.04LTS,于是顺便拿它试了一下
没想到目标文件被成功编译了出来
继续寻找原因
显然并没有根本解决问题
- 我又考虑到交叉编译工具在共享目录下,可能对运行有影响,所以将其拷贝到虚拟机目录下再运行,不过没有改变,但是在尝试中发现了这样的错误
fatal error: linux/compiler-gcc5.h: No such file or directory
经过搜索后,得知这是gcc版本太高的原因,所以将gcc降到了4.4.3
- 之后出现了以下错误

搜索得知,仍然是gcc版本过高的原因
- 考虑到gcc配置需要更多时间,于是我直接下载了2016版的uboot以适应当前版本的gcc,在ubuntu16虚拟机下解压,修改好Makefile之后,在超级用户权限下直接make,终于成功

问题解决
看来关键并不在系统环境的兼容性上。
总结
这次的问题的出错与解决给出了一个经验:多去尝试不同的解决方案而不是快速地否决自己的想法,这样才能有利于挖掘出工作时潜在的注意事项以及发现最关键的错误。
还有就是,报错信息只会反映局部错误,而我们需要做的是找出错误的来源,而大部分时候,报错信息都不会和我们想要的结果看起来有关,所以如果报错信息较为复杂而导致没有头绪,这是正常的,只有多去搜集类似经验,才能最终对种种报错信息明确在心。
记一次uboot编译/经验/教训的更多相关文章
- 从面向服务架构(SOA)学习:微服务时代应该借鉴的5条经验教训
[编者按]本文作者为 Matt McLarty,通过介绍 SOA 的兴衰变化,总结了微服务应该借鉴的5条经验教训.文章系国内 ITOM 管理平台 OneAPM 编译呈现. SOA 的兴衰变化让我们更了 ...
- 创建Android Apps的30个经验教训
这个世界上有两种人-从经验教训中学习的人以及听从别人建议的人.这里是我一路走来学到的一些东西,分享给大家: 在添加任何第三方party之前,请三思:这真的是一个成熟的项目吗? 如果一个东西用户看不到, ...
- 新人入职100天,聊聊自己的经验&教训
这篇文章讲了什么? 如题,本屌入职100天之后的经验和教训,具体包含: 对开发的一点感悟. 对如何提问的一点见解. 对Google开发流程的吐槽. 如果你 打算去国外工作. 对Google的开发流程感 ...
- 嵌入式Linux驱动学习之路(四)u-boot编译分析
u-boot编译分析 在配置完成后,执行make开始编译.这里打开Makefile. 首先在目标all前有一句话首先检查是否有include/config.mk文件来判断是否成功配置过. ifeq ( ...
- Apache Storm 的历史及经验教训——Nathan Marz【翻译】
英文原文地址 中英文对照地址 History of Apache Storm and lessons learned --项目创建者 Nathan Marz Apache Storm 最近成为了ASF ...
- 七年IT生涯的经验教训
七年IT生涯的经验教训[转]我在IT界也拼打了有好几年了,但是现在和别人比较起来不是很如意.从天分上来说,我在属于智商不低的人:从技术上说,几乎没有我拿不下的:从见解上看,我是很有点子看法的人. ...
- 从Apache Storm学到的经验教训 —— storm的由来(转)
阅读目录 Storm来源 初探 再探 构建第一个版本 被Twitter收购 开源的Storm 发布之后 Storm的技术演进 构建开发者社区版 离开Twitter 提交到Apache Apache孵化 ...
- [uboot] (第四章)uboot流程——uboot编译流程
http://blog.csdn.net/ooonebook/article/details/53000893 以下例子都以project X项目tiny210(s5pv210平台,armv7架构)为 ...
- google开发新人入职100天,聊聊自己的经验&教训 个人对编程和开发的理解 技术发展路线
新人入职100天,聊聊自己的经验&教训 这篇文章讲了什么? 如题,本屌入职100天之后的经验和教训,具体包含: 对开发的一点感悟. 对如何提问的一点见解. 对Google开发流程的吐槽. 如果 ...
- OK335xS U-boot 编译问题&无Linux shell 问题
/************************************************************************** * OK335xS U-boot 编译问题&am ...
随机推荐
- Python并发编程——操作系统发展史、多道技术、进程理论、开启进程、join方法、进程间的数据隔离
文章目录 必备知识回顾 今日内容详细 操作系统发展史 多道技术 必备知识点 多道技术图解 多道技术重点知识 进程理论 必备知识点 进程调度 进程运行的三状态图 两对重要概念 开启进程的两种方式 joi ...
- 文本编辑器vi使用命令
使用对象: 用于编辑任何ASCII文本,对于编辑源程序尤其有用.可以对文本进行创建]查找.替换.删除.复制和粘贴等操作. 三种工作模式 命令模式:进入vi编辑器默认处于命令模式.命令模式下控制屏幕光标 ...
- linux shell -- sed命令
什么是sed sed 是 stream editor 的缩写,中文称之为"流编辑器". sed 命令是一个面向行处理的工具,它以"行"为处理单位,针对每一行进行 ...
- HTTP协议中四种交互方法学习
一.Get Get用于获取信息,注意,他只是获取.查询数据,也就是说它不会修改服务器上的数据.而根据HTTP规范, 获取信息的过程是安全和幂等的.GET请求的数据会附在URL之后,以"?&q ...
- 每天5分钟复习OpenStack(六)CPU虚拟化<2>
OpenStack是 一个IAAS(基础设施即服务)因此免不了会与硬件打交道.下面我介绍下与CPU强关联的一些知识点.1 什么是超配 2 CPU的个数是怎么统计的 3 vCPU的隔离.绑定 1.超配 ...
- 简单实现.NET Hook与事件模拟
最近玩<星露谷物语>上瘾,本来是看着个休闲游戏,现在玩成修仙游戏了,上百个小时浑身是肝,中午午休习惯都强行给改了. 虽然挺有意思,但是太肝了,入坑前请谨慎.补充一下,这个游戏应该是基于 X ...
- 洛谷P1990
这是一道dp的题,好像也不算dp.需要递推,感觉能训练思维!!!很棒的一道题. 覆盖墙壁 关于这道题的分析 状态表示:f[i][0]表示前i列全部填满的所有方案,f[i][1]表示前i列全部填满缺一个 ...
- 23. 从零用Rust编写正反向代理,流控小姐姐的温柔一刀!
wmproxy wmproxy已用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,四层TCP/UDP转发,内网穿透,后续将实现websocket代理等,会将实现 ...
- 《实现领域驱动设计》笔记——DDD入门
设计不只是感观,设计就是产品的工作方式. 我们的目标应该是创造一个可观测的.可伸缩的.组织良好的软件模型. DDD同时提供了战略上的战术上的建模工具. 我能DDD吗? DDD首先并不是关于技术的,而是 ...
- 7z 一键压缩备份
该批处理已开源 开原地址: 点击进入 磁盘备份 工具有很多,如果你需要增量式备份的话,以下这些方法并不适合你.goodsync 可以了解一下. 以下方式仅适用于,懒人一键压缩备份. 对于我来说 定期的 ...