suika
文章14
标签15
分类2

Linux 下交叉编译 Rust 程序到 OpenWrt

OpenWrt 是一个为嵌入式设备(通常是路由器)开发的高扩展度的 GNU/Linux 发行版。OpenWrt 不是一个单一且不可更改的固件,而是提供了一个完全可写的文件系统及软件包管理。这使您可以不使用供应商提供的应用程序选择和配置,而是通过使用软件包来定制设备以适应任何应用程序。

准备工作

下载 OpenWrt SDK

这里 下载与你路由器匹配的 SDK(如果你不知道你的路由器匹配哪种 SDK,可以在 这里 查询相关信息)。例如我的路由器是 WNDR4300,则:

cd ~
wget https://downloads.openwrt.org/releases/18.06.4/targets/ar71xx/nand/openwrt-sdk-18.06.4-ar71xx-nand_gcc-7.3.0_musl.Linux-x86_64.tar.xz

解压 OpenWrt SDK

cd ~
tar -Jxf openwrt-sdk-18.06.4-ar71xx-nand_gcc-7.3.0_musl.Linux-x86_64.tar.xz

配置环境变量

PATH=$PATH:~/openwrt-sdk-18.06.4-ar71xx-nand_gcc-7.3.0_musl.Linux-x86_64/staging_dir/toolchain-mips_24kc_gcc-7.3.0_musl/bin
export PATH
export LC_ALL=C.UTF-8

添加交叉编译工具链

rustup target add mips-unknown-linux-musl
  • 请注意:mips 是我的 WNDR4300 路由器处理器架构 ,如果你的路由器跟我不同,请做替换,下同

交叉编译

新建项目

cd ~
cargo new rust-cross-openwrt

配置

cd ~/rust-cross-openwrt
mkdir .cargo
echo -e "[target.mips-unknown-linux-musl]\nlinker = \"mips-openwrt-linux-musl-gcc\"\nar = \"mips-openwrt-linux-musl-ar\"" > .cargo/config

编译

cargo build --target mips-unknown-linux-musl --release

在路由器上运行

上传

scp target/mips-unknown-linux-musl/release/rust-cross-openwrt root@10.0.0.1:/tmp

登录

ssh root@10.0.0.1

运行

/tmp/rust-cross-openwrt
# Hello, world! 
  • 成功打印出 Hello, world! 🎉🎉🎉
本文作者:suika
本文链接:http://suikastar.com/posts/56623/
版权声明:本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议进行许可

少女祈祷中……