构建ARM uClibc工具链

买了一个几块钱的随身WIFI,CPU是TSP ZX297520V3(ARMv7 Processor rev 4 (v7l) ),做了一个交叉编译工具链,编译了简单的程序进行测试。简单记录一下全部的步骤,如下:

一、目标工具链版本

binutils-2.16.1

linux-3.4.110

uClibc-0.9.33.2

gcc-3.4.3

宿主系统为Manjaro,宿主工具链为pacman直接安装的gcc和binutils

二、编译流程

1. 建立新的工作目录

  • mkdir test (临时工具目录)

  • 将所有工具链解压到test目录

  • mkdir test/tools (新编译出的工具链目录)

2. 编译Binutils

  • cd binutils-2.16.1

  • ./configure --target=arm-linux --prefix=/home/dan/test/tools --program-prefix=arm-linux-

  • make

  • make install

  • export PATH=$PATH:/home/dan/test/tools/bin

3. 编译不含库GCC

  • cd ../gcc-3.4.3

  • ./configure --target=arm-linux --prefix=/home/dan/test/tools --program-prefix=arm-linux- --disable-shared --disable-threads --enable-languages="c" --with-newlib

  • make

  • make install

4. 编译内核头文件

  • cd ../linux-3.4.110

  • make ARCH=arm headers_check

  • make ARCH=arm INSTALL_HDR_PATH=dest headers_install

  • sudo cp -rv dest/include/* ../tools/include

5. 编译uClibc

  • cd ../uClibc-0.9.33.2

  • make menuconfig (根据需要填)

    uClibc runtime library directory 和 uClibc development environment directory 不填

  • vi .config (CROSS_COMPILER_PREFIX="/home/dan/test/tools/bin/arm-linux-")

  • mkdir build

  • make PREFIX=${PWD}/build install

  • sudo cp build/* ~/test/tools -r

6. 第二次编译GCC

  • cd ../gcc-3.4.3

  • ./configure --target=arm-linux --prefix=/home/dan/test/tools --program-prefix=arm-linux- --enable-languages="c" --with-headers=/home/dan/test/tools/include --with-libs=/home/dan/test/tools/lib --with-sysroot=/home/dan/test/tools/

  • make

  • make install

  • sudo cp /home/dan/test/tools/lib/libc.so.0 /lib

  • sudo cp /home/dan/test/tools/lib/uclibc_nonshared.a /lib

  • sudo cp /home/dan/test/tools/lib/ld-uClibc.so.0 /lib

7. 编译实际应用程序

/* 测试程序 */
/* 文件名: a.c */
#include <stdio.h>
int main()
{
    printf("Hello World!\n");
    return 0;
}
  • ./tools/bin/arm-linux-gcc ./a.c -o a.out -I /home/dan/test/tools/include -Wl,--dynamic-linker=/lib/ld-uClibc.so.0

  • ./tools/bin/arm-linux-strip ./a.out

运行程序:

        adb push a.out /mnt/userdata/

        adb shell

        cd /mnt/userdata/

        chmod 777 a.out

        ./a.out

8. 完整工具链构建脚本

# 源代码目录 test-src-archive
​
# 建立工作目录
mkdir -p test && cd test
mkdir -p tools
​
WORKDIR=`pwd`
​
# 解压源码
tar -xf ../test-src-archive/uClibc-0.9.33.2.tar
tar -xf ../test-src-archive/linux-3.4.110.tar
tar -xf ../test-src-archive/binutils-2.16.1.tar.bz2
tar -xf ../test-src-archive/gcc-3.4.3.tar.bz2
​
# 编译Binutils
cd binutils-2.16.1
./configure --target=arm-linux --prefix=${WORKDIR}/tools --program-prefix=arm-linux-
make
make install
export PATH=$PATH:${WORKDIR}/tools/bin
​
# 编译不含库的GCC
cd ../gcc-3.4.3
./configure --target=arm-linux --prefix=${WORKDIR}/tools --program-prefix=arm-linux- --disable-shared --disable-threads --enable-languages="c" --with-newlib
make
make install
​
# 编译内核头文件
cd ../linux-3.4.110
make ARCH=arm headers_check
make ARCH=arm INSTALL_HDR_PATH=dest headers_install 
sudo cp -rv dest/include/* ${WORKDIR}/tools/include
​
# 编译uClibc
cd ../uClibc-0.9.33.2
make menuconfig
sed -i -e "s#CROSS_COMPILER_PREFIX=\"\"#CROSS_COMPILER_PREFIX=\"${WORKDIR}/tools/bin/arm-linux-\"#g" .config
mkdir -p build
make PREFIX=${PWD}/build install
sudo cp build/* ${WORKDIR}/tools -r
​
# 第二次编译GCC
cd ../gcc-3.4.3
./configure --target=arm-linux --prefix=${WORKDIR}/tools --program-prefix=arm-linux- --enable-languages="c"  --with-headers=${WORKDIR}/tools/include --with-libs=${WORKDIR}/tools/lib --with-sysroot=${WORKDIR}/tools/
make
make install
sudo cp ${WORKDIR}/tools/lib/libc.so.0 /lib
sudo cp ${WORKDIR}/tools/lib/uclibc_nonshared.a /lib
sudo cp ${WORKDIR}/tools/lib/ld-uClibc.so.0 /lib
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值