f1c200s---编译uboot

news2025/1/8 6:04:59

目录

  • 前言
  • 安装必要工具
    • 安装交叉编译链工具
  • 下载Uboot
    • 切换分支
    • 查看配置文件
  • 配置Uboot
    • 修改Makefile
    • 配置文件
  • 编译uboot
    • 出现/bin/sh: 1: python: not found错误
    • 出现multiple definition of `yylloc'错误
    • 出现FATAL ERROR: Unable to parse input tree错误
    • 出现/usr/bin/env: 'python2': No such file or directory错误
    • 出现ImportError: No module named _libfdt的错误
    • 出现scripts/dtc/pylibfdt/libfdt_wrap.c:154:11: fatal error: Python.h: No such file or directory错误

前言

本章所解决问题后的Uboot仓库、docker镜像可在文章末尾找到,如果不想一步步配置编译环境可到文章末尾下载docker镜像直接运行

安装必要工具

sudo apt update
sudo apt upgrade
sudo apt-get install git vim wget 
sudo apt-get install xz-utils nano unzip build-essential bc swig libncurses5-dev libpython3-dev libssl-dev pkg-config zlib1g-dev libusb-dev libusb-1.0-0-dev python3-pip gawk bison flex 

安装交叉编译链工具

下载交叉编译链:

wget http://releases.linaro.org/components/toolchain/binaries/7.2-2017.11/arm-linux-gnueabi/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz

解压交叉编译链:

mkdir /usr/local/arm 
tar -vxf gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz -C /usr/local/arm 

配置环境变量:

vim ~/.bashrc

打开后在文件最后一行添加以下变量:

export PATH=$PATH:/usr/local/arm/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi/bin

生效环境变量:

source ~/.bashrc 

查询版本确保安装无误:

arm-linux-gnueabi-gcc -v

在这里插入图片描述

下载Uboot

由于官方Uboot并没有对f1c200s有支持,所以我们使用基于licheepi的Uboot进行编译和后续的开发工作

git clone https://github.com/Lichee-Pi/u-boot.git
cd u-boot

切换分支

git checkout nano-v2018.01

在这里插入图片描述

查看配置文件

进入configs目录查看配置文件,可以看到有两个配置文件,一个是带spiflash的一个是不带的,根据自己需求选择

cd configs && find -name "*lichee*" && cd ..

在这里插入图片描述

配置Uboot

修改Makefile

vim Makefile

输入/CROSS_COMPILE定位到修改的位置,如果用别的编辑器修改,大概在246行
修改前:
在这里插入图片描述
修改后:在这里插入图片描述

配置文件

make licheepi_nano_spiflash_defconfig
make menuconfig

需要在menuconfig里面配置成如图这样就可以,当然如果你是高手也可以自己配置

在这里插入图片描述
boot arguments参数:

console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 earlyprintk rw

boot cmd参数:

load mmc 0:1 0x80008000 zImage;load mmc 0:1 0x80c08000 suniv-f1c100s-licheepi-nano.dtb;bootz 0x80008000 - 0x80c08000;

保存并退出写入到.config中

编译uboot

make -j8

出现/bin/sh: 1: python: not found错误

具体出错细节如下:

/bin/sh: 1: python: not found
make[3]: *** [scripts/dtc/pylibfdt/Makefile:26: scripts/dtc/pylibfdt/_libfdt.so] Error 127
  HOSTCC  scripts/dtc/checks.o
make[2]: *** [scripts/Makefile.build:425: scripts/dtc/pylibfdt] Error 2
make[2]: *** Waiting for unfinished jobs....
  HOSTCC  scripts/dtc/util.o
  CHK     include/config.h
  CFG     u-boot.cfg
  CHK     include/generated/version_autogenerated.h
  CC      lib/asm-offsets.s
  CC      arch/arm/lib/asm-offsets.s
  CHK     include/generated/generic-asm-offsets.h
  CHK     include/generated/asm-offsets.h
make[1]: *** [scripts/Makefile.build:425: scripts/dtc] Error 2
make: *** [Makefile:493: scripts] Error 2

经过测试我们只有python3,没有python,并且找到了python3相对应的目录
在这里插入图片描述
执行下列命令后进行python测试:

cp /usr/bin/python3 /usr/bin/python

在这里插入图片描述
重新编译:

make -j8

出现multiple definition of `yylloc’错误

