记一次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编译/经验/教训的更多相关文章

  1. 从面向服务架构(SOA)学习:微服务时代应该借鉴的5条经验教训

    [编者按]本文作者为 Matt McLarty,通过介绍 SOA 的兴衰变化,总结了微服务应该借鉴的5条经验教训.文章系国内 ITOM 管理平台 OneAPM 编译呈现. SOA 的兴衰变化让我们更了 ...

  2. 创建Android Apps的30个经验教训

    这个世界上有两种人-从经验教训中学习的人以及听从别人建议的人.这里是我一路走来学到的一些东西,分享给大家: 在添加任何第三方party之前,请三思:这真的是一个成熟的项目吗? 如果一个东西用户看不到, ...

  3. 新人入职100天,聊聊自己的经验&教训

    这篇文章讲了什么? 如题,本屌入职100天之后的经验和教训,具体包含: 对开发的一点感悟. 对如何提问的一点见解. 对Google开发流程的吐槽. 如果你 打算去国外工作. 对Google的开发流程感 ...

  4. 嵌入式Linux驱动学习之路(四)u-boot编译分析

    u-boot编译分析 在配置完成后,执行make开始编译.这里打开Makefile. 首先在目标all前有一句话首先检查是否有include/config.mk文件来判断是否成功配置过. ifeq ( ...

  5. Apache Storm 的历史及经验教训——Nathan Marz【翻译】

    英文原文地址 中英文对照地址 History of Apache Storm and lessons learned --项目创建者 Nathan Marz Apache Storm 最近成为了ASF ...

  6. 七年IT生涯的经验教训

     七年IT生涯的经验教训[转]我在IT界也拼打了有好几年了,但是现在和别人比较起来不是很如意.从天分上来说,我在属于智商不低的人:从技术上说,几乎没有我拿不下的:从见解上看,我是很有点子看法的人. ...

  7. 从Apache Storm学到的经验教训 —— storm的由来(转)

    阅读目录 Storm来源 初探 再探 构建第一个版本 被Twitter收购 开源的Storm 发布之后 Storm的技术演进 构建开发者社区版 离开Twitter 提交到Apache Apache孵化 ...

  8. [uboot] (第四章)uboot流程——uboot编译流程

    http://blog.csdn.net/ooonebook/article/details/53000893 以下例子都以project X项目tiny210(s5pv210平台,armv7架构)为 ...

  9. google开发新人入职100天,聊聊自己的经验&教训 个人对编程和开发的理解 技术发展路线

    新人入职100天,聊聊自己的经验&教训 这篇文章讲了什么? 如题,本屌入职100天之后的经验和教训,具体包含: 对开发的一点感悟. 对如何提问的一点见解. 对Google开发流程的吐槽. 如果 ...

  10. OK335xS U-boot 编译问题&无Linux shell 问题

    /************************************************************************** * OK335xS U-boot 编译问题&am ...

随机推荐

  1. SYN泛洪攻击详解

    SYN攻击利用的是TCP的三次握手机制,攻击端利用伪造的IP地址向被攻击端发出请求,而被攻击端发出的响应 报文将永远发送不到目的地,那么被攻击端在等待关闭这个连接的过程中消耗了资源,如果有成千上万的这 ...

  2. .NET 数据库大数据 方案(插入、更新、删除、查询 、插入或更新)

    1.功能介绍 (需要版本5.0.45) 海量数据操作ORM性能瓶颈在实体转换上面,并且不能使用常规的Sql去实现 当列越多转换越慢,SqlSugar将转换性能做到极致,并且采用数据库最佳API 操作数 ...

  3. 从一次Kafka宕机说起(JVM hang)

    一.背景 时间大概是在夏天7月份,突然收到小伙伴的情报,我们线上的一个kafka实例的某个broker突然不提供服务了,也没看到什么异常日志,反正就是生产.消费都停了.因为是线上服务,而且进程还在,就 ...

  4. Vue之仿百度搜索框

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. JAVA类的加载(1) ——类的加载及类加载器介绍

    过程:当程序主动使用某个类时,如果该类还未被加载到内存中,系统会通过加载.连接.初始化三个步骤来对该类进行初始化,有时候称为类加载(类初始化)   类加载 定义:类加载 指的是将类的class文件读入 ...

  6. 题解 SP13015

    题目描述: 给定初始序列 \(A\),然后对原序列有以下操作: 操作 \(1\): 0 l r v 将区间 \([l,r]\) 全赋值为 \(v\). 操作 \(2\):1 l r 查询区间 \([l ...

  7. GPTs破冰硅基文明社会

    GPTs破冰硅基文明社会 渐进是技术革命的常态 技术革命看似一夕之间就颠覆了世界,但实际上每项重大技术进步的背后,都经历了漫长的渐进积累.以蒸汽机为例,最初动力微弱.效率低下,需要大量工程师跟车维护, ...

  8. Android 锁屏时的生命周期

    锁定屏幕前,应用被打开:onCreate->onStart->onResume 此时按下电源键,锁定屏幕:onPause->onStop 解锁屏幕,重新回到应用:onRestart- ...

  9. 2021-09 .NET 5.0.10 Update for x64 Client (KB5006192) 安装失败,错误代码:0x80070643

    上周五日常检查系统更新(强迫症晚期) 出现一项更新:2021-09 .NET 5.0.10 Update for x64 Client (KB5006192) details: https://www ...

  10. H.264 和 H.265对比

    前言 H.264标准正式发布于2003年3月,距今已经20多年了,但它仍然是当下最流行的视频编解码标准. H.265正式发布于2013年4月.虽然H.265标准是围绕着H.264进行制定的,也保留了原 ...