当前位置: 首页 > news >正文

BPI-R3开发板 - uboot编译

一. 获取源码

        https://github.com/mtk-openwrt/u-boot

二. 编译步骤

        编译环境为ubuntu 18.04。交叉编译工具链我用的是openwrt编译生成的工具链,并设置到环境变量,如下:

export PATH=$PATH:/root/mt8976/BPI-R3-OPENWRT-V21.02.3-main/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_musl/bin

export STAGING_DIR=/root/mt8976/BPI-R3-OPENWRT-V21.02.3-main/staging_dir

1. 配置

        make mt7986a_bpir3_sd_defconfig

2. 编译代码

        make CROSS_COMPILE=aarch64-openwrt-linux- V=1

V=1:可以看到具体的编译命令是什么,便于查看编译问题的具体原因。

PS:编译过程中可能会报如下错误:

tools/sunxi_toc0.o: In function `toc0_verify_header':
sunxi_toc0.c:(.text+0x4f5): undefined reference to `RSA_set0_key'
sunxi_toc0.c:(.text+0x50c): undefined reference to `RSA_get0_n'
sunxi_toc0.c:(.text+0x52a): undefined reference to `RSA_get0_e'
sunxi_toc0.c:(.text+0x5f0): undefined reference to `RSA_set0_key'
sunxi_toc0.c:(.text+0x702): undefined reference to `RSA_set0_key'
sunxi_toc0.c:(.text+0x719): undefined reference to `RSA_get0_n'
sunxi_toc0.c:(.text+0x726): undefined reference to `RSA_get0_n'
sunxi_toc0.c:(.text+0x743): undefined reference to `RSA_get0_e'
sunxi_toc0.c:(.text+0x750): undefined reference to `RSA_get0_e'
tools/sunxi_toc0.o: In function `toc0_set_header':
sunxi_toc0.c:(.text+0xaa5): undefined reference to `RSA_get0_d'
sunxi_toc0.c:(.text+0xafe): undefined reference to `RSA_get0_d'
sunxi_toc0.c:(.text+0xd81): undefined reference to `RSA_get0_n'
sunxi_toc0.c:(.text+0xda9): undefined reference to `RSA_get0_e'
sunxi_toc0.c:(.text+0xde9): undefined reference to `RSA_get0_n'
sunxi_toc0.c:(.text+0xe11): undefined reference to `RSA_get0_e'
sunxi_toc0.c:(.text+0xf14): undefined reference to `RSA_get0_n'
sunxi_toc0.c:(.text+0xf29): undefined reference to `BN_bn2binpad'
sunxi_toc0.c:(.text+0xf3b): undefined reference to `RSA_get0_e'
sunxi_toc0.c:(.text+0xf50): undefined reference to `BN_bn2binpad'
tools/lib/ecdsa/ecdsa-libcrypto.o: In function `prepare_ctx':
ecdsa-libcrypto.c:(.text+0xcd): undefined reference to `OPENSSL_init_ssl'
ecdsa-libcrypto.c:(.text+0x185): undefined reference to `EC_GROUP_order_bits'
tools/lib/ecdsa/ecdsa-libcrypto.o: In function `ecdsa_check_signature.isra.3':
ecdsa-libcrypto.c:(.text+0x3ad): undefined reference to `ECDSA_SIG_set0'
tools/lib/ecdsa/ecdsa-libcrypto.o: In function `ecdsa_sign':
ecdsa-libcrypto.c:(.text+0x497): undefined reference to `ECDSA_SIG_get0'
ecdsa-libcrypto.c:(.text+0x4ae): undefined reference to `BN_bn2binpad'
ecdsa-libcrypto.c:(.text+0x4c0): undefined reference to `BN_bn2binpad'
tools/lib/ecdsa/ecdsa-libcrypto.o: In function `ecdsa_add_verify_data':
ecdsa-libcrypto.c:(.text+0x68d): undefined reference to `EC_GROUP_order_bits'
ecdsa-libcrypto.c:(.text+0x6d3): undefined reference to `EC_POINT_get_affine_coordinates'
tools/lib/rsa/rsa-sign.o: In function `rsa_sign':
rsa-sign.c:(.text+0x524): undefined reference to `OPENSSL_init_ssl'
tools/lib/rsa/rsa-sign.o: In function `rsa_get_params':
rsa-sign.c:(.text+0x973): undefined reference to `RSA_get0_key'
rsa-sign.c:(.text+0x9c0): undefined reference to `RSA_get0_key'
tools/lib/rsa/rsa-sign.o: In function `rsa_add_verify_data':
rsa-sign.c:(.text+0xe21): undefined reference to `EVP_PKEY_get0_RSA'
collect2: error: ld returned 1 exit status
scripts/Makefile.host:104: recipe for target 'tools/dumpimage' failed
make[1]: *** [tools/dumpimage] Error 1
Makefile:1916: recipe for target 'tools' failed
make: *** [tools] Error 2

        编译sunxi_toc0.c缺少openssl库,也可能是因为openssl版本低导致的。这里我手动编译安装了openssl-1.1.1n版本的库,具体步骤如下:

