Bare-metal Rust on Zynq-7000
Go to file
Harry Ho 3807e2e149 README: update build instruction 2020-08-07 11:17:19 +08:00
.cargo update rust + smoltcp 2019-11-11 00:28:46 +01:00
experiments libcortex_a9/sync_channel: added drop_elements function. 2020-08-05 15:29:28 +08:00
libasync libasync: assert that callback consumes data in smoltcp recv 2020-07-19 16:14:29 +08:00
libboard_zynq reduce ethernet verbosity 2020-08-04 22:15:01 +08:00
libcortex_a9 libcortex_a9/sync_channel: added drop_elements function. 2020-08-05 15:29:28 +08:00
libregister finished register definitions 2020-05-01 15:38:07 +08:00
libsupport_zynq Changes usage of sev/wfe to spinlock functions. 2020-08-04 13:54:19 +08:00
openocd openocd: fix cora z7-10 PL_TAPID 2020-05-16 01:34:09 +02:00
.gitignore remove zc706.elf from gitignore 2020-01-16 02:13:11 +08:00
Cargo.lock linked_list_allocator: upgraded to 0.8.4 2020-08-03 14:48:17 +08:00
Cargo.toml Cargo.toml: flip LTO back on to fit OCM 2020-04-10 20:41:16 +02:00
README.md README: update build instruction 2020-08-07 11:17:19 +08:00
armv7-none-eabihf.json define custom target, use with cargo-xbuild 2019-08-06 22:03:04 +02:00
build.sh build.sh: fix missing package argument 2020-08-07 10:40:34 +08:00
channel-rust-nightly.toml Cargo.lock: fix 2020-04-25 02:03:57 +02:00
default.nix updated cargoSha256 2020-08-03 14:59:49 +08:00
qemu.gdb PoC: boot, uart output in qemu 2019-05-05 14:56:23 +02:00
remote_run.sh add remote run script 2020-06-04 19:57:52 +08:00
runner.sh PoC: boot, uart output in qemu 2019-05-05 14:56:23 +02:00
shell.nix Updated build instruction. 2020-08-05 17:08:24 +08:00
tmux.sh add support for cora z7 in tmux script 2020-01-24 07:51:29 +08:00

README.md

Build

nix-shell --command "cargo xbuild --release -p experiments"

Currently the ELF output is placed at target/armv7-none-eabihf/release/experiments

Debug

Using the Xilinx toolchain

Tested with the ZC706 board.

Run the Xilinx Microprocessor Debugger:

/opt/Xilinx/14.7/ISE_DS/EDK/bin/lin64/xmd

Connect to target (given it is connected and you have permissions):

connect arm hw

Leave xmd running.

Start the Xilinx version of the GNU debugger with your latest build:

/opt/Xilinx/14.7/ISE_DS/EDK/gnu/arm/lin/bin/arm-xilinx-linux-gnueabi-gdb zc706

Connect the debugger to xmd over TCP on localhost:

target remote :1234

Proceed using gdb with load, c

Using OpenOCD

Running on the ZC706

nix-shell --command "cargo xbuild --release -p experiments"
cd openocd
openocd -f zc706.cfg

Running on the Cora Z7-10

nix-shell --command "cd experiments && cargo xbuild --release --no-default-features --features=target_cora_z7_10"
cd openocd
openocd -f cora-z7-10.cfg

Loading a bitstream into volatile memory

openocd -f zc706.cfg -c "pld load 0 blinker_migen.bit; exit"

Development Process

Clone this repo onto your development/build machine and the raspberry pi that controls the Xilinx 7000 board

On the dev machine, the below script builds zc706 and secure copies it to the nixbuild.m-labs.hk server:

cd ~/zynq-rs
./build.sh $your_user_or_ssh_id

Alternatively, you may copy the zc706 build to the target pi (in your pi $HOME directory, for example) using:

cd ~/zynq-rs
scp -C target/armv7-none-eabihf/release/experiments your_user_or_ssh_id@pi_hostname:/home/your_user_or_ssh_id/zynq-rs/zc706.elf

On the pi, we need an information rich environment that includes a relatively reliable gdb experience (that includes ctrl-p and ctrl-n command history that persists across cgdb executions), run:

ssh pi4
cd zynq-rs
# For ZC706, run:
./tmux.sh 0
# For Cora Z7, run:
./tmux.sh

Time to run your code with:

zynq-connect
zynq-restart
c

or, for a more succinct experience, (identical to above)

dc
dr
c

After every build on your dev machine, simply run:

dr
c

Sometimes you might need to type load after dr.