嵌入式交叉编译

Ubuntu环境下全志H616的交叉编译实践
本文介绍了嵌入式系统中交叉编译的概念,以Ubuntu为宿主机,全志H616开发板为目标平台,详细阐述了交叉编译工具链的下载、配置以及环境变量的设置。同时,展示了如何进行服务端和客户端的交叉编译,以及处理带wiringPi库的交叉编译问题,包括软链接的创建和使用。

一、交叉编译的概念:

1、 交叉编译是什么?
      交叉编译 是在一个平台上 生成  另一个平台上的可执行代码。
例:

     (1)、我们在windows上面编写C51代码,并编译成可执行代码,如xx.hex,该可执行代码通过烧录到51目标系统中,在有51目标系统的开发板上运行,而不是在windows上面运行

     (2)、我们在ubuntu系统上,编写 Orangepi 的代码,并编译成可执行代码,如a.out,是在Orangepi 上面运行,而不是在ubuntu linux上面运行

2、为什么要交叉编译?
      (1)、因为目的平台上的资源贫乏,无法运行我们所需要编译器 (如:C51硬件MCU平台上不允许或不能够安装我们所需要的编译器)     

    (2)、在目标系统中,实现起来比较困难,或是能实现,但是代价比较大,要综合考虑成本问题

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

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

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

5、交叉编译需要用到什么工具?
        交叉编译器、交叉编译工具链

        C51 交叉编译的发生在keil(集成环境)、IAR(集成开发环境)

---------------------------------------------------------------------------------------------------------------------------------

 二、交叉编译的工具:

交叉编译器和交叉编译工具链

1、开发环境:

      软件平台: VMware 10.0版本、   ubuntu 12.04.5版本

      硬件:OrangePiZero2(全志H616)

      交叉编译器:aarch64-none-linux-gnu-gcc

2. 交叉编译工具链的下载:
下载地址:  armbian-releases-_toolchain安装包下载_开源镜像站-阿里云 (aliyun.com)

       gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz  即:全志OrangePiZero 2 应用程序开发的交叉编译工具链。

第一步: 将交叉编译工具链下载、保存到Windows桌面,

第二步: 将下载好的文件(交叉编译工具链)上传到ubuntu虚拟机桌面新建文件夹OrangePiZero2

 第三步:输入 tar -xf gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz  解压

第四步:打开 cd  OrangePiZero2/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin$ ls

aarch64-none-linux-gnu-gcc 即: 全志OrangePiZero2应用程序开发的交叉编译工具 

-------------------------------------------------------------------------------------------------------------------------------

三、设置环境变量:

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

 pwd获得当前路径:

  /home/CLC/OrangePiZero2/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin    
1、配置

嵌入式开发中,交叉编译是一项核心技能,它允许开发者在性能更强的主机(通常是x86架构)上编译出可以在资源受限的目标设备(如ARM、MIPS等架构)上运行的程序。以下是关于嵌入式交叉编译学习资料和教程指南: ### 1. 理解交叉编译的基本概念 交叉编译是指在一个平台上编译出可在另一个平台上运行的可执行文件。这在嵌入式系统开发中尤为常见,因为目标平台通常计算能力有限,无法支持完整的编译环境[^3]。 ### 2. 搭建交叉编译环境 要进行交叉编译,首先需要安装适合目标平台的交叉编译工具链。例如,在基于ARM的开发板上,常用的工具有`arm-linux-gcc`或`arm-none-eabi-gcc`。这些工具链通常由开源社区提供,也可以从芯片厂商获取[^3]。 #### 示例:安装ARM交叉编译工具链 ```bash sudo apt-get install gcc-arm-linux-gnueabi ``` 安装完成后,可以使用以下命令测试是否安装成功: ```bash arm-linux-gnueabi-gcc --version ``` ### 3. 使用不同的构建系统进行交叉编译 许多开源项目使用不同的构建系统,如Autotools、CMake、Meson等。每种构建系统都有其特定的配置方式来启用交叉编译。 #### 使用Autotools进行交叉编译 对于使用Autotools(`configure`脚本)的项目,可以通过指定`--host`参数来设置目标平台。例如: ```bash ./configure --host=arm-linux-gnueabi CC=arm-linux-gnueabi-gcc make ``` #### 使用CMake进行交叉编译 CMake项目可以通过创建一个工具链文件来指定交叉编译器和其他相关设置。示例工具链文件`toolchain.cmake`内容如下: ```cmake SET(CMAKE_SYSTEM_NAME Linux) SET(CMAKE_SYSTEM_VERSION 1) SET(CMAKE_C_COMPILER arm-linux-gnueabi-gcc) SET(CMAKE_CXX_COMPILER arm-linux-gnueabi-g++) SET(CMAKE_FIND_ROOT_PATH /usr/arm-linux-gnueabi) SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) ``` 然后在配置时使用该工具链文件: ```bash cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake .. ``` ### 4. 配置NFS环境以便于调试 为了方便地将编译好的程序传输到目标设备上运行,通常会配置NFS(网络文件系统)。这样可以在开发机上直接挂载目标设备的文件系统,从而实现无缝的文件同步和调试。 #### 配置NFS服务器(开发机) 编辑 `/etc/exports` 文件,添加如下内容: ``` /home/user/target_rootfs *(rw,sync,no_subtree_check) ``` 然后重启NFS服务: ```bash sudo service nfs-kernel-server restart ``` #### 在目标设备上挂载NFS共享目录 ```bash mount -t nfs development_machine_ip:/home/user/target_rootfs /mnt ``` ### 5. 实际案例:Devkit8000开发环境搭建 Devkit8000是一个常见的嵌入式开发板,适用于学习和开发。搭建其开发环境包括安装交叉编译工具链、配置串口通信、设置U-Boot启动加载器等步骤。具体操作可以参考相关的官方文档或社区教程[^2]。 ### 6. 学习建议与进阶内容 - **基础知识**:熟悉Linux操作系统的基本使用,掌握基本的Shell命令和文件操作。 - **硬件知识**:了解目标平台的硬件架构(如ARM、MIPS等),理解内存管理、中断处理等底层机制。 - **调试技巧**:学会使用GDB进行远程调试,配合JTAG或串口连接目标设备。 - **自动化构建**:学习如何使用CI/CD工具(如Jenkins、GitLab CI)自动构建和部署嵌入式应用程序。 - **优化与裁剪**:深入理解内核模块加载、驱动开发以及如何根据需求对系统进行裁剪以节省资源。 通过以上步骤和工具的掌握,可以逐步建立起完整的嵌入式交叉编译能力和实践经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值