cd openssl-1.1.1n

./configure

make && make install

ldconfig

3. 取出uboot        

        uboot编译成功结果如下:

[root@ u-boot-mtksoc]#make CROSS_COMPILE=aarch64-openwrt-linux- UPD     include/generated/timestamp_autogenerated.hENVC    include/generated/env.txtENVP    include/generated/env.inENVT    include/generated/environment.hCC      cmd/version.oAR      cmd/built-in.oCC      env/common.oAR      env/built-in.oLD      u-bootOBJCOPY u-boot.srecOBJCOPY u-boot-nodtb.binRELOC   u-boot-nodtb.binCAT     u-boot-dtb.binCOPY    u-boot.binSYM     u-boot.symMKIMAGE u-boot-mtk.binCFGCHK  u-boot.cfgOFCHK   .config

u-boot:代码编译的最原始的uboot,包含符号信息,debug信息等等。

u-boot-nodtb.bin:u-boot通过objcopy,留下了必要的段,所以大小较u-boot小非常多。

u-boot-dtb.bin:是在u-boot-nodtb.bin的基础上,追加了dts/dt.dtb文件。

u-boot.bin:是u-boot-dtb.bin的副本。

u-boot.sym:u-boot的符号表信息。

u-boot-mtk.bin:u-boot.bin文件通过mkimage命令处理过的文件。用于最终烧写的文件。

三. 总结

        编译BPI-R3开发板uboot用的交叉编译工具链是编译openwrt产生的,编译过程中可能会报openssl相关错误,可以安装openssl-1.1.1n解决,记得安装完openssl就运行ldconfig,uboot编译完,烧写u-boot-mtk.bin文件。

相关文章:

BPI-R3开发板 - uboot编译

一. 获取源码 https://github.com/mtk-openwrt/u-boot 二. 编译步骤 编译环境为ubuntu 18.04。交叉编译工具链我用的是openwrt编译生成的工具链,并设置到环境变量,如下: export PATH$PATH:/root/mt8976/BPI-R3-OPENWRT-V21.02.3-main/staging…...

优秀程序员的5个特征,你在第几层?

每个人程序员都对未来的职业发展有着憧憬和规划,要做架构师、要做技术总监、要做CTO。但现实总是复杂的,日复一日的工作与生活总能让人一次又一次地陷入迷茫。大部分原因就是对职业发展轨迹和自我能力提升的一般规律缺乏认识,做事找不到方向或…...

JAVA Session会话 Thymeleaf - 视图模板技术配置步骤

JAVAWebSession会话会话跟踪技术session保存作用域Thymeleaf - 视图模板技术配置过程Session会话 HTTP是无状态的:服务器无法区分这两个请求是同一个客户端发过来的,还是不同的客户端发过来的 现实问题:第一次请求是添加商品到购物车&#x…...

Linux编译cpprestsdk库

本文用的Linux系统为Ubuntu22.04,自带GCC11.3.0。 依赖 ①编译需要boost库,本文用的库版本为boost-1.82.0.beta1.tar.gz。 ②编译需要openssl库,这里使用的版本为openssl-1.1.1s.tar.gz。 ③编译需要cmake库,本文使用的是cmake-3…...

算法的时间复杂度和空间复杂度

目录 1 如何衡量一个算法的好坏 2.时间复杂度 2.1 时间复杂度的概念 2.2 大O的渐进表示法 2.3常见代码举例 2.3.1 Func2 O(N) 2.3.2 Func3 O(MN) 2.3.3 Func4 O(1) 2.3.4 Func5 strchr O(N) 2.3.5 Func6 冒泡排序 O(N^2) 2.3.6 Func7 二分…...

基本认识vue3

一、基本搭建 项目搭建 使用 最新的 Vue3 TS Vite项目 执行命令 (本项目采用如下方式) npm create vitelatest my-vite-app --template vue-ts或者 运行项目 npm install npm run dev项目搭建初始化目录 新搭建的项目可能会遇到个问题&#xf…...

HTTP/HTTPS协议认识

