欢迎光临散文网 会员登陆 & 注册

构建树莓派交叉编译环境(基于虚拟机ubuntu18)

2023-06-09 19:25 作者:碗仔粿  | 我要投稿

首先,建议在root用户下进行环境搭建,因为有些指令操作的目录权限只有root用户才有,而环境变量添加是按照用户添加的,构建交叉编译环境的过程中使用su 指令获取root用户权限的时候会将之前加入的环境变量清空,导致找不到相关文件。

树莓派采用64位ubuntu20系统

一、搭建交叉编译工具

  1. 下载对应树莓派版本的相关软件包

    在树莓派上使用如下命令进行查看版本信息

    1.Binutils版本 ld -v           本机2.34

    2.GCC版本 gcc -v            本机9.4.0

    3.GLIBC版本 ldd --version    本机2.31

    4.树莓派linux内核版本 uname -a   本机5.4.0-1085-raspi

    上国内镜像资源网站下载对应版本上述资源(这里使用清华镜像)在下述地址下载1-3

    https://mirrors.tuna.tsinghua.edu.cn/gnu

    在树莓派官网下载相应版本Linux内核

    https://github.com/raspberrypi/linux

2.将下载好的压缩包放到虚拟机ubuntu的文件夹下

    我们在用户的home目录下新建gcc_all文件夹用于存放相关文件

            1   cd ~ 

         2 mkdir gcc_all && cd gcc_all

 然后将压缩包拖进去(用鼠标托。。别问我怎么托),解压压缩包

        tar xf binutils-2.34.tar.bz2 

        2 tar xf glibc-2.31.tar.bz2 

        3 tar xf gcc-9.4.0.tar.gz 

        4.unzip linux-rpi-5.4.y.zip

3.在GCC文件夹中下载prerequisite

        1 cd gcc-9.4.0 

  2 contrib/download_prerequisites

4.在opt目录下创建文件夹用于存放交叉编译工具(opt文件是我们存放用户自定义文件的地方)然后将文件路径添加到环境变量中(不添加后续编译会报错)

        1 cd ~/gcc_all 

        2 sudo mkdir -p /opt/cross-pi-gcc 

        3 sudo chown $USER /opt/cross-pi-gcc 

        4 export PATH=/opt/cross-pi-gcc/bin:$PATH

5.复制内核头文件

            1  cd ~/gcc_all 

            2  cd linux 

            3  KERNEL=kernel7 

            4  make ARCH=arm INSTALL_HDR_PATH=/opt/cross-pi-gcc/arm-linux-gnueabihf          headers_install

6.构建binutils

            1 cd ~/gcc_all 

            2 mkdir build-binutils && cd build-binutils 

            3 ../binutils-2.34/configure --prefix=/opt/cross-pi-gcc --target=arm-linux-gnueabihf --with-arch=armv6 --with-fpu=vfp --with-float=hard --disable-multilib 

            4 make -j 8 

    5 make install

7.构建部分gcc

            1 cd ~/gcc_all 

            2 mkdir build-gcc && cd build-gcc 

            3 ../gcc-9.4.0/configure --prefix=/opt/cross-pi-gcc --target=arm-linux-gnueabihf --enable-languages=c,c++,fortran --with-arch=armv6 --with-fpu=vfp --with-float=hard --disable-multilib 

            4 make -j8 all-gcc 

            5 make install-gcc

8.构建glibc

            1 cd ~/gcc_all 

            2 mkdir build-glibc && cd build-glibc 

            3 ../glibc-2.31/configure --prefix=/opt/cross-pi-gcc/arm-linux-gnueabihf --build=$MACHTYPE --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf --with-arch=armv6 --with-fpu=vfp --with-float=hard --with-headers=/opt/cross-pi-gcc/arm-linux-gnueabihf/include --disable-multilib libc_cv_forced_unwind=yes 

            4 make install-bootstrap-headers=yes install-headers 

            5 make -j8 csu/subdir_lib 

            6 install csu/crt1.o csu/crti.o csu/crtn.o /opt/cross-pi-gcc/arm-linux-gnueabihf/lib 

            7 arm-linux-gnueabihf-gcc -nostdlib -nostartfiles -shared -x c /dev/null -o /opt/cross-pi-gcc/arm-linux-gnueabihf/lib/libc.so 

            8 touch /opt/cross-pi-gcc/arm-linux-gnueabihf/include/gnu/stubs.h

9.回到gcc编译

            1 cd .. 

            2 cd build-gcc 

            3 make -j8 all-target-libgcc 

            4 make install-target-libgcc

10.完成glibc编译

            1 cd .. 

            2 cd build-glibc 

            3 make -j8 

            4 make install
11.完成GCC交叉编译工具9.4.0搭建

            1 cd .. 

            2 cd build-gcc 

            3 make -j8 

            4 make install

二、测试交叉编译工具

写一个hello,world程序 c/c++都可以(这个自己写。。)

               arm-linux-gnueabihf-g++/gcc test.cpp/c -o test

我用的C++所以执行如下:

    arm-linux-gnueabihf-g++ hello.cpp -o hello

将生成的二进制文件,复制到树莓派上(使用xftp或者u盘都可以)

                chmod +x  文件名    (添加可执行权限)

                ./文件名   (执行)

                输出hello,world 则交叉编译工具搭建完成


三、可能遇到问题

  1. 将编译出的可执行文件放到树莓派上无法运行(报错 No such file or directory)

    因为这个交叉编译工具是32位的  如果树莓派的系统版本是64位则无法执行

    解决方法:

             1.采用静态编译:加入 - static 关键字

               arm-linux-gnueabihf-g++ hello.cpp -static -o hello

               缺点:生成的可执行文件变得很大。。。。。

  2. 在进行交叉工具生成过程中出现权限不够:直接切换root用户(记得重新添加环境变量。)



构建树莓派交叉编译环境(基于虚拟机ubuntu18)的评论 (共 条)

分享到微博请遵守国家法律