Linux交叉编译


一. 交叉编译

1.使用环境要求

新版本的orangepi-build是在Ubuntu22.04的x64电脑或虚拟机上运行的

lsb_release -a //查看自己的虚拟机版本

因为编译出的SDK大概有16G大小,因此,至少给虚拟机分配50G的大小。

2.获取Linux SDK 

方法一:从github上下载orangepi-build

sudo apt update
sudo apt install git
git clone https://github.com/orangepi-xunlong/orangepi-build.git -b next

方法二:从百度网盘下载提前编译好的Linux SDK包

下载下来后是几个拆分好的压缩包,orangepi-build-ok.tar.gz_00                orangepi-build-ok.tar.gz_01                orangepi-build-ok.tar.gz_02

通过以下命令进行合并解压

cat orangepi-build-ok.tar.gz_0* > orangepi-build-ok.tar.gz
tar -xvf orangepi-build-ok.tar.gz

3.修改配置脚本

vi ./external/config/sources/families/sun50iw9.conf

默认内核配置版本是6.1.y,改为5.16.y。不然6.1.y默认编译出的内核没有无线网卡和I2C也不支持

 4.首次编译完整的SDK

若从百度网盘下载后,由于已经包含了交叉编译工具链,uboot和内核源码,可不允许build.sh脚本

1.运行build.sh脚本
sudo ./build.sh

 如果是第一次运行orangepi-build中的build.sh脚本时会自动下载交叉编译工具链、u-boot和linux内核源码,成功编译完一次linux镜像后在orangepi-build中可以看到的文件和文件夹有:

a. external:包含编译镜像需要用的配置文件

b. kernel:存放linux内核的源码

c. LICENSE: GPL 2许可证文件

d. README.md: orangepi-build说明文件

e. output:存放编译生成的u-boot、linux等deb包、编译日志以及编译生成的镜像等文件

f. toolchains:存放交叉编译工具链

g.  u-boot:存放u-boot的源码

h.  userpatches:存放编译脚本需要用到的配置文件

2.选择Full OS image for flashing进行完整镜像的编译

 3.选择不修改配置

 4.根据实际的香橙派派开发版的型号,选orangepizero2

5. 选择根文件系统类型,这边选择ubuntu 22.04的根文件系统,也就是jammy:

6. 选择带桌面环境的

7.最后选择桌面环境,这边选择xfce:

8.编译完成后,/home/mi/orangepi-build/output/images/Orangepizero2_3.1.0_ubuntu_jammy_desktop_xfce_linux5.16.17下存在Orangepizero2_3.1.0_ubuntu_jammy_desktop_xfce_linux5.16.17.img镜像。可烧写到SD卡上运行。
 

5.要使用交叉编译工具链就必须进入层层目录,因此,需要配置环境变量。

vi .bashrc

最后面添加

export PATH=$PATH:/home/$(whoami)/orangepi-build/toolchains/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin

6.配置好环境变量后重启当前操作系统

7.进行交叉编译

 aarch64-none-linux-gnu-gcc -o hello hello.c
file hello

可查看到该文件已经变为了能在ARM架构上运行的文件了

8. 发送编译好的文件到orangepi上

scp hello orangepi@192.168.144.202:/home/orangepi

9.远程连接进入orangepi的操作系统中,即可看到hello文件

二.交叉编译wiringOP库

1. 修改build.sh脚本,在echo “WiringPi Library” 之前添加:

  mkdir -p $PWD/_install/usr/local/bin
  mkdir -p $PWD/_install/usr/local/include
  mkdir -p $PWD/_install/usr/local/lib

2. 修改devLib/Makefile、gpio/Makefile、wiringPiD/Makefile、、wiringPi/Makefile

将所有Makefile中的CC := gcc 改成 CC := aarch64-none-linux-gnu-gcc

3. 修改devLib/Makefile、gpio/Makefile、wiringPiD/Makefile 、wiringPi/Makefile

修改DESTDIR?=/usr 替换为DESTDIR?=$(shell pwd)/../_install/usr

DESTDIR = 当前路径 / _install / usr   ,目的是使编译生成的文件都保存在当前路径 / _install / usr

4. 修改wiringPi/Makefile

将$Q ln -sf $(DESTDIR)$(PREFIX)/lib/libwiringPi.so.$(VERSION)	$(DESTDIR)/lib/libwiringPi.so修改为:$Q ln -sf $(DESTDIR)$(PREFIX)/lib/libwiringPi.so.$(VERSION)	$(DESTDIR)$(PREFIX)/lib/libwiringPi.so

5.修改devLib/Makefile

将$Q ln -sf $(DESTDIR)$(PREFIX)/lib/libwiringPiDev.so.$(VERSION)
$(DESTDIR)/lib/libwiringPiDev.so修改为:$Q ln -sf $(DESTDIR)$(PREFIX)/lib/libwiringPiDev.so.$(VERSION)	$(DESTDIR)$(PREFIX)/lib/libwiringPiDev.so

 6.devLib/Makefile