写在前面 这个博客我们要要讨论的是协议,主要是应用层.今天我们将正式认识HTTP和HTTPS,也要认识序列化和反序列化,内容比较多,但是不难 再谈协议 我们程序员写的一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应用层,我们要完成下面三个步骤. sock的使用 定制…...

【VScode】远程连接Linux

目录标题1. 安装扩展插件2. 在Linux上操作3. 确定Linux的IP地址4. 远程连接到Linux5. 实现免密码登录使用 VScode 远程编程与调试的时有会用到插件 Remote Development,使用这个插件可以在很多情况下代替 vim 直接远程修改与调试服务器上的代码,同时具备…...

QT/C++调试技巧:内存泄漏检测

文章目录内存泄漏方案一方案二:CRT调试定位代码位置方法1方法2其它问题方案三:使用vs诊断工具方案四:使用工具VLD(Visio Leak Detector)方案五Cppcheck内存泄漏 内存泄漏:指的是在程序里动态申请的内存在使…...

【贪心算法】一文让你学会“贪心”(贪心算法详解及经典案例)

文章目录前言如何理解“贪心算法”?贪心算法实战分析1.分糖果2.钱币找零3.区间覆盖内容小结最后说一句🐱‍🐉作者简介:大家好,我是黑洞晓威,一名大二学生,希望和大家一起进步。 👿本…...

【字体图标iconfont】字体图标部署流程+项目源码分析

今日,心情甚是烦闷,原由… 公司项目需要将字体图标做一些细微的调整,我一人分析了许久,看不大懂源码的逻辑,产生了自我怀疑。深吸一口气,重新鼓起勇气,调整心境,一下子豁然开朗&…...

2023最全的Web自动化测试介绍(建议收藏)

做测试的同学们都了解,做Web自动化,我们主要用Selenium或者是QTP。 有的人可能就会说,我没这个Java基础,没有Selenium基础,能行吗?测试虽然属于计算机行业,但其实并不需要太深入的编程知识&…...

jvm_根节点枚举安全点安全区域

1、可达性分析可以分成两个阶段 根节点枚举 从根节点开始遍历对象图 前文我们在介绍垃圾收集算法的时候,简单提到过:标记-整理算法(Mark-Compact)中的移动存活对象操作是一种极为负重的操作,必须全程暂停用户应用程序才能进行,像这…...

fabric(token-erc-20链码部署)

确保自己已经安装了fabric。没有安装的可以参考我之前的教程fabric中bootstrap.sh到底帮助我们干了什么?(手动执行相关操作安装fabric2.4)_./bootstrap.sh_小小小小关同学的博客-CSDN博客小伙伴们在跟着官方示例来安装fabric的时候都是相当烦…...

C语言基础——流程控制语句

文章目录一、流程控制语句 -- 控制程序的运行过程 9条(一)、条件选择流程控制语句:if语句if……else……语句if……else if……语句switch语句(二)、循环流程控制语句:for语句while语句do while……语句co…...

WinForm | C# 界面弹出消息通知栏 (仿Win10系统通知栏)

ApeForms 弹出消息通知栏功能 文章目录ApeForms 弹出消息通知栏功能前言全局API通知栏起始方向通知排列方向通知栏之间的间隔距离无鼠标悬停时的不透明度消息通知窗体的默认大小示例代码文本消息提示栏文本消息提示栏(带选项)图文消息提示栏图文消息提示…...

刷题之最长公共/上升子序列问题

目录 一、最长公共子序列问题(LCS) 1、题目 2、题目解读 ​编辑 3、代码 四、多写一题 五、应用 二、最长上升子序列问题(LIS) 1、题目 2、题目解读 3、代码 四、多写一道 Ⅰ、题目解读 Ⅱ、代码 一、最长公共子序列问题&…...

【数据结构】千字深入浅出讲解栈(附原码 | 超详解)

🚀write in front🚀 📝个人主页:认真写博客的夏目浅石. 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 📣系列专栏:C语言实现数据结构 💬总结:希望你看完…...

自动驾驶V2X

1 SoC MDM9250 2 设备网络节点 mhi_swip0 rmnet_mhi0 3 网络协议栈log打印控制 include/linux/netdevice.h ethtool -s eth0 msglvl [level] ethtool -s eth0 msglvl 0x6001 4 URLs MHI initial design review https://lore.kernel.org/lkml/001601d52148$bd852840$388f78c0$c…...

零基础自学网络安全/渗透测试有哪些常见误区?

一、网络安全学习的误区 1.不要试图以编程为基础去学习网络安全 不要以编程为基础再开始学习网络安全,一般来说,学习编程不但学习周期长,且过渡到网络安全用到编程的用到的编程的关键点不多。一般人如果想要把编程学好再开始学习网络安全往…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...