错误具体详细如下:

/usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss+0x10): multiple definition of `yylloc'; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0): first defined here
/workspace/u-boot/scripts/dtc/pylibfdt/setup.py:21: DeprecationWarning: The distutils package is deprecated and slated for removal in Python 3.12. Use setuptools or check PEP 632 for potential alternatives
  from distutils.core import setup, Extension
collect2: error: ld returned 1 exit status
make[2]: *** [scripts/Makefile.host:108: scripts/dtc/dtc] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [scripts/Makefile.build:425: scripts/dtc] Error 2
make: *** [Makefile:493: scripts] Error 2
make: *** Waiting for unfinished jobs....

看起来是yylloc这个变量重复定义了,具体目录看起来应该是在scripts/dtc/文件夹下的dtc-lexer.lex.c下第一次定义了yylloc变量然后又在别的c文件定义了yylloc变量,输入以下命令进行查找

cd scripts/dtc/ && grep -nR yylloc

果然,在dtc-parser.tab.c的1205行和dtc-lexer.lex.c的634行出现了多重定义,由于编译器提示dtc-lexer.lex.c是第一次定义,所以我们去注释dtc-parser.tab.c的定义
在这里插入图片描述
注释dtc-parser.tab.c的定义后如下图:
在这里插入图片描述
重新编译:

make -j8

出现FATAL ERROR: Unable to parse input tree错误

具体错误详情如下:

DTC     arch/arm/dts/suniv-f1c100s-licheepi-nano.dtb
Error: arch/arm/dts/.suniv-f1c100s-licheepi-nano.dtb.pre.tmp:59.1-10 syntax error
FATAL ERROR: Unable to parse input tree
make[2]: *** [scripts/Makefile.lib:329: arch/arm/dts/suniv-f1c100s-licheepi-nano.dtb] Error 1
make[1]: *** [dts/Makefile:51: arch/arm/dts/suniv-f1c100s-licheepi-nano.dtb] Error 2
make: *** [Makefile:878: dts/dt.dtb] Error 2

看起来是设备树的问题,这里也是困扰我最久的地方
进入scrpit文件夹,修改Makefile.lib的第321行,多了个斜杠,紫色选中为多的那个斜杠

cd scripts
vim Makefile.lib

在这里插入图片描述
删除斜杠后:
在这里插入图片描述
重新编译:

make -j8

出现/usr/bin/env: ‘python2’: No such file or directory错误

具体出错信息:

BINMAN  u-boot-sunxi-with-spl.bin
/usr/bin/env: 'python2': No such file or directory
make: *** [Makefile:1150: u-boot-sunxi-with-spl.bin] Error 127

看起来没安装python2,安装一下

sudo apt-get install python2

重新编译

make -j8

出现ImportError: No module named _libfdt的错误

具体报错信息如下:

Traceback (most recent call last):
  File "./tools/binman/binman", line 32, in <module>
    import control
  File "/workspace/u-boot/tools/binman/control.py", line 16, in <module>
    import fdt
  File "/workspace/u-boot/tools/binman/../dtoc/fdt.py", line 13, in <module>
    import libfdt
  File "scripts/dtc/pylibfdt/libfdt.py", line 15, in <module>
    import _libfdt
ImportError: No module named _libfdt

看起来我们之前无脑的把python3拷贝为python的方法是错误的,他的脚本用python2写的,与python3兼容性并不好,一些库已经不再支持,我们切换回python2

cp /usr/bin/python2 /usr/bin/python

重新编译:

make -j8

出现scripts/dtc/pylibfdt/libfdt_wrap.c:154:11: fatal error: Python.h: No such file or directory错误

具体出错信息如下:

  CHK     include/generated/asm-offsets.h
scripts/dtc/pylibfdt/libfdt_wrap.c:154:11: fatal error: Python.h: No such file or directory
  154 | # include <Python.h>
      |           ^~~~~~~~~~
compilation terminated.
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
make[3]: *** [scripts/dtc/pylibfdt/Makefile:26: scripts/dtc/pylibfdt/_libfdt.so] Error 1
make[2]: *** [scripts/Makefile.build:425: scripts/dtc/pylibfdt] Error 2
make[1]: *** [scripts/Makefile.build:425: scripts/dtc] Error 2
make: *** [Makefile:493: scripts] Error 2

应该是python2的dev没有安装,安装试一下

sudo apt-get install python2-dev

重新编译:

make -j8

编译成功,出现u-boot-sunxi-with-spl.bin文件
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/582796.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务架构综合实战 一文让你了解什么是微服务 使用PHP 搭建微服务框架 最全微服务架构讲解以及演示

本文将带你从基础的微服务架构设计、网络协议、注册中心、配置中心、网关层面 渐进式讲解其微服务。 一、微服务架构设计方案 架构演进 在将微服务之前 我们看看目前的架构 单体架构 按照模块划分&#xff0c;公用一个数据库 垂直拆分架构 按业务功能划分单独的子系统&…

为什么pnpm比npm、yarn使用更好

performant npm &#xff0c;意味高性能的 npm。pnpm由 npm/yarn 衍生而来&#xff0c;解决了 npm/yarn 内部潜在的bug&#xff0c;极大的优化了性能&#xff0c;扩展了使用场景。被誉为"最先进的包管理工具"。 我们按照包管理工具的发展历史开始讲起&#xff1a; n…

切片工具tippecanoe的全网最详细的解释

1.下载和安装 tippecanoe工具是mapbox官方提供的一个服务端切片工具,因此它是运行在服务器上的,它比较友好的支持mac和linux机器。对于windows来讲,就比较麻烦了。 首先对于mac系统,你只需配置好自己的homebrew,保证homebrew能够正常下载东西。 然后只需要一个命令: …

Jmeter 压测工具进行压力测试

需求&#xff1a;接口需要进行压力测试&#xff0c;有减库存的场景&#xff0c;要求并发不能超库存&#xff0c;接口鉴权类似token方式校验。 一、jemter 下载安装Java Downloads | Oracle &#xff0c;下载安装可以自行翻帖子&#xff0c;很多教程&#xff0c;本次实验用的是…

用Python体素化3D网格和点云

推荐&#xff1a;用 NSDT设计器 快速搭建可编程3D场景。 3D 数据的持续学习正在成为机器学习和理解我们周围世界的越来越重要的部分。 随着新的 3D 数据提取硬件&#xff08;如深度相机和 LiDAR&#xff09;在闭路电视、相机和智能手机中变得司空见惯&#xff0c;越来越多的人正…

法线贴图的类型

1、切线空间法线贴图 这是当今最常见的法线贴图&#xff0c;也是我们在本系列中讨论的法线贴图。它根据模型顶点的法线方向修改模型的法线方向&#xff08;因此我们必须控制lowpoly的顶点法线&#xff09;。 请记住&#xff0c;切线法线贴图是使用顶点指示的方向进行计算的。这…

【WPF】数据绑定,资源字典

数据绑定 将数据与视图分开,创建MainViewModel .cs 作为数据源的处理 MainViewModel using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Runtime.CompilerServices; using System.Text; using System.Threading…

华为OD机试真题 Java 实现【基站维修工程师】【2023Q1 200分】,附详细解题思路

一、题目描述 小王是一名基站维护工程师,负责某区域的基站维护。 某地方有n个基站(1<n<10),已知各基站之间的距离s(0<s<500),并且基站x到基站y的距离,与基站y到基站x的距离并不一定会相同。 小王从基站1出发,途径每个基站1次,然后返回基站1,需要请你…

Swift 中的 Actors 使用以及如何防止数据竞争

文章目录 前言Actors 的基本原理Actor 是引用类型&#xff0c;但与类相比仍然有所不同 为什么会出现数据竞争如何防止数据竞争使用 async/await 访问数据防止不必要的暂停非隔离(nonisolated)访问为什么在使用 Actors 时仍会出现数据竞争&#xff1f;总结 前言 Actors 是 Swif…

FFMPEG常用命令 音视频合并

目录 一、音频合并 1.获取音频时长 2.合并两段音频 3.合并音频插入空白 二、视频加背景图 三、音视频合成 1.保留视频声音 2.不保留视频声音 四、合并视频 本文将用几个实例&#xff0c;介绍ffmpeg命令的综合使用&#xff0c;主要涉及音频处理、视频处理和音视频合成。…

如何搭建自己的CentOS系统

CentOS是一个完全免费的操作系统&#xff0c;这对于开发人员来说非常有吸引力。他们可以使用CentOS来开发和测试应用程序&#xff0c;而不需要支付任何费用。那么作为程序员如果搭建自己的CentOS服务器呢&#xff1f; 搭建自己的CentOS系统需要以下步骤&#xff1a; 1、下载Ce…

借助KafkaTool在海量Kafka数据快速精准定位/查询目标数据

如何在海量的Kafka数据定位/查询精准到秒级的数据&#xff1f; 解决方案&#xff1a;Kafka命令 KafkaTool 1. 使用Kafka命令定位Offset sh ./kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list $ip:$port -topic ${topic.name} -time $timestamp参数说明&#…

程序员大战黄牛党,破解演唱会门票秒光之困

反黄牛&#xff0c;为何是场持久战&#xff1f; 撰文 | 林秋艺 编辑 | 龚 正 这个五月&#xff0c;似乎都被五月天霸屏了。从5月9日的30万张五月天演唱会门票被5秒扫光&#xff1b;到粉丝群起反抗&#xff0c;喊出“宁可鸟巢门口站&#xff0c;也不能让黄牛赚”&#xff0c;…

基于实体类导出excel模板

很多需求是导入excel的功能&#xff0c;但是导入的时候需要excel模板。如果很多模板的&#xff0c;就需要一个通过工具类来实现了&#xff0c;根据配置好一个实体类来实现模板的导出。 <dependency><groupId>org.jodd</groupId><artifactId>jodd-core&…

创建型设计模式03-原型模式

&#x1f9d1;‍&#x1f4bb;作者&#xff1a;猫十二懿 &#x1f3e1;账号&#xff1a;CSDN 、个人博客 、Github &#x1f38a;公众号&#xff1a;猫十二懿 原型模式 1、原型模式介绍 原型模式是一种创建型设计模式&#xff0c;它允许通过复制现有对象来生成新对象&#xf…

【大数据处理与可视化】五、数据聚合与分组运算

【大数据处理与可视化】五、数据聚合与分组运算 实验目的实验内容实验步骤一、案例——运动员信息的分组与聚合1、统计男篮、女篮运动员的平均年龄、身高、体重2、统计男篮运动员的平均年龄、身高、体重的极差值3、统计男篮运动员的体质指数 实验小结 实验目的 能够熟练运用gr…

NISEDIT如何发布,Qt如何发布文章?难道还有人不会(超详细教学,跟着走,不会你怪我)

一、自动发布 直接运行即可&#xff0c;不过多阐述。 二、手动发布 文件清单&#xff1a; ExamSys.exe account.txt、exam.txt Qt5Core.dll、Qt5Gui.dll、Qt5Widgets.dll libstdc-6.dll、libwinpthread-1.dll、libgcc_s_sjlj-1.dll、libgcc_s_dw2-1.dll 注意&#xff1a…

Vue项目中vuex的安装和使用

Vue项目中vuex的安装和使用 1. 安装vuex2. 导入vuex包并创建store仓库3. 在main.js中导入store实例4. 检测vuex是否能正常使用 1. 安装vuex npm install vuex --save2. 导入vuex包并创建store仓库 在项目文件目录中&#xff0c;在src目录下创建一个名为store的文件夹&#xf…

图表控件LightningChart JS使用指南 - 如何创建仪表图

LightningChart JS是性能最高的JavaScript图表库&#xff0c;专注于实时数据可视化。是Web上性能最高的图表库具有出色的执行性能 - 使用高数据速率同时监控数十个数据源。 GPU加速和WebGL渲染确保您的设备的图形处理器得到有效利用&#xff0c;从而实现高刷新率和流畅的动画。…

【大数据处理与可视化】六、数据可视化

【大数据处理与可视化】六、数据可视化 实验目的实验内容实验步骤一、案例——画图分析某年旅游景点数据1、河北省总面积和游客量位居前三的景点2、河北省旅游量的占比哪个最多&#xff0c;哪个最少。 实验小结 实验目的 1.能够详述常见图表的类型和特点。 2.能够熟练运用Matp…