安装 rust

  • 安装 rustup,参考官网

    1
    2
    3
    4
    
    export RUST_UPDATE_ROOT=https://mirrors.tuna.tsinghua.edu.cn/rustup
    export RUSTUP_DIST_SERVER=https://mirrors.tuna.tsinghua.edu.cn/rustup
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    # 按照提示,一直 default 即可
    
  • 配置 rustup、toolchain 和 target 更新源

    1
    2
    3
    
    cat >> /etc/profile.d/rustup.sh <<-EOF
        export RUSTUP_DIST_SERVER=https://mirrors.tuna.tsinghua.edu.cn/rustup
    EOF
    
  • 配置 crate 源

    1
    2
    3
    4
    5
    6
    7
    
    cat >> ~/.cargo/config <<-EOF
    [source.crates-io]
    replace-with = 'tuna'
    
    [source.tuna]
    registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"
    EOF
    

交叉编译

树梅派 Alpine armv7/armhf

  • 下载交叉编译工具

    1
    2
    3
    
    curl -LO https://musl.cc/armv7l-linux-musleabihf-cross.tgz
    tar zxf armv7l-linux-musleabihf-cross.tgz -C /opt/
    export PATH=/opt/armv7l-linux-musleabihf-cross/bin/:$PATH
    
  • 配置 target

    1
    2
    3
    4
    5
    
    rustup target add armv7-unknown-linux-musleabihf
    cat >> ~/.cargo/config <<-EOF
    [target.armv7-unknown-linux-musleabihf]
    linker = "armv7l-linux-musleabihf-ld"
    EOF
    
  • 编译

    1
    2
    3
    4
    5
    6
    
    # 操作系统如果是 armv7,则需指定该 cflag 来禁用 fpu
    export CFLAGS='-mfpu=neon'
    
    export CC=armv7l-linux-musleabihf-gcc
    cargo build --target armv7-unknown-linux-musleabihf --release
    armv7l-linux-musleabihf-strip target/armv7-unknown-linux-musleabihf/release/{目标二进制文件}
    

树梅派 Alpine aarch64

  • 下载交叉编译工具

    1
    2
    3
    
    curl -LO https://musl.cc/aarch64-linux-musl-cross.tgz
    tar zxf aarch64-linux-musl-cross.tgz -C /opt/
    export PATH=/opt/aarch64-linux-musl-cross/bin/:$PATH
    
  • 配置 target

    1
    2
    3
    4
    5
    
    rustup target add aarch64-unknown-linux-musl
    cat >> ~/.cargo/config <<-EOF
    [target.aarch64-unknown-linux-musl]
    linker = "aarch64-linux-musl-ld"
    EOF
    
  • 编译

    1
    2
    3
    
    export CC=aarch64-linux-musl-gcc
    cargo build --target aarch64-unknown-linux-musl --release
    aarch64-linux-musl-strip target/aarch64-unknown-linux-musl/release/{目标二进制文件}