Linux交叉编译

server/2024/9/19 14:14:52/ 标签: elasticsearch, 大数据, 搜索引擎, 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:

linux5.16.17%E4%B8%8B%E5%AD%98%E5%9C%A8Orangepizero2_3.1.0_ubuntu_jammy_desktop_xfce_linux5.16.17.img%E9%95%9C%E5%83%8F%E3%80%82%E5%8F%AF%E7%83%A7%E5%86%99%E5%88%B0SD%E5%8D%A1%E4%B8%8A%E8%BF%90%E8%A1%8C%E3%80%82">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.ppmy.cn/server/41860.html

相关文章

【数据结构】栈的实现(链式栈)

文章目录 栈的实现(链式栈)栈的定义初始化栈进栈判断是否为空栈出栈销毁栈获取栈顶元素获取栈的长度栈的打印 完整代码(包括测试代码)Stack.hStack.ctest.c 栈的实现(链式栈) 首先新建一个工程&#xff1a…

记一次跨域问题

线上跨域问题,在自己配置确认没问题下,要及时找运维看看是不是nginx配置问题。 两个方面: 项目代码 nginx配置 SpringBoot 解决跨域问题的 5 种方案! SpringBoot解决CORS跨域问题 SpringBoot-实现CORS跨域原理及解决方案

itext5.5.13 PDF预览权限问题

PdfUtils.htFile.createNewFile() createNewFile 创建文件错误错误原因方式一方式二实例代码-生成PDF表格数据 createNewFile 创建文件错误 ht getResourceBasePath() "\\templates\\ht.pdf"; htFile new File(ht);代码含义是创建源文件路…

LeetCode73.矩阵置零

题目链接: 73. 矩阵置零 - 力扣(LeetCode) 分析:普通的模拟问题,我们按照题目的要求进行模拟,把需要的位置置0即可。 算法思路:题目要求原地计算,所以迁移这个矩阵是不现实的。这…

yaml配置文件的在深度学习中的简单应用

1 .创作灵感 小伙伴们再阅读深度学习模型的代码的时候,经常会遇到yaml格式的配置文件。用这个配置文件是因为我们在训练模型的时候会涉及很多的参数,如果这些参数东一个,西一个,我们调起来的时候就会很不方便,所以用y…

vue3和vite

vue3 1、vue3使如何实现效率提升的 客户端渲染效率比vue2提升了1.3~2倍 SSR渲染效率比vue2提升了2~3倍 1.1、静态提升 解释&#xff1a; 1. 对于静态节点&#xff08;如&#xff1a;<h1>接着奏乐接着舞</h1>&#xff09;&#xff0c;vue3直接提出来了&#xff…

GIN框架_请求参数

请求参数 1. Get请求参数 使用Get请求传参时&#xff0c;类似于这样 http://localhost:8080/user/save?id11&namezhangsan。 如何获取呢&#xff1f; 1.1 普通参数 request url: http://localhost:8080/user/save?id11&namezhangsan r.GET("/user/save&qu…

收藏与品鉴:精酿啤酒的艺术之旅

啤酒&#xff0c;这一古老的酒精饮品&#xff0c;不仅是人们生活中的日常饮品&#xff0c;更是一种艺术和文化的载体。对于Fendi club啤酒而言&#xff0c;收藏与品鉴更是一门深入骨髓的艺术之旅。 Fendi club啤酒的收藏&#xff0c;不仅仅是简单的存放和保管&#xff0c;而是一…

Leecode热题100---15:三数之和为零

题目&#xff1a; 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。 请你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的…

搜维尔科技:【案例分享】Xsens用于工业制造艺术创新设计平台

用户名称&#xff1a;北京理工大学 主要产品&#xff1a;Xsens MVN Awinda惯性动作捕捉系统 在设计与艺术学院的某实验室内&#xff0c;通过Xsens惯性动作捕捉&#xff0c;对人体动作进行捕捉&#xff0c;得到人体三维运动数据&#xff0c;将捕到的数据用于后续应用研究。…

国学经典 书籍推荐

