• 交叉编译BusyBox


     最近对板子做BSP升级,升级后再降级出现ping 命令会崩溃,所以准备自己编译下busybox放板子上调试看看是哪一行代码崩溃了,下面记录下编译步骤

    下载BusyBox源码

    进入BusyBox官网,下载源码

    下载完成后,将压缩包拷贝到Host机器。我这里下载的是最新版本1.35.0

    解压压缩包,进入主目录,执行命令开始配置:

    make menuconfig

     显示配置界面:

    从Settings->Build Option,配置cross compiler prefix,Path to sysroot , CFLAGS,LDFALGS.

     比如我用的是arm-poky-linux-gnueabi-gcc交叉编译器

    调用arm-poky-linux-gnueabi-gcc -v

    1. gateway@eden_ubuntu:~/Eden/busybox-1.35.0$ arm-poky-linux-gnueabi-gcc -v
    2. Using built-in specs.
    3. COLLECT_GCC=arm-poky-linux-gnueabi-gcc
    4. COLLECT_LTO_WRAPPER=/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/7.3.0/lto-wrapper
    5. Target: arm-poky-linux-gnueabi
    6. Configured with: ../../../../../../work-shared/gcc-7.3.0-r0/gcc-7.3.0/configure --build=x86_64-linux --host=x86_64-pokysdk-linux --target=arm-poky-linux-gnueabi --prefix=/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr --exec_prefix=/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr --bindir=/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi --sbindir=/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi --libexecdir=/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi --datadir=/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/share --sysconfdir=/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/etc --sharedstatedir=/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/com --localstatedir=/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/var --libdir=/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/lib/arm-poky-linux-gnueabi --includedir=/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/include --oldincludedir=/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/include --infodir=/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/share/info --mandir=/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/share/man --disable-silent-rules --disable-dependency-tracking --with-libtool-sysroot=/home/eltham/NXP/imx-yocto-bsp/build/tmp/work/x86_64-nativesdk-pokysdk-linux/gcc-cross-canadian-arm/7.3.0-r0/recipe-sysroot --with-gnu-ld --enable-shared --enable-languages=c,c++ --enable-threads=posix --enable-multilib --enable-c99 --enable-long-long --enable-symvers=gnu --enable-libstdcxx-pch --program-prefix=arm-poky-linux-gnueabi- --without-local-prefix --enable-lto --enable-libssp --enable-libitm --disable-bootstrap --disable-libmudflap --with-system-zlib --with-linker-hash-style=gnu --enable-linker-build-id --with-ppl=no --with-cloog=no --enable-checking=release --enable-cheaders=c_global --without-isl --with-gxx-include-dir=/not/exist/usr/include/c++/7.3.0 --with-build-time-tools=/home/eltham/NXP/imx-yocto-bsp/build/tmp/work/x86_64-nativesdk-pokysdk-linux/gcc-cross-canadian-arm/7.3.0-r0/recipe-sysroot-native/usr/arm-poky-linux-gnueabi/bin --with-sysroot=/not/exist --with-build-sysroot=/home/eltham/NXP/imx-yocto-bsp/build/tmp/work/x86_64-nativesdk-pokysdk-linux/gcc-cross-canadian-arm/7.3.0-r0/recipe-sysroot --without-long-double-128 --enable-poison-system-directories --with-mpfr=/home/eltham/NXP/imx-yocto-bsp/build/tmp/work/x86_64-nativesdk-pokysdk-linux/gcc-cross-canadian-arm/7.3.0-r0/recipe-sysroot --with-mpc=/home/eltham/NXP/imx-yocto-bsp/build/tmp/work/x86_64-nativesdk-pokysdk-linux/gcc-cross-canadian-arm/7.3.0-r0/recipe-sysroot --enable-nls --enable-initfini-array
    7. Thread model: posix
    8. gcc version 7.3.0 (GCC)

    cross compiler prefix填写arm-poky-linux-gnueabi-

    sysroot填写/opt/fsl-imx-fb/4.14-sumo/sysroots/cortexa7hf-neon-poky-linux-gnueabi

    CFLAGS填写 -mfloat-abi=hard -I /opt/fsl-imx-fb/4.14-sumo/sysroots/cortexa7hf-neon-poky-linux-gnueabi/usr/include.

    -mfloat-abi=hard表示浮点处理由专门的硬件处理

    配置完后保存配置,调用make命令完成编译

    如果编译过程中报错,链接的时候提示:

    ld cannot find crt1.o

    ld cannot find crti.o:

    ld cannot find crtbegin.o:

    我认为是LIB查询路径缺失,所以在LDFALGS加入存放这几个.o文件的路径,但是还是不行,

    这时我就想ld链接器到底是从哪些路径上查找的,查阅资料说有这条命令:

    ld --verbose | grep SEARCH

    可以显示链接器查询的路径,将对于的.o文件放入这个路径下也是一种方法

  • 相关阅读:
    【深度学习】实验13 使用Dropout抑制过拟合
    nvm、node、npm解决问题过程记录
    JavaEE初阶 01 计算机是如何工作的
    FastAPI 学习之路(二十五)路径操作装饰器依赖项
    最短Hamilton路径( 二进制 + 状态压缩dp)
    MongoDB索引与查询优化
    Kafka系列之:深入理解Transformations
    AWS DAS认证考点整理(Kinesis篇)
    cloudflare边缘IP受限报错1034解决方案
    CSDN每日一练 |『因数-数字游戏』『天然气订单』『通货膨胀-x国货币』2023-10-16
  • 原文地址:https://blog.csdn.net/MashiMaroJ/article/details/126308085