INCLUDE = -I. 修改为INCLUDE = -I. -I$(DESTDIR)$(PREFIX)/include

7.开始执行

./build

这时候,就会wiringOP-master下生成_INSTALL目录,里面有完整编译出来的库文件和头文件

 8. 打包成压缩包

tar -zcvf _INSTALL.tar.gz _install

9. 使用scp传输文件到香橙派

scp _INSTALL.tar.gz orangepi@192.168.144.202:/home/orangepi

10.进行解压

tar -zxvf _INSTALL.tar.gz

11.将_install里的内容拷贝到香橙派的根目录下

sudo cp * / -af

12.帮助系统更新共享库缓存,以便动态链接器能够正确地定位和加载这些共享库文件。

sudo ldconfig

13.然后就可以使用该库了

sudo gpio readall

三.智能垃圾桶交叉编译

1.调整项目的结构为:

├──inc
│
    ├──garbage.h
│
    ├──myoled.h
│
    ├──pwm.h
│
    ├──socket.h
│
    └──uartTool.h
├──src
│
    ├──garbage.c
│
    ├──garbage.py
│
    ├──main.c
│
    ├──myoled.c
│
    ├──pwm.c
│
    ├──socket.c
│
    └──uartTool.c
|

2.增加3rd目录,用于存放wiringOP和python3.10等第三方依赖库和头文件。

首先,从香橙派上利用apt download下载依赖包的头文件和库文件,并拷贝到宿主机里:

apt download zliblg zliblg-dev libpython3.10 libpython3.10-dev libexpatl libexpatl-dev libcryptl libcrypt-dev
scp *deb mi@192.168.81.39:/home/mi

3. 解压到/home/mi/Desktop/Class/3rd/下

dpkg -x libcrypt1_1%3a4.4.27-1_arm64.deb /home/mi/Desktop/Class/3rd/
dpkg -x libcrypt-dev_1%3a4.4.27-1_arm64.deb /home/mi/Desktop/Class/3rd/
dpkg -x libexpat1_2.4.7-1ubuntu0.3_arm64.deb /home/mi/Desktop/Class/3rd/
dpkg -x libexpat1-dev_2.4.7-1ubuntu0.3_arm64.deb /home/mi/Desktop/Class/3rd/
dpkg -x libpython3.10_3.10.12-1~22.04.3_arm64.deb /home/mi/Desktop/Class/3rd/
dpkg -x libpython3.10-dev_3.10.12-1~22.04.3_arm64.deb /home/mi/Desktop/Class/3rd/
dpkg -x zlib1g_1%3a1.2.11.dfsg-2ubuntu9.2_arm64.deb /home/mi/Desktop/Class/3rd/
dpkg -x zlib1g-dev_1%3a1.2.11.dfsg-2ubuntu9.2_arm64.deb /home/mi/Desktop/Class/3rd/

4. 宿主机上安装aarch64-linux-gnu-gc 11.2版本并使用该交叉编译工具:

sudo apt install gcc-aarch64-linux-gnu

5.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

React框架-Next 学习-1

创建一个 Next.js 应用,node版本要高,16.5以上 npm淘宝镜像切为https://registry.npmmirror.com npm config set registry https://registry.npmmirror.com npx create-next-applatest//安装后 使用npm run dev 启动 Next.js 是围绕着 页面(pages&am…

智慧园区EasyCVR视频智能管理方案:构建高效安全园区新视界

一、背景分析 园区作为城市的基本单元,是最重要的人口和产业聚集区。根据行业市场调研,90%以上城市居民工作与生活在园区进行,80%以上的GDP和90%以上的创新在园区内产生,可以说“城市,除了马路都是园区”。 园区形态…

高通QCS6490开发(二)AI板卡接口

QCS6490是高通公司针对高端物联网终端而优化的SoC,在性能和功耗上有最优的平衡。《高通QCS6490 AIoT应用开发》是一系列AIoT应用开发文章,介绍如何基于QCS6490平台做AIIoT的应用开发。 本文主要介绍FV01开发板的内部和外部接口。 内部的板载接口如下 接口…

怎么做私域?先来了解私域运营模式!

现在,很多企业都在做私域,但仍旧有很多人会问:我的私域到底要怎么做? 关于这个问题,不同产品无论在消费频次与客单价上,还是在决策链路的长度和复杂度上,都有巨大的差异,消费者需要…

GPT-4o模型介绍和使用方法

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

java项目之企业资产管理系统(springboot+vue+mysql)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的企业资产管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 管理员功能有个人中心&…

程序员兼职引起的纠纷?

