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/binmkdir -p $PWD/_install/usr/local/includemkdir -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.

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何对SQL Server中的敏感数据进行加密解密?

为什么需要对敏感数据进行加密? 近几年有不少关于个人数据泄露的新闻(个人数据通常包含如姓名、地址、身份证号码、财务信息等),给事发公司和被泄露人都带来了不小的影响。 许多国家和地区都出台了个人数据保护的法律法规&#…

centos7.9安装es7.12.0

下载es 国内镜像:https://mirrors.huaweicloud.com/elasticsearch/7.12.0/ 下载并上传内容到/usr/local目录下 解压: tar -zxvf /uar/local/elasticsearch-7.12.0-linux-x86_64.tar.gz安装 es一般不能用root启动,因此需要创建es:es用户和…

CF 944 (Div. 4) A~G

文章目录 A My First Sorting Problem(模拟)B Different String(模拟、字符串)C Clock and Strings(模拟)D Binary Cut (贪心)E Find the Car(二分查找、数学)F Circle Perimeter&am…

momentjs

Moment.js 是一个用于处理日期和时间的 JavaScript 库,它提供了许多方便的函数和方法来操作、格式化和解析日期时间。官网 常见用法 格式化日期时间:可以使用format方法将日期时间格式化为指定的字符串格式,例如YYYY-MM-DD HH:mm:ss。获取日…

上海市虹桥祥源希尔顿酒店屋顶气膜网球馆

上海市虹桥祥源希尔顿酒店屋顶气膜网球馆为高端酒店设施增添了现代化、环保的运动场所。这座网球馆不仅为酒店住客提供了一个全天候、舒适的运动空间,也为虹桥地区的居民带来了全新的健身体验。作为轻空间(江苏)膜科技有限公司(以…

运营商二次放号查询接口如何对接

运营商二次放号查询接口又叫手机二次放号检测接口,指的是输入手机号和日期,查看在该日期之前是不是二次放号。那么运营商二次放号查询接口如何对接呢? 这边我找到了一家叫数脉API的公司,他们刚好有这个接口,首先注册账…

如何快速将视频做成二维码?扫描二维码播放视频的制作方法

视频二维码的用途越来越多,比如常见的有产品展示、企业宣传、教程说明、个人展示等都可以生成二维码,通过扫码在手机或者其他设备上预览内容,从而提升其他人获取视频的速度,实现内容的快速分享。 对于有制作视频二维码需求的小伙…

一步一步带你做网络工程

网络工程怎么做 一、网络设备交换机的应用: 要求:在此接入交换机S3700,上划分两个vlan,vlan10和vlan20分别有两个PC,按拓扑图完成要求: 划分vlan添加端口 sys [Huawei]sys S1 [S1]undo in e [S1]undo t…

RSC6218A LLC谐振电源案例分享-REASUNOS(瑞森半导体)

一、前言 RSC6218A是一款可以满足4项标准的优秀产品:①2024年8月1日要实施的《建筑照明设计标准》GBT0034-2024;②2024年07月01日起实施的《电磁兼容限值 第1部分:谐波电流发射限值(设备每相输入电流≤16A)》GB17625.…

学会给文件夹加密,保密措施不可或缺!

我们的个人信息、工作文件和其他重要数据都存储在各种设备和文件夹中,如何保证这些数据的安全,防止未经授权的访问和泄露,成为了一个不容忽视的问题。本文将探讨给文件夹加密的必要性,以及如何在手机和电脑上进行文件夹加密。 操作…

#Docker | Ngrok# 使用Ngrok和Docker进行内网穿透

一、注册 Ngrok官网注册,可以使用gmail或者outlook邮箱, 正常填写后你会收到一封电子邮件,点击邮件中链接即注册成功 二、获取密钥 登录,点击Your Authtoken,最上面copy左边就是你得密钥 三、使用内网穿透启动docker…

链动3+1模式:创新商业模式引领发展新篇章

在数字化浪潮的推动下,企业纷纷寻求创新以应对激烈的市场竞争。链动31模式作为一种创新的商业模式,为企业和个人提供了一种全新的发展途径。本文将详细解析链动31模式的运作机制,并与传统的链动21模式进行对比,探讨其独特优势。 一…