19 -->ubuntu系统 搭建MTK7621平台的 OpenWRT 交叉编译环境

本篇记录 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 输出结果正确,交叉编译验证通过。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值