最近跟朋友聊天,说遇到一些因兼职工作而引发的争议,因为我本人也曾涉足过兼职领域,因此对程序员兼职时可能遇到的各种情况和应遵循的“套路”准则还有有一些发言权的,所以想和大家聊聊如何安全“兼职”的1/2事项~ ✅顺便内推个机会…

前端面试题(二十三)(答案版)

面试形式:线上电话面试:一面:时长30分钟 面试评价:精准考察项目所需技术理论工作实践 面试官的提问大纲:本公司项目要求本人简历 工作经验:2-4年 公司名称:深圳XX(想知道的就滴喔…

SHELL编程(一)

目录 一、 Linux操作系统(一)内核与操作系统(二)操作系统的功能 二、Linux高级命令(一) 离线安装 dpkg1. 安装2. 使用3. 查看安装详细信息4. 安装路径5. 不完全删除6. 完全删除 (二)…

(内地家长)为什么不建议做香港优才计划?香港身份的孩子不是全都能低分上名校!

(内地家长)为什么不建议做香港优才计划?香港身份的孩子不能都低分上名校! 大部分申请香港优才的朋友,应该是冲着孩子教育、高考升学来的。 确实,香港优才申请后拿到的香港身份,对于孩子读书教…

HT3S-ECS-MDN网关引领智能称重新篇章欧姆龙EtherCAT PLC的集成应用案例

在现代化工业生产中,精确的数据采集和高效的通信系统是确保生产流程顺利运行的关键。特别是在称重环节,数据的准确性和实时性对于生产质量和成本控制至关重要。今天,我们将为您介绍一个成功的案例,展示HT3S-ECS-MDN网关如何连接称…

git常用命令及其ignore文件

1.git本地操作命令 # 查看git的版本 git --version # 生成空的本地仓库 git init # 将文件添加到暂存区 git add 文件 # 将暂存区里的文件提交到本地仓库 git commit -m "描述"2.git远程仓库命令 # 添加远程仓库 git remote add origin http://192.168.1.130:9000/…

MySQL 8.0 全新特性详解

MySQL 8.0带来了许多令人兴奋的新特性和优化功能,下面我将逐一详细介绍每个特性: 一、原生数据字典 MySQL 8.0 引入了原生数据字典,取代了之前使用的.frm、.par、.opt等文件来存储元数据。这一改进使得元数据的访问和管理更加高效和直接。原…

【Java基础】初识正则表达式

正则表达式只适用于字符串 匹配matches 实际使用的是String类中定义的方法boolean matches(String regex) public static void piPei( ){String regex"[1][356789]\\d{9}";boolean boo"14838384388".matches(regex);System.out.println(boo); }验证qq号…

第四篇 Asciidoc - MindMap 思维导图 不是事

MindMap 是一种对思维的简单抽象,说到底,就是一个树状结构。 以下是一个样例: Figure 1. MindMap示例 我们的目录结构、模块结构、分类结构等等,都是树型结构,它非常普遍,因此 MindMap 是笔记软件中,获得最多支持的一种图。 精确地说,这类图,是对思维结构的一种映射…

泛微OA中设置SAP接口

泛微OA中设置SAP接口 在泛微oa中有些时候我们需要对接其他系统的接口,这个时候就体现出泛微oa的强大兼容性了。只需要将其他系统的接口在集成中心中的SAP集成中配置即可。 在点击服务注册之后,需要输入服务名称,以及接口名称,并…

2024 手把手教你MathType 7.8中文破解版详细安装激活图文教程

MathType 7.8中文破解版是一款全球最受欢迎的专业数学公式编辑器工具软件,MathType可视化公式编辑器轻松创建数学方程式和化学公式.兼容Office Word,PowerPoint,Pages,Keynote,Numbers等700多种办公软件,用于编辑数学试卷,书籍,报刊,论文,幻灯演示等文档轻松编写各种复杂的物理…

Image Sensor固定模式噪声(FPN)的消除方法

本文介绍Image Sensor固定模式噪声(FPN)的消除方法。 固定模式噪声(FPN)英文全称:Fixed Pattern Noise,在Image Sensor调试过程中还是比较常见的,它的特点是噪声位置固定不变,不随采…

羊大师解读,成长路上羊大师与健康同在

羊大师解读,成长路上羊大师与健康同在 在成长的道路上,健康无疑是最宝贵的财富。让我们一同探讨如何在成长的道路上,与羊大师和健康并肩前行。 合理饮食:饮食是健康的基础。我们应该保持均衡的饮食,摄入足够的营养&am…

java02

泛型 泛型&#xff1a;编译时检查类型是不是正确&#xff0c;减少类型转换造成的错误。 代码复用性提升。 1.泛型类 T是类型形参&#xff0c;创建对象时传入类型实参。 如果不指定类型&#xff0c;按照object类型处理。不支持基本数据类型。 class Student<T>{ pr…