国学经典书籍浩如烟海&#xff0c;涵盖了哲学、历史、文学、语言学等多个方面&#xff0c;以下是一些被广泛认为是必读的经典推荐&#xff1a; 儒家经典 《论语》&#xff1a;记录孔子及其弟子言行&#xff0c;儒家思想的核心著作。《孟子》&#xff1a;孟子的言行录&#xff0…

【使用Condition来模拟生产消费】

使用Condition来模拟生产消费 1. 关于ReentrantLock 和condition的认知?2.使用condition实现生产者-消费者1. 关于ReentrantLock 和condition的认知? /*Q: ReentrantLock是如何实现管理锁和线程的?A: ReentrantLock是并发包中 一个类,它实现了Lock接口,提供了比内置synch…

Shopee、Lazada等平台怎么做测评?

最近有很多人咨询南哥跨境电商平台测评应该怎么做&#xff0c;今天我就针对东南亚站点&#xff0c;详细跟大家分享一下东南亚平台测评需要哪些资源 测评环境系统 不管做任何平台&#xff0c;首先你要有一个稳定的测评环境系统&#xff0c;测评环境系统的底层逻辑就是通过一台…

leetcode-字符串变形-104

题目要求 思路 1.首先根据ASCII的规则&#xff0c;把字符串大小写替换&#xff0c;空格保持不变 2.将整个字符串进行翻转 3.以空格为区间&#xff0c;将区间内的字符串进行翻转&#xff0c;其中翻转的函数reverse() 代码实现 class Solution { public:string trans(string s…

“普惠门诊保”24年升级回归! 您医保的有效商业补充!

2024年5月15日&#xff0c; “普惠门诊保如意版”正式官宣发布&#xff01; 2023年&#xff0c;中国人民财产保险股份有限公司湖南省分公司积极创新的惠民型商业补充医疗保险&#xff0c;推出湖南省内首款互联网门诊医疗保险“普惠门诊保” 2024年&#xff0c;在去年保障内容…

每日Attention学习1——Parallel Aggregation Pyramid Pooling Module

模块出处 [CVPR 23] [link] [code] PIDNet: A Real-time Semantic Segmentation Network Inspired by PID Controllers 模块名称 Parallel Aggregation Pyramid Pooling Module (PAPPM) 模块作用 多尺度特征提取&#xff0c;更大感受野 模块结构 模块代码 import torch imp…

PHP数值数组讲解,for循环及函数 遍历数组获取元素

源码 <?phpheader("Content-Type:text/html;Charsetutf8");//创建数值数组$arr1 array();//简化创建语法 $arr2 [];//通过索引为数组添加不同类型的元素$arr1[0] "zhangsan" ;//也可以乱序添加元素$arr1[2] 12 ;$arr1[1] true ; //true输出为1 f…

摸鱼大数据——Linux搭建大数据环境(Hadoop集群的web-ui和安装Hive)四

集群web-ui 一旦Hadoop集群启动并运行&#xff0c;可以通过web-ui进行集群查看&#xff0c;如下所述&#xff1a; 访问HDFS的NameNode主机 : http://192.168.88.101:9870/ 访问YARN的ResourceManager主机 : http://192.168.88.101:8088/ 注意: 想要上传文件夹需要配置本地域…

微信小程序中的数据可视化组件封装艺术【附代码】

微信小程序中的数据可视化组件封装艺术 一、数据可视化的魅力与重要性数据可视化简述为什么要在小程序中封装数据可视化组件 二、微信小程序数据可视化基础小程序中的绘图工具&#xff1a;Canvas 三、实战&#xff1a;封装一个简易折线图组件设计思路组件结构&#xff08;line-…

解决springboot+vue静态资源刷新后无法访问的问题

一、背景 原项目是有前后端分离设计&#xff0c;测试环境是centos系统&#xff0c;采用nginx代理和转发&#xff0c;项目正常运行。 项目近期上线到正式环境&#xff0c;结果更换了系统环境&#xff0c;需要放到一台windows系统中&#xff0c;前后端打成一个jar包&#xff0c;…