全志H616交叉编译,orangepi-zero2

交叉编译是什么

交叉编译:是指一个平台编译好的可执行文件,放到另一个平台去运行例如51单片机利用keil编程这就是一个交叉编译,使用keil编译之后产生的.hex文件再利用某些工具上传到stc89c51单片机上,就可以运行我我们的51代码

换位到Linux上,我们在虚拟机上gcc好一个文件会产生一个.a.out文件,我们将.a.out文件放到ARM-Linux平台上去执行,就是Linux的交叉编译,为什么不直接在ARM-Linux平台直接编译?搞这么麻烦?

为什么需要交叉编译?

1、成本问题,正真去公司开发并不像是学习一样那样高的ARM-Linux配置,都不足以安装gcc编译工具,或者安装好了没法编译运行,资源匮乏,那么交叉编译就诞生了。

2、树莓派是不是就不需要交叉编译?
错。也要。
树莓派有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。操作系统也是代码,也要编译!

平台运行需要两样至少东西:bootloader(启动引导代码)以及操作系统核心

宿主机和目标机

宿主机(host) :编辑和编译程序的平台,一般是基于X86的PC机,通常也被称为主机。(pc)
目标机(target):用户开发的系统,通常都是非X86平台。host编译得到的可执行代码在target上运行。(全志、树莓派,等等)

所需工具

交叉编译是需要工具的,如51单片机需要keil软件编写一样,注意工具的意义是将宿主机的代码编译成可以运行在目标及代码的工具。
软件下载连接
找到gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz就是我们需要的交叉编译工具
在这里插入图片描述
下好,搞到自己的虚拟机上。
我用共享内存直接cp到工作目录的
在这里插入图片描述

解压编译工具

tar -xvf  gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz

-x 解压
-v 显示进度
-f 选择文件

进入目录

cd gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/
cd bin

在这里插入图片描述
标红的文件aarch64-none-linux-gnu-gcc就是全志交叉的交叉编译工具。

接下来

 pwd获得路径
echo $PATH 获得当前环境变量的值

临时有效,配置环境变量(切换终端无效)

PATH 环境变量
export PATH=$PATH$:{你pwm出来的路径}

永久有效,配置环境变量

修改工作目录下的.bashrc 隐藏文件,配置命令终端的

 vi /home/shunge/.bashrc 

在文件最后一行加入:

export PATH=$PATH$:{你pwm出来的路径}

加载配置文件,马上生效配置。

source /home/shunge/.bashrc

查看版本

aarch64-none-linux-gnu-gcc -v

在这里插入图片描述

大功告成开始测试

随便编写一个demo
在这里插入图片描述
编好之后使用编译工具去编译

 aarch64-none-linux-gnu-gcc demo1.c

在这里插入图片描述
发现在本机上编译好出现了.a.out文件运行提示错误,因为此时文件已经成兼容orangepi的文件了,无法在pc端运行

cp demo1.c demo2.c	

分别用俩个gcc进行编译,一个是系统gcc,一个是刚刚下好的。
在这里插入图片描述
接着如下操作:

aarch64-none-linux-gnu-gcc demo1.c -o quanzhi
gcc demo2.c -o pc

在这里插入图片描述
file命令查看,普通文件与他的区别
在这里插入图片描述
一个是x86-64的文件,一个是ARM文件,接下来将,quanzhi文件拷入orangepi-zero2开发板进行测试

拷入文件测试

获得orangepi-zero2绝对路径,准备放到test文件夹
在这里插入图片描述
将这段代码放到orangepi-zero2上去运行

scp quanzhi orangepi@192.168.10.25:/home/orangepi/test
	 指令  文件名  开发板用户名@开发板地址:开发板的绝对路径

在这里插入图片描述
在这里插入图片描述

传送成功!

准备执行
在这里插入图片描述
执行成功!

结束

如遇问题欢迎提出共同进步!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
编译 Linux 内核需要以下步骤: 1. 获取 Linux 内核源代码。你可以从官方网站或 GitHub 上下载最新的内核源代码。 2. 安装交叉编译工具链。如果你的开发环境是 x86 架构的,你需要安装交叉编译工具链来编译适用于 ARM 架构的内核。你可以使用 apt-get 命令或其他包管理器来安装工具链。例如,在 Ubuntu 或 Debian 上,你可以使用以下命令来安装: ``` sudo apt-get install gcc-arm-linux-gnueabihf ``` 3. 配置内核。进入内核源代码目录,使用以下命令来配置内核: ``` make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- orangepi_zero2_defconfig ``` 这将使用默认配置文件来配置内核。 4. 编译内核。使用以下命令来编译内核: ``` make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage dtbs modules ``` 这将编译内核镜像、设备树和内核模块。 5. 安装内核。将编译好的内核镜像和设备树文件复制到 SD 卡的 boot 分区中。例如,在 Ubuntu 或 Debian 上,你可以使用以下命令来安装: ``` sudo cp arch/arm/boot/zImage /media/boot/ sudo cp arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero2.dtb /media/boot/ ``` 6. 配置引导加载程序。编辑 SD 卡的 boot 分区中的 boot.cmd 文件,并添加以下内容: ``` setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait panic=10 fatload mmc 0:1 ${kernel_addr_r} zImage fatload mmc 0:1 ${fdt_addr_r} sun8i-h2-plus-orangepi-zero2.dtb bootz ${kernel_addr_r} - ${fdt_addr_r} ``` 这将配置引导加载程序以加载内核镜像和设备树,并指定内核参数。 7. 生成引导加载程序镜像。使用以下命令来生成引导加载程序镜像: ``` mkimage -C none -A arm -T script -d boot.cmd boot.scr ``` 这将生成一个名为 boot.scr 的文件,它是引导加载程序镜像。 8. 将引导加载程序镜像复制到 SD 卡的 boot 分区中: ``` sudo cp boot.scr /media/boot/ ``` 9. 将 SD 卡插入 Orange Pi Zero 2 开发板,并启动板子。如果一切正常,你应该看到内核启动信息在串口终端中输出。 注意:这只是一个简单的指南,实际的操作可能会因环境和设备而有所不同。请确保你熟悉 Linux 内核编译和 Orange Pi Zero 2 开发板的使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Strange_Head

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值