一. 交叉编译
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.