Rust_for_ARM
Ngày | Mô tả |
---|---|
10/10/2024 | Khởi tạo bài viết, ghi chú về Rust for ARM |
12/10/2024 | Ghi chú thêm một số tài liệu về OpenWRT |
-
Hiện tại đã dùng Rust để code Bất đồng bộ.
-
Với framework tokio thì mình đã có một project nhỏ (tên là Tracking_Report), mục tiêu là build app để lấy thông tin trên NATS Server và gửi data lên ThingsBoard.
-
Theo suy nghĩ đơn giản thì mình chỉ cần build code để chạy trên kiến trúc ARM là được. Nhưng khi dùng Cross Compilation để build thì lại lỗi tè le.
-
Chưa rõ lý do. Tạm thời sẽ documents lại những gì làm đc và những tài liệu liên quan.
Document lại Rust Cross Compilation cho ARM
- Mình có tìm được một project về Cross Compilation, tên là rust cross compilation
- Mình đã làm theo và test thử cho raspberry thì chạy được, nhưng khi áp dụng vào Tracking_Report thì build vẫn lỗi.
Kiểm tra thông tin của Raspberry CM4
- Kiểm tra phần cứng:
cat /sys/firmware/devicetree/base/model
- Kiểm tra kiến trúc:
lscpu
- Vậy phần cứng Raspberry CM4, thông tin:
Model name: Cortex-A72
Architecture: armv7l
- Theo tài liệu trên github rust_cross_compilation thì:
# For my armv7l embedded computer
$ rustup target add armv7-unknown-linux-gnueabi
# For my Raspberry Pi Zero W
$ rustup target add arm-unknown-linux-gnueabihf
- Dựa trên platform support có thông tin:
target | std | Note |
---|---|---|
armv7-unknown-linux-gnueabi | ✓ | Armv7-A Linux (kernel 4.15, glibc 2.27) |
Setup trên máy Ubuntu
- Đầu tiên là cài rust cho linux (ở đây là máy Ubuntu).
- Sau đó mình cần cài đặt một số công cụ:
rustup target add armv7-unknown-linux-gnueabi
sudo apt install gcc-arm-linux-gnueabi
- Download project:
git clone https://github.com/LOCNNIL/rust_cross_compilation.git
cd rust_cross_compilation/
cargo build --target armv7-unknown-linux-gnueabi
- Lưu ý về file
.cargo/config.toml
:
# target config for Embedded Computer with armv7l arch
[target.armv7-unknown-linux-gnueabi]
linker = "arm-linux-gnueabi-gcc"
rustflags = ["-C", "target-feature=+crt-static"]
- Sau đó copy file sang Pi:
sudo scp target/armv7-unknown-linux-gnueabi/debug/cross-arm pi@192.168.10.100:
Run on Pi
- Quay lại Pi, và chạy lệnh:
./cross-arm
- Đã chạy đc thành công.
Tổng hợp một số tài liệu khác:
https://www.acmesystems.it/arm9_toolchain
https://harmonicss.co.uk/rust/rust-on-a-raspberry-pi-part-1/
- Đây là một tutorial làm quen với việc viết OS cho Raspberry, tên project: rust-raspberrypi-OS-tutorials
Ghi chú khác về armv7-unknown-linux-uclibceabi
This target supports Armv7-A softfloat CPUs and uses the uclibc-ng standard library. This is a common configuration on many consumer routers (e.g., Netgear R7000, Asus RT-AC68U).
- Tức là khi code rust và build file với target là
armv7-unknown-linux-uclibceabi
thì có thể sẽ chạy được trên OpneWRT.
Cập nhật 12/10/2024
Ghi chú tổng hợp một số tài liệu về OpenWRT cho Rust
- Building Rust code for my OpenWrt Wi-Fi router
- Đây là một ghi chú khác về cross compiling Rust programs
October 10, 2024 ∙