本篇记录 ubuntu16.04 系统,搭建 mpis指令集的 mtk7621 - OpenWRT 交叉编译环境过程,以及验证编译环境,总共分为 5 步 进行,分别是: 编译目标板镜像、配置交叉编译链环境变量、编译测试代码、FTP 下载可执行文件和验证程序运行情况。
第一步 编译目标板 openWrt 镜像
- make menuconfig 选择 toolchain 和 FTP 组件功能
<> Package the OpenWrt-based Toolchain 工具链
> Network
> File Transfer
> <> vsftpd… Fast and secure FTP server (no TLS)
第二步 在ubuntu上配置 交叉编译工具链的 环境变量
- (1) 把 编译出的 toolchain-ramips-mt7621_gcc-7.5.0_musl.Linux-x86_64.tar.bz2 文件解压至 /opt/文件夹下,
编译输出内容如下:
~/OpenWrt/mtk7621-19.07$ ll bin/targets/ramips/mt7621/
total 88068
drwxr-xr-x 3 robot robot 4096 Jun 4 14:47 ./
drwxr-xr-x 3 robot robot 4096 Apr 20 16:24 ../
-rw-r--r-- 1 robot robot 23177 Jun 4 18:09 config.buildinfo
-rw-r--r-- 1 robot robot 263 Jun 4 18:09 feeds.buildinfo
-rw-r--r-- 1 robot robot 13986 Jun 4 18:12 ramips-mt7621-device-unielec-u7621-06-256m-16m.manifest
-rw-r--r-- 1 robot robot 22273406 Jun 4 18:12 ramips-mt7621-unielec_u7621-06-256m-16m-initramfs-kernel.bin
-rw-r--r-- 1 robot robot 24118059 Jun 4 18:12 ramips-mt7621-unielec_u7621-06-256m-16m-squashfs-sysupgrade.bin
-rw-r--r-- 1 robot robot 43675785 Jun 4 14:47 toolchain-ramips-mt7621_gcc-7.5.0_musl.Linux-x86_64.tar.bz2
drwxr-xr-x 2 robot robot 36864 Jun 3 18:53 packages/
-rw-r--r-- 1 robot robot 778 Jun 4 18:12 sha256sums
-rw-r--r-- 1 robot robot 8 Jun 4 18:09 version.buildinfo
解压交叉编译工具链至 " /opt/ " 文件夹下
$ sudo tar xvf toolchain-ramips-mt7621_gcc-7.5.0_musl.Linux-x86_64.tar.bz2 -C /opt/
- (2) 指定 STAGING_DIR 工作路径
export STAGING_DIR=/home/robot/OpenWrt/mtk7621-19.07/staging_dir
- (3). 配置交叉编译的环境
因ubuntu系统中有多套开发环境,因此采用单独 build.sh 文件方式存储环境变量,配置内容如下:
export PATH=/opt/toolchain-0.11-ramips-mt7621_gcc-7.5.0_musl.Linux-x86_64/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin:$PATH
export STAGING_DIR=/home/robot/OpenWrt/mtk7621-19.07/staging_dir
第三步 编译测试代码
- (1)编写简单测试代码hello world文件
vim hello.c
#include <stdio.h>
int main(void){
int i = 4;
printf("\n\r hello ,world... \n\r");
printf("i = %d \n\r",i);
return 0;
}
- (2)source build.sh 文件
$ mipsel-openwrt-linux-gcc -v
Reading specs from /opt/openwrt-toolchain-ramips-mt7621_gcc-7.5.0_musl.Linux-x86_64/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../lib/gcc/mipsel-openwrt-linux-musl/7.5.0/specs
COLLECT_GCC=mipsel-openwrt-linux-musl-gcc.bin
COLLECT_LTO_WRAPPER=/opt/openwrt-toolchain-ramips-mt7621_gcc-7.5.0_musl.Linux-x86_64/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../libexec/gcc/mipsel-openwrt-linux-musl/7.5.0/lto-wrapper
Target: mipsel-openwrt-linux-musl
Configured with: /home/robot/OpenWrt/mtk762x-19.07/build_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/gcc-7.5.0/configure --with-bugurl=http://bugs.openwrt.org/ --with-pkgversion='OpenWrt GCC 7.5.0 unknown' --prefix=/home/robot/OpenWrt/mtk762x-19.07/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl --build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu --target=mipsel-openwrt-linux-musl --with-gnu-ld --enable-target-optspace --disable-libgomp --disable-libmudflap --disable-multilib --disable-libmpx --disable-nls --without-isl --without-cloog --with-host-libstdcxx=-lstdc++ --with-float=soft --with-gmp=/home/robot/OpenWrt/mtk762x-19.07/staging_dir/host --with-mpfr=/home/robot/OpenWrt/mtk762x-19.07/staging_dir/host --with-mpc=/home/robot/OpenWrt/mtk762x-19.07/staging_dir/host --disable-decimal-float --with-diagnostics-color=auto-if-env --with-mips-plt --disable-libssp --enable-__cxa_atexit --with-headers=/home/robot/OpenWrt/mtk762x-19.07/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/include --disable-libsanitizer --enable-languages=c,c++ --enable-shared --enable-threads --with-slibdir=/home/robot/OpenWrt/mtk762x-19.07/staging_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/lib --enable-lto --with-libelf=/home/robot/OpenWrt/mtk762x-19.07/staging_dir/host
Thread model: posix
gcc version 7.5.0 (OpenWrt GCC 7.5.0 unknown)
COMPILER_PATH=/opt/openwrt-toolchain-ramips-mt7621_gcc-7.5.0_musl.Linux-x86_64/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../libexec/gcc/mipsel-openwrt-linux-musl/7.5.0/:/opt/openwrt-toolchain-ramips-mt7621_gcc-7.5.0_musl.Linux-x86_64/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../libexec/gcc/:/opt/openwrt-toolchain-ramips-mt7621_gcc-7.5.0_musl.Linux-x86_64/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../lib/gcc/mipsel-openwrt-linux-musl/7.5.0/../../../../mipsel-openwrt-linux-musl/bin/
LIBRARY_PATH=/opt/openwrt-toolchain-ramips-mt7621_gcc-7.5.0_musl.Linux-x86_64/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../lib/gcc/mipsel-openwrt-linux-musl/7.5.0/:/opt/openwrt-toolchain-ramips-mt7621_gcc-7.5.0_musl.Linux-x86_64/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../lib/gcc/:/opt/openwrt-toolchain-ramips-mt7621_gcc-7.5.0_musl.Linux-x86_64/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../lib/gcc/mipsel-openwrt-linux-musl/7.5.0/../../../../mipsel-openwrt-linux-musl/lib/
COLLECT_GCC_OPTIONS='-v' '-msoft-float' '-mllsc' '-mplt' '-mno-shared' '-EL' '-mabi=32'
/opt/openwrt-toolchain-ramips-mt7621_gcc-7.5.0_musl.Linux-x86_64/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../libexec/gcc/mipsel-openwrt-linux-musl/7.5.0/collect2 -plugin /opt/openwrt-toolchain-ramips-mt7621_gcc-7.5.0_musl.Linux-x86_64/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../libexec/gcc/mipsel-openwrt-linux-musl/7.5.0/liblto_plugin.so -plugin-opt=/opt/openwrt-toolchain-ramips-mt7621_gcc-7.5.0_musl.Linux-x86_64/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../libexec/gcc/mipsel-openwrt-linux-musl/7.5.0/lto-wrapper -plugin-opt=-fresolution=/tmp/ccTT2zQt.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s --sysroot=/opt/openwrt-toolchain-ramips-mt7621_gcc-7.5.0_musl.Linux-x86_64/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin//../.. --eh-frame-hdr -EL -dynamic-linker /lib/ld-musl-mipsel-sf.so.1 -melf32ltsmip /opt/openwrt-toolchain-ramips-mt7621_gcc-7.5.0_musl.Linux-x86_64/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../lib/gcc/mipsel-openwrt-linux-musl/7.5.0/../../../../mipsel-openwrt-linux-musl/lib/crt1.o /opt/openwrt-toolchain-ramips-mt7621_gcc-7.5.0_musl.Linux-x86_64/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../lib/gcc/mipsel-openwrt-linux-musl/7.5.0/../../../../mipsel-openwrt-linux-musl/lib/crti.o /opt/openwrt-toolchain-ramips-mt7621_gcc-7.5.0_musl.Linux-x86_64/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../lib/gcc/mipsel-openwrt-linux-musl/7.5.0/crtbegin.o -L /home/robot/OpenWrt/mtk7621-19.07/staging_dir/usr/lib -rpath-link /home/robot/OpenWrt/mtk7621-19.07/staging_dir/usr/lib -L/opt/openwrt-toolchain-ramips-mt7621_gcc-7.5.0_musl.Linux-x86_64/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../lib/gcc/mipsel-openwrt-linux-musl/7.5.0 -L/opt/openwrt-toolchain-ramips-mt7621_gcc-7.5.0_musl.Linux-x86_64/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../lib/gcc -L/opt/openwrt-toolchain-ramips-mt7621_gcc-7.5.0_musl.Linux-x86_64/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../lib/gcc/mipsel-openwrt-linux-musl/7.5.0/../../../../mipsel-openwrt-linux-musl/lib -rpath=/opt/openwrt-toolchain-ramips-mt7621_gcc-7.5.0_musl.Linux-x86_64/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin//../../lib:/opt/openwrt-toolchain-ramips-mt7621_gcc-7.5.0_musl.Linux-x86_64/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin//../../usr/lib -lssp_nonshared -lgcc_s -lc -lgcc_s /opt/openwrt-toolchain-ramips-mt7621_gcc-7.5.0_musl.Linux-x86_64/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../lib/gcc/mipsel-openwrt-linux-musl/7.5.0/crtend.o /opt/openwrt-toolchain-ramips-mt7621_gcc-7.5.0_musl.Linux-x86_64/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../lib/gcc/mipsel-openwrt-linux-musl/7.5.0/../../../../mipsel-openwrt-linux-musl/lib/crtn.o
/opt/openwrt-toolchain-ramips-mt7621_gcc-7.5.0_musl.Linux-x86_64/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../lib/gcc/mipsel-openwrt-linux-musl/7.5.0/../../../../mipsel-openwrt-linux-musl/bin/ld: /opt/openwrt-toolchain-ramips-mt7621_gcc-7.5.0_musl.Linux-x86_64/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../lib/gcc/mipsel-openwrt-linux-musl/7.5.0/../../../../mipsel-openwrt-linux-musl/lib/crt1.o: in function `_start_c':
/home/robot/OpenWrt/mtk762x-19.07/build_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/musl-1.1.24/crt/crt1.c:18: undefined reference to `main'
/opt/openwrt-toolchain-ramips-mt7621_gcc-7.5.0_musl.Linux-x86_64/toolchain-mipsel_24kc_gcc-7.5.0_musl/bin/../lib/gcc/mipsel-openwrt-linux-musl/7.5.0/../../../../mipsel-openwrt-linux-musl/bin/ld: /home/robot/OpenWrt/mtk762x-19.07/build_dir/toolchain-mipsel_24kc_gcc-7.5.0_musl/musl-1.1.24/crt/crt1.c:18: undefined reference to `main'
collect2: error: ld returned 1 exit status
- (3)编译hello.c
mipsel-openwrt-linux-gcc hello.c -o hello3
第四步 通过 FTP 下载源码至 mtk7621 目标板
-
(1) 采用 xshell 把编译结果文件 hello3 拷贝至 window 的工作目录
-
(2) 实验 xshell FTP 链接 目标板 mtk7621
$ FTP 192.168.1.1
输入用户名 和 密码
$ lcd
选择 FTP 客户端的工作路径
$ lls
查看FTP路径下的文件
$ put hello3
上传文件至FTP 服务端
第五步 验证编译程序结果
- 采用 console 口、进入目标板
$ cd /root
$ ls
查看到上传到FTP服务端 hello3 文件
$ chmod a+x hello3
赋予 hello3 可执行权限
$ ./hello3
hello3 输出结果正确,交叉编译验证通过。