diff --git a/01_bareminimum/.cargo/config b/.01_bareminimum/.cargo/config similarity index 100% rename from 01_bareminimum/.cargo/config rename to .01_bareminimum/.cargo/config diff --git a/01_bareminimum/Cargo.lock b/.01_bareminimum/Cargo.lock similarity index 100% rename from 01_bareminimum/Cargo.lock rename to .01_bareminimum/Cargo.lock diff --git a/01_bareminimum/Cargo.toml b/.01_bareminimum/Cargo.toml similarity index 100% rename from 01_bareminimum/Cargo.toml rename to .01_bareminimum/Cargo.toml diff --git a/01_bareminimum/Makefile b/.01_bareminimum/Makefile similarity index 100% rename from 01_bareminimum/Makefile rename to .01_bareminimum/Makefile diff --git a/01_bareminimum/README.md b/.01_bareminimum/README.md similarity index 100% rename from 01_bareminimum/README.md rename to .01_bareminimum/README.md diff --git a/01_bareminimum/kernel8 b/.01_bareminimum/kernel8 similarity index 100% rename from 01_bareminimum/kernel8 rename to .01_bareminimum/kernel8 diff --git a/01_bareminimum/kernel8.img b/.01_bareminimum/kernel8.img similarity index 100% rename from 01_bareminimum/kernel8.img rename to .01_bareminimum/kernel8.img diff --git a/01_bareminimum/link.ld b/.01_bareminimum/link.ld similarity index 100% rename from 01_bareminimum/link.ld rename to .01_bareminimum/link.ld diff --git a/01_bareminimum/src/boot_cores.S b/.01_bareminimum/src/boot_cores.S similarity index 100% rename from 01_bareminimum/src/boot_cores.S rename to .01_bareminimum/src/boot_cores.S diff --git a/01_bareminimum/src/main.rs b/.01_bareminimum/src/main.rs similarity index 100% rename from 01_bareminimum/src/main.rs rename to .01_bareminimum/src/main.rs diff --git a/02_multicore_rust/.cargo/config b/.02_multicore_rust/.cargo/config similarity index 100% rename from 02_multicore_rust/.cargo/config rename to .02_multicore_rust/.cargo/config diff --git a/02_multicore_rust/Cargo.lock b/.02_multicore_rust/Cargo.lock similarity index 100% rename from 02_multicore_rust/Cargo.lock rename to .02_multicore_rust/Cargo.lock diff --git a/02_multicore_rust/Cargo.toml b/.02_multicore_rust/Cargo.toml similarity index 100% rename from 02_multicore_rust/Cargo.toml rename to .02_multicore_rust/Cargo.toml diff --git a/02_multicore_rust/Makefile b/.02_multicore_rust/Makefile similarity index 100% rename from 02_multicore_rust/Makefile rename to .02_multicore_rust/Makefile diff --git a/02_multicore_rust/README.md b/.02_multicore_rust/README.md similarity index 100% rename from 02_multicore_rust/README.md rename to .02_multicore_rust/README.md diff --git a/02_multicore_rust/kernel8 b/.02_multicore_rust/kernel8 similarity index 100% rename from 02_multicore_rust/kernel8 rename to .02_multicore_rust/kernel8 diff --git a/02_multicore_rust/kernel8.img b/.02_multicore_rust/kernel8.img similarity index 100% rename from 02_multicore_rust/kernel8.img rename to .02_multicore_rust/kernel8.img diff --git a/02_multicore_rust/link.ld b/.02_multicore_rust/link.ld similarity index 100% rename from 02_multicore_rust/link.ld rename to .02_multicore_rust/link.ld diff --git a/02_multicore_rust/raspi3_boot/Cargo.toml b/.02_multicore_rust/raspi3_boot/Cargo.toml similarity index 100% rename from 02_multicore_rust/raspi3_boot/Cargo.toml rename to .02_multicore_rust/raspi3_boot/Cargo.toml diff --git a/02_multicore_rust/raspi3_boot/src/boot_cores.S b/.02_multicore_rust/raspi3_boot/src/boot_cores.S similarity index 100% rename from 02_multicore_rust/raspi3_boot/src/boot_cores.S rename to .02_multicore_rust/raspi3_boot/src/boot_cores.S diff --git a/02_multicore_rust/raspi3_boot/src/lib.rs b/.02_multicore_rust/raspi3_boot/src/lib.rs similarity index 100% rename from 02_multicore_rust/raspi3_boot/src/lib.rs rename to .02_multicore_rust/raspi3_boot/src/lib.rs diff --git a/02_multicore_rust/src/main.rs b/.02_multicore_rust/src/main.rs similarity index 100% rename from 02_multicore_rust/src/main.rs rename to .02_multicore_rust/src/main.rs diff --git a/03_uart1/.cargo/config b/.03_uart1/.cargo/config similarity index 100% rename from 03_uart1/.cargo/config rename to .03_uart1/.cargo/config diff --git a/03_uart1/Cargo.lock b/.03_uart1/Cargo.lock similarity index 100% rename from 03_uart1/Cargo.lock rename to .03_uart1/Cargo.lock diff --git a/03_uart1/Cargo.toml b/.03_uart1/Cargo.toml similarity index 100% rename from 03_uart1/Cargo.toml rename to .03_uart1/Cargo.toml diff --git a/03_uart1/Makefile b/.03_uart1/Makefile similarity index 100% rename from 03_uart1/Makefile rename to .03_uart1/Makefile diff --git a/03_uart1/README.md b/.03_uart1/README.md similarity index 100% rename from 03_uart1/README.md rename to .03_uart1/README.md diff --git a/03_uart1/kernel8 b/.03_uart1/kernel8 similarity index 100% rename from 03_uart1/kernel8 rename to .03_uart1/kernel8 diff --git a/03_uart1/kernel8.img b/.03_uart1/kernel8.img similarity index 100% rename from 03_uart1/kernel8.img rename to .03_uart1/kernel8.img diff --git a/03_uart1/link.ld b/.03_uart1/link.ld similarity index 100% rename from 03_uart1/link.ld rename to .03_uart1/link.ld diff --git a/03_uart1/raspi3_boot/Cargo.toml b/.03_uart1/raspi3_boot/Cargo.toml similarity index 100% rename from 03_uart1/raspi3_boot/Cargo.toml rename to .03_uart1/raspi3_boot/Cargo.toml diff --git a/03_uart1/raspi3_boot/src/boot_cores.S b/.03_uart1/raspi3_boot/src/boot_cores.S similarity index 100% rename from 03_uart1/raspi3_boot/src/boot_cores.S rename to .03_uart1/raspi3_boot/src/boot_cores.S diff --git a/03_uart1/raspi3_boot/src/lib.rs b/.03_uart1/raspi3_boot/src/lib.rs similarity index 100% rename from 03_uart1/raspi3_boot/src/lib.rs rename to .03_uart1/raspi3_boot/src/lib.rs diff --git a/03_uart1/src/gpio.rs b/.03_uart1/src/gpio.rs similarity index 100% rename from 03_uart1/src/gpio.rs rename to .03_uart1/src/gpio.rs diff --git a/03_uart1/src/main.rs b/.03_uart1/src/main.rs similarity index 100% rename from 03_uart1/src/main.rs rename to .03_uart1/src/main.rs diff --git a/03_uart1/src/uart.rs b/.03_uart1/src/uart.rs similarity index 100% rename from 03_uart1/src/uart.rs rename to .03_uart1/src/uart.rs diff --git a/04_mailboxes/.cargo/config b/.04_mailboxes/.cargo/config similarity index 100% rename from 04_mailboxes/.cargo/config rename to .04_mailboxes/.cargo/config diff --git a/04_mailboxes/Cargo.lock b/.04_mailboxes/Cargo.lock similarity index 100% rename from 04_mailboxes/Cargo.lock rename to .04_mailboxes/Cargo.lock diff --git a/04_mailboxes/Cargo.toml b/.04_mailboxes/Cargo.toml similarity index 100% rename from 04_mailboxes/Cargo.toml rename to .04_mailboxes/Cargo.toml diff --git a/04_mailboxes/Makefile b/.04_mailboxes/Makefile similarity index 100% rename from 04_mailboxes/Makefile rename to .04_mailboxes/Makefile diff --git a/04_mailboxes/README.md b/.04_mailboxes/README.md similarity index 100% rename from 04_mailboxes/README.md rename to .04_mailboxes/README.md diff --git a/04_mailboxes/kernel8 b/.04_mailboxes/kernel8 similarity index 100% rename from 04_mailboxes/kernel8 rename to .04_mailboxes/kernel8 diff --git a/04_mailboxes/kernel8.img b/.04_mailboxes/kernel8.img similarity index 100% rename from 04_mailboxes/kernel8.img rename to .04_mailboxes/kernel8.img diff --git a/04_mailboxes/link.ld b/.04_mailboxes/link.ld similarity index 100% rename from 04_mailboxes/link.ld rename to .04_mailboxes/link.ld diff --git a/04_mailboxes/raspi3_boot/Cargo.toml b/.04_mailboxes/raspi3_boot/Cargo.toml similarity index 100% rename from 04_mailboxes/raspi3_boot/Cargo.toml rename to .04_mailboxes/raspi3_boot/Cargo.toml diff --git a/04_mailboxes/raspi3_boot/src/boot_cores.S b/.04_mailboxes/raspi3_boot/src/boot_cores.S similarity index 100% rename from 04_mailboxes/raspi3_boot/src/boot_cores.S rename to .04_mailboxes/raspi3_boot/src/boot_cores.S diff --git a/04_mailboxes/raspi3_boot/src/lib.rs b/.04_mailboxes/raspi3_boot/src/lib.rs similarity index 100% rename from 04_mailboxes/raspi3_boot/src/lib.rs rename to .04_mailboxes/raspi3_boot/src/lib.rs diff --git a/04_mailboxes/src/gpio.rs b/.04_mailboxes/src/gpio.rs similarity index 100% rename from 04_mailboxes/src/gpio.rs rename to .04_mailboxes/src/gpio.rs diff --git a/04_mailboxes/src/main.rs b/.04_mailboxes/src/main.rs similarity index 100% rename from 04_mailboxes/src/main.rs rename to .04_mailboxes/src/main.rs diff --git a/04_mailboxes/src/mbox.rs b/.04_mailboxes/src/mbox.rs similarity index 100% rename from 04_mailboxes/src/mbox.rs rename to .04_mailboxes/src/mbox.rs diff --git a/04_mailboxes/src/uart.rs b/.04_mailboxes/src/uart.rs similarity index 100% rename from 04_mailboxes/src/uart.rs rename to .04_mailboxes/src/uart.rs diff --git a/05_uart0/.cargo/config b/.05_uart0/.cargo/config similarity index 100% rename from 05_uart0/.cargo/config rename to .05_uart0/.cargo/config diff --git a/05_uart0/Cargo.lock b/.05_uart0/Cargo.lock similarity index 100% rename from 05_uart0/Cargo.lock rename to .05_uart0/Cargo.lock diff --git a/05_uart0/Cargo.toml b/.05_uart0/Cargo.toml similarity index 100% rename from 05_uart0/Cargo.toml rename to .05_uart0/Cargo.toml diff --git a/05_uart0/Makefile b/.05_uart0/Makefile similarity index 100% rename from 05_uart0/Makefile rename to .05_uart0/Makefile diff --git a/05_uart0/README.md b/.05_uart0/README.md similarity index 100% rename from 05_uart0/README.md rename to .05_uart0/README.md diff --git a/05_uart0/kernel8 b/.05_uart0/kernel8 similarity index 100% rename from 05_uart0/kernel8 rename to .05_uart0/kernel8 diff --git a/05_uart0/kernel8.img b/.05_uart0/kernel8.img similarity index 100% rename from 05_uart0/kernel8.img rename to .05_uart0/kernel8.img diff --git a/05_uart0/link.ld b/.05_uart0/link.ld similarity index 100% rename from 05_uart0/link.ld rename to .05_uart0/link.ld diff --git a/05_uart0/raspi3_boot/Cargo.toml b/.05_uart0/raspi3_boot/Cargo.toml similarity index 100% rename from 05_uart0/raspi3_boot/Cargo.toml rename to .05_uart0/raspi3_boot/Cargo.toml diff --git a/05_uart0/raspi3_boot/src/boot_cores.S b/.05_uart0/raspi3_boot/src/boot_cores.S similarity index 100% rename from 05_uart0/raspi3_boot/src/boot_cores.S rename to .05_uart0/raspi3_boot/src/boot_cores.S diff --git a/05_uart0/raspi3_boot/src/lib.rs b/.05_uart0/raspi3_boot/src/lib.rs similarity index 100% rename from 05_uart0/raspi3_boot/src/lib.rs rename to .05_uart0/raspi3_boot/src/lib.rs diff --git a/05_uart0/src/gpio.rs b/.05_uart0/src/gpio.rs similarity index 100% rename from 05_uart0/src/gpio.rs rename to .05_uart0/src/gpio.rs diff --git a/05_uart0/src/main.rs b/.05_uart0/src/main.rs similarity index 100% rename from 05_uart0/src/main.rs rename to .05_uart0/src/main.rs diff --git a/05_uart0/src/mbox.rs b/.05_uart0/src/mbox.rs similarity index 100% rename from 05_uart0/src/mbox.rs rename to .05_uart0/src/mbox.rs diff --git a/05_uart0/src/uart.rs b/.05_uart0/src/uart.rs similarity index 100% rename from 05_uart0/src/uart.rs rename to .05_uart0/src/uart.rs diff --git a/06_raspbootin64/.cargo/config b/.06_raspbootin64/.cargo/config similarity index 100% rename from 06_raspbootin64/.cargo/config rename to .06_raspbootin64/.cargo/config diff --git a/06_raspbootin64/Cargo.lock b/.06_raspbootin64/Cargo.lock similarity index 100% rename from 06_raspbootin64/Cargo.lock rename to .06_raspbootin64/Cargo.lock diff --git a/06_raspbootin64/Cargo.toml b/.06_raspbootin64/Cargo.toml similarity index 100% rename from 06_raspbootin64/Cargo.toml rename to .06_raspbootin64/Cargo.toml diff --git a/06_raspbootin64/Makefile b/.06_raspbootin64/Makefile similarity index 100% rename from 06_raspbootin64/Makefile rename to .06_raspbootin64/Makefile diff --git a/06_raspbootin64/README.md b/.06_raspbootin64/README.md similarity index 100% rename from 06_raspbootin64/README.md rename to .06_raspbootin64/README.md diff --git a/06_raspbootin64/kernel8 b/.06_raspbootin64/kernel8 similarity index 100% rename from 06_raspbootin64/kernel8 rename to .06_raspbootin64/kernel8 diff --git a/06_raspbootin64/kernel8.img b/.06_raspbootin64/kernel8.img similarity index 100% rename from 06_raspbootin64/kernel8.img rename to .06_raspbootin64/kernel8.img diff --git a/06_raspbootin64/link.ld b/.06_raspbootin64/link.ld similarity index 100% rename from 06_raspbootin64/link.ld rename to .06_raspbootin64/link.ld diff --git a/06_raspbootin64/raspi3_boot/Cargo.toml b/.06_raspbootin64/raspi3_boot/Cargo.toml similarity index 100% rename from 06_raspbootin64/raspi3_boot/Cargo.toml rename to .06_raspbootin64/raspi3_boot/Cargo.toml diff --git a/06_raspbootin64/raspi3_boot/src/boot_cores.S b/.06_raspbootin64/raspi3_boot/src/boot_cores.S similarity index 100% rename from 06_raspbootin64/raspi3_boot/src/boot_cores.S rename to .06_raspbootin64/raspi3_boot/src/boot_cores.S diff --git a/06_raspbootin64/raspi3_boot/src/lib.rs b/.06_raspbootin64/raspi3_boot/src/lib.rs similarity index 100% rename from 06_raspbootin64/raspi3_boot/src/lib.rs rename to .06_raspbootin64/raspi3_boot/src/lib.rs diff --git a/06_raspbootin64/src/gpio.rs b/.06_raspbootin64/src/gpio.rs similarity index 100% rename from 06_raspbootin64/src/gpio.rs rename to .06_raspbootin64/src/gpio.rs diff --git a/06_raspbootin64/src/main.rs b/.06_raspbootin64/src/main.rs similarity index 100% rename from 06_raspbootin64/src/main.rs rename to .06_raspbootin64/src/main.rs diff --git a/06_raspbootin64/src/mbox.rs b/.06_raspbootin64/src/mbox.rs similarity index 100% rename from 06_raspbootin64/src/mbox.rs rename to .06_raspbootin64/src/mbox.rs diff --git a/06_raspbootin64/src/uart.rs b/.06_raspbootin64/src/uart.rs similarity index 100% rename from 06_raspbootin64/src/uart.rs rename to .06_raspbootin64/src/uart.rs diff --git a/07_abstraction/.cargo/config b/.07_abstraction/.cargo/config similarity index 100% rename from 07_abstraction/.cargo/config rename to .07_abstraction/.cargo/config diff --git a/07_abstraction/Cargo.lock b/.07_abstraction/Cargo.lock similarity index 100% rename from 07_abstraction/Cargo.lock rename to .07_abstraction/Cargo.lock diff --git a/07_abstraction/Cargo.toml b/.07_abstraction/Cargo.toml similarity index 100% rename from 07_abstraction/Cargo.toml rename to .07_abstraction/Cargo.toml diff --git a/07_abstraction/Makefile b/.07_abstraction/Makefile similarity index 100% rename from 07_abstraction/Makefile rename to .07_abstraction/Makefile diff --git a/07_abstraction/README.md b/.07_abstraction/README.md similarity index 100% rename from 07_abstraction/README.md rename to .07_abstraction/README.md diff --git a/07_abstraction/kernel8 b/.07_abstraction/kernel8 similarity index 100% rename from 07_abstraction/kernel8 rename to .07_abstraction/kernel8 diff --git a/07_abstraction/kernel8.img b/.07_abstraction/kernel8.img similarity index 100% rename from 07_abstraction/kernel8.img rename to .07_abstraction/kernel8.img diff --git a/07_abstraction/link.ld b/.07_abstraction/link.ld similarity index 100% rename from 07_abstraction/link.ld rename to .07_abstraction/link.ld diff --git a/07_abstraction/raspi3_boot/Cargo.toml b/.07_abstraction/raspi3_boot/Cargo.toml similarity index 100% rename from 07_abstraction/raspi3_boot/Cargo.toml rename to .07_abstraction/raspi3_boot/Cargo.toml diff --git a/07_abstraction/raspi3_boot/src/lib.rs b/.07_abstraction/raspi3_boot/src/lib.rs similarity index 100% rename from 07_abstraction/raspi3_boot/src/lib.rs rename to .07_abstraction/raspi3_boot/src/lib.rs diff --git a/07_abstraction/src/gpio.rs b/.07_abstraction/src/gpio.rs similarity index 100% rename from 07_abstraction/src/gpio.rs rename to .07_abstraction/src/gpio.rs diff --git a/07_abstraction/src/main.rs b/.07_abstraction/src/main.rs similarity index 100% rename from 07_abstraction/src/main.rs rename to .07_abstraction/src/main.rs diff --git a/07_abstraction/src/mbox.rs b/.07_abstraction/src/mbox.rs similarity index 100% rename from 07_abstraction/src/mbox.rs rename to .07_abstraction/src/mbox.rs diff --git a/07_abstraction/src/uart.rs b/.07_abstraction/src/uart.rs similarity index 100% rename from 07_abstraction/src/uart.rs rename to .07_abstraction/src/uart.rs diff --git a/08_random/.cargo/config b/.08_random/.cargo/config similarity index 100% rename from 08_random/.cargo/config rename to .08_random/.cargo/config diff --git a/08_random/Cargo.lock b/.08_random/Cargo.lock similarity index 100% rename from 08_random/Cargo.lock rename to .08_random/Cargo.lock diff --git a/08_random/Cargo.toml b/.08_random/Cargo.toml similarity index 100% rename from 08_random/Cargo.toml rename to .08_random/Cargo.toml diff --git a/08_random/Makefile b/.08_random/Makefile similarity index 100% rename from 08_random/Makefile rename to .08_random/Makefile diff --git a/08_random/README.md b/.08_random/README.md similarity index 100% rename from 08_random/README.md rename to .08_random/README.md diff --git a/08_random/kernel8 b/.08_random/kernel8 similarity index 100% rename from 08_random/kernel8 rename to .08_random/kernel8 diff --git a/08_random/kernel8.img b/.08_random/kernel8.img similarity index 100% rename from 08_random/kernel8.img rename to .08_random/kernel8.img diff --git a/08_random/link.ld b/.08_random/link.ld similarity index 100% rename from 08_random/link.ld rename to .08_random/link.ld diff --git a/08_random/raspi3_boot/Cargo.toml b/.08_random/raspi3_boot/Cargo.toml similarity index 100% rename from 08_random/raspi3_boot/Cargo.toml rename to .08_random/raspi3_boot/Cargo.toml diff --git a/08_random/raspi3_boot/src/lib.rs b/.08_random/raspi3_boot/src/lib.rs similarity index 100% rename from 08_random/raspi3_boot/src/lib.rs rename to .08_random/raspi3_boot/src/lib.rs diff --git a/08_random/src/gpio.rs b/.08_random/src/gpio.rs similarity index 100% rename from 08_random/src/gpio.rs rename to .08_random/src/gpio.rs diff --git a/08_random/src/main.rs b/.08_random/src/main.rs similarity index 100% rename from 08_random/src/main.rs rename to .08_random/src/main.rs diff --git a/08_random/src/mbox.rs b/.08_random/src/mbox.rs similarity index 100% rename from 08_random/src/mbox.rs rename to .08_random/src/mbox.rs diff --git a/08_random/src/rand.rs b/.08_random/src/rand.rs similarity index 100% rename from 08_random/src/rand.rs rename to .08_random/src/rand.rs diff --git a/08_random/src/uart.rs b/.08_random/src/uart.rs similarity index 100% rename from 08_random/src/uart.rs rename to .08_random/src/uart.rs diff --git a/09_delays/.cargo/config b/.09_delays/.cargo/config similarity index 100% rename from 09_delays/.cargo/config rename to .09_delays/.cargo/config diff --git a/09_delays/Cargo.lock b/.09_delays/Cargo.lock similarity index 100% rename from 09_delays/Cargo.lock rename to .09_delays/Cargo.lock diff --git a/09_delays/Cargo.toml b/.09_delays/Cargo.toml similarity index 100% rename from 09_delays/Cargo.toml rename to .09_delays/Cargo.toml diff --git a/09_delays/Makefile b/.09_delays/Makefile similarity index 100% rename from 09_delays/Makefile rename to .09_delays/Makefile diff --git a/09_delays/README.md b/.09_delays/README.md similarity index 100% rename from 09_delays/README.md rename to .09_delays/README.md diff --git a/09_delays/kernel8 b/.09_delays/kernel8 similarity index 100% rename from 09_delays/kernel8 rename to .09_delays/kernel8 diff --git a/09_delays/kernel8.img b/.09_delays/kernel8.img similarity index 100% rename from 09_delays/kernel8.img rename to .09_delays/kernel8.img diff --git a/09_delays/link.ld b/.09_delays/link.ld similarity index 100% rename from 09_delays/link.ld rename to .09_delays/link.ld diff --git a/09_delays/raspi3_boot/Cargo.toml b/.09_delays/raspi3_boot/Cargo.toml similarity index 100% rename from 09_delays/raspi3_boot/Cargo.toml rename to .09_delays/raspi3_boot/Cargo.toml diff --git a/09_delays/raspi3_boot/src/lib.rs b/.09_delays/raspi3_boot/src/lib.rs similarity index 100% rename from 09_delays/raspi3_boot/src/lib.rs rename to .09_delays/raspi3_boot/src/lib.rs diff --git a/09_delays/src/delays.rs b/.09_delays/src/delays.rs similarity index 100% rename from 09_delays/src/delays.rs rename to .09_delays/src/delays.rs diff --git a/09_delays/src/gpio.rs b/.09_delays/src/gpio.rs similarity index 100% rename from 09_delays/src/gpio.rs rename to .09_delays/src/gpio.rs diff --git a/09_delays/src/main.rs b/.09_delays/src/main.rs similarity index 100% rename from 09_delays/src/main.rs rename to .09_delays/src/main.rs diff --git a/09_delays/src/mbox.rs b/.09_delays/src/mbox.rs similarity index 100% rename from 09_delays/src/mbox.rs rename to .09_delays/src/mbox.rs diff --git a/09_delays/src/uart.rs b/.09_delays/src/uart.rs similarity index 100% rename from 09_delays/src/uart.rs rename to .09_delays/src/uart.rs diff --git a/0A_power/.cargo/config b/.0A_power/.cargo/config similarity index 100% rename from 0A_power/.cargo/config rename to .0A_power/.cargo/config diff --git a/0A_power/Cargo.lock b/.0A_power/Cargo.lock similarity index 100% rename from 0A_power/Cargo.lock rename to .0A_power/Cargo.lock diff --git a/0A_power/Cargo.toml b/.0A_power/Cargo.toml similarity index 100% rename from 0A_power/Cargo.toml rename to .0A_power/Cargo.toml diff --git a/0A_power/Makefile b/.0A_power/Makefile similarity index 100% rename from 0A_power/Makefile rename to .0A_power/Makefile diff --git a/0A_power/README.md b/.0A_power/README.md similarity index 100% rename from 0A_power/README.md rename to .0A_power/README.md diff --git a/0A_power/kernel8 b/.0A_power/kernel8 similarity index 100% rename from 0A_power/kernel8 rename to .0A_power/kernel8 diff --git a/0A_power/kernel8.img b/.0A_power/kernel8.img similarity index 100% rename from 0A_power/kernel8.img rename to .0A_power/kernel8.img diff --git a/0A_power/link.ld b/.0A_power/link.ld similarity index 100% rename from 0A_power/link.ld rename to .0A_power/link.ld diff --git a/0A_power/raspi3_boot/Cargo.toml b/.0A_power/raspi3_boot/Cargo.toml similarity index 100% rename from 0A_power/raspi3_boot/Cargo.toml rename to .0A_power/raspi3_boot/Cargo.toml diff --git a/0A_power/raspi3_boot/src/lib.rs b/.0A_power/raspi3_boot/src/lib.rs similarity index 100% rename from 0A_power/raspi3_boot/src/lib.rs rename to .0A_power/raspi3_boot/src/lib.rs diff --git a/0A_power/src/delays.rs b/.0A_power/src/delays.rs similarity index 100% rename from 0A_power/src/delays.rs rename to .0A_power/src/delays.rs diff --git a/0A_power/src/gpio.rs b/.0A_power/src/gpio.rs similarity index 100% rename from 0A_power/src/gpio.rs rename to .0A_power/src/gpio.rs diff --git a/0A_power/src/main.rs b/.0A_power/src/main.rs similarity index 100% rename from 0A_power/src/main.rs rename to .0A_power/src/main.rs diff --git a/0A_power/src/mbox.rs b/.0A_power/src/mbox.rs similarity index 100% rename from 0A_power/src/mbox.rs rename to .0A_power/src/mbox.rs diff --git a/0A_power/src/power.rs b/.0A_power/src/power.rs similarity index 100% rename from 0A_power/src/power.rs rename to .0A_power/src/power.rs diff --git a/0A_power/src/uart.rs b/.0A_power/src/uart.rs similarity index 100% rename from 0A_power/src/uart.rs rename to .0A_power/src/uart.rs diff --git a/0B_hw_debug_JTAG/.cargo/config b/.0B_hw_debug_JTAG/.cargo/config similarity index 100% rename from 0B_hw_debug_JTAG/.cargo/config rename to .0B_hw_debug_JTAG/.cargo/config diff --git a/0B_hw_debug_JTAG/Cargo.lock b/.0B_hw_debug_JTAG/Cargo.lock similarity index 100% rename from 0B_hw_debug_JTAG/Cargo.lock rename to .0B_hw_debug_JTAG/Cargo.lock diff --git a/0B_hw_debug_JTAG/Cargo.toml b/.0B_hw_debug_JTAG/Cargo.toml similarity index 100% rename from 0B_hw_debug_JTAG/Cargo.toml rename to .0B_hw_debug_JTAG/Cargo.toml diff --git a/0B_hw_debug_JTAG/Makefile b/.0B_hw_debug_JTAG/Makefile similarity index 100% rename from 0B_hw_debug_JTAG/Makefile rename to .0B_hw_debug_JTAG/Makefile diff --git a/0B_hw_debug_JTAG/README.md b/.0B_hw_debug_JTAG/README.md similarity index 100% rename from 0B_hw_debug_JTAG/README.md rename to .0B_hw_debug_JTAG/README.md diff --git a/0B_hw_debug_JTAG/kernel8 b/.0B_hw_debug_JTAG/kernel8 similarity index 100% rename from 0B_hw_debug_JTAG/kernel8 rename to .0B_hw_debug_JTAG/kernel8 diff --git a/0B_hw_debug_JTAG/kernel8.img b/.0B_hw_debug_JTAG/kernel8.img similarity index 100% rename from 0B_hw_debug_JTAG/kernel8.img rename to .0B_hw_debug_JTAG/kernel8.img diff --git a/0B_hw_debug_JTAG/link.ld b/.0B_hw_debug_JTAG/link.ld similarity index 100% rename from 0B_hw_debug_JTAG/link.ld rename to .0B_hw_debug_JTAG/link.ld diff --git a/0B_hw_debug_JTAG/raspi3_boot/Cargo.toml b/.0B_hw_debug_JTAG/raspi3_boot/Cargo.toml similarity index 100% rename from 0B_hw_debug_JTAG/raspi3_boot/Cargo.toml rename to .0B_hw_debug_JTAG/raspi3_boot/Cargo.toml diff --git a/0B_hw_debug_JTAG/raspi3_boot/src/lib.rs b/.0B_hw_debug_JTAG/raspi3_boot/src/lib.rs similarity index 100% rename from 0B_hw_debug_JTAG/raspi3_boot/src/lib.rs rename to .0B_hw_debug_JTAG/raspi3_boot/src/lib.rs diff --git a/0B_hw_debug_JTAG/src/delays.rs b/.0B_hw_debug_JTAG/src/delays.rs similarity index 100% rename from 0B_hw_debug_JTAG/src/delays.rs rename to .0B_hw_debug_JTAG/src/delays.rs diff --git a/0B_hw_debug_JTAG/src/gpio.rs b/.0B_hw_debug_JTAG/src/gpio.rs similarity index 100% rename from 0B_hw_debug_JTAG/src/gpio.rs rename to .0B_hw_debug_JTAG/src/gpio.rs diff --git a/0B_hw_debug_JTAG/src/main.rs b/.0B_hw_debug_JTAG/src/main.rs similarity index 100% rename from 0B_hw_debug_JTAG/src/main.rs rename to .0B_hw_debug_JTAG/src/main.rs diff --git a/0B_hw_debug_JTAG/src/mbox.rs b/.0B_hw_debug_JTAG/src/mbox.rs similarity index 100% rename from 0B_hw_debug_JTAG/src/mbox.rs rename to .0B_hw_debug_JTAG/src/mbox.rs diff --git a/0B_hw_debug_JTAG/src/power.rs b/.0B_hw_debug_JTAG/src/power.rs similarity index 100% rename from 0B_hw_debug_JTAG/src/power.rs rename to .0B_hw_debug_JTAG/src/power.rs diff --git a/0B_hw_debug_JTAG/src/uart.rs b/.0B_hw_debug_JTAG/src/uart.rs similarity index 100% rename from 0B_hw_debug_JTAG/src/uart.rs rename to .0B_hw_debug_JTAG/src/uart.rs diff --git a/0C_exception_levels/.cargo/config b/.0C_exception_levels/.cargo/config similarity index 100% rename from 0C_exception_levels/.cargo/config rename to .0C_exception_levels/.cargo/config diff --git a/0C_exception_levels/Cargo.lock b/.0C_exception_levels/Cargo.lock similarity index 100% rename from 0C_exception_levels/Cargo.lock rename to .0C_exception_levels/Cargo.lock diff --git a/0C_exception_levels/Cargo.toml b/.0C_exception_levels/Cargo.toml similarity index 100% rename from 0C_exception_levels/Cargo.toml rename to .0C_exception_levels/Cargo.toml diff --git a/0C_exception_levels/Makefile b/.0C_exception_levels/Makefile similarity index 100% rename from 0C_exception_levels/Makefile rename to .0C_exception_levels/Makefile diff --git a/0C_exception_levels/README.md b/.0C_exception_levels/README.md similarity index 100% rename from 0C_exception_levels/README.md rename to .0C_exception_levels/README.md diff --git a/0C_exception_levels/kernel8 b/.0C_exception_levels/kernel8 similarity index 100% rename from 0C_exception_levels/kernel8 rename to .0C_exception_levels/kernel8 diff --git a/0C_exception_levels/kernel8.img b/.0C_exception_levels/kernel8.img similarity index 100% rename from 0C_exception_levels/kernel8.img rename to .0C_exception_levels/kernel8.img diff --git a/0C_exception_levels/link.ld b/.0C_exception_levels/link.ld similarity index 100% rename from 0C_exception_levels/link.ld rename to .0C_exception_levels/link.ld diff --git a/0C_exception_levels/raspi3_boot/Cargo.toml b/.0C_exception_levels/raspi3_boot/Cargo.toml similarity index 100% rename from 0C_exception_levels/raspi3_boot/Cargo.toml rename to .0C_exception_levels/raspi3_boot/Cargo.toml diff --git a/0C_exception_levels/raspi3_boot/src/lib.rs b/.0C_exception_levels/raspi3_boot/src/lib.rs similarity index 100% rename from 0C_exception_levels/raspi3_boot/src/lib.rs rename to .0C_exception_levels/raspi3_boot/src/lib.rs diff --git a/0C_exception_levels/src/delays.rs b/.0C_exception_levels/src/delays.rs similarity index 100% rename from 0C_exception_levels/src/delays.rs rename to .0C_exception_levels/src/delays.rs diff --git a/0C_exception_levels/src/gpio.rs b/.0C_exception_levels/src/gpio.rs similarity index 100% rename from 0C_exception_levels/src/gpio.rs rename to .0C_exception_levels/src/gpio.rs diff --git a/0C_exception_levels/src/main.rs b/.0C_exception_levels/src/main.rs similarity index 100% rename from 0C_exception_levels/src/main.rs rename to .0C_exception_levels/src/main.rs diff --git a/0C_exception_levels/src/mbox.rs b/.0C_exception_levels/src/mbox.rs similarity index 100% rename from 0C_exception_levels/src/mbox.rs rename to .0C_exception_levels/src/mbox.rs diff --git a/0C_exception_levels/src/uart.rs b/.0C_exception_levels/src/uart.rs similarity index 100% rename from 0C_exception_levels/src/uart.rs rename to .0C_exception_levels/src/uart.rs diff --git a/0D_virtual_memory/.cargo/config b/.0D_virtual_memory/.cargo/config similarity index 100% rename from 0D_virtual_memory/.cargo/config rename to .0D_virtual_memory/.cargo/config diff --git a/0D_virtual_memory/Cargo.lock b/.0D_virtual_memory/Cargo.lock similarity index 100% rename from 0D_virtual_memory/Cargo.lock rename to .0D_virtual_memory/Cargo.lock diff --git a/0D_virtual_memory/Cargo.toml b/.0D_virtual_memory/Cargo.toml similarity index 100% rename from 0D_virtual_memory/Cargo.toml rename to .0D_virtual_memory/Cargo.toml diff --git a/0D_virtual_memory/Makefile b/.0D_virtual_memory/Makefile similarity index 100% rename from 0D_virtual_memory/Makefile rename to .0D_virtual_memory/Makefile diff --git a/0D_virtual_memory/README.md b/.0D_virtual_memory/README.md similarity index 100% rename from 0D_virtual_memory/README.md rename to .0D_virtual_memory/README.md diff --git a/0D_virtual_memory/kernel8 b/.0D_virtual_memory/kernel8 similarity index 100% rename from 0D_virtual_memory/kernel8 rename to .0D_virtual_memory/kernel8 diff --git a/0D_virtual_memory/kernel8.img b/.0D_virtual_memory/kernel8.img similarity index 100% rename from 0D_virtual_memory/kernel8.img rename to .0D_virtual_memory/kernel8.img diff --git a/0D_virtual_memory/link.ld b/.0D_virtual_memory/link.ld similarity index 100% rename from 0D_virtual_memory/link.ld rename to .0D_virtual_memory/link.ld diff --git a/0D_virtual_memory/raspi3_boot/Cargo.toml b/.0D_virtual_memory/raspi3_boot/Cargo.toml similarity index 100% rename from 0D_virtual_memory/raspi3_boot/Cargo.toml rename to .0D_virtual_memory/raspi3_boot/Cargo.toml diff --git a/0D_virtual_memory/raspi3_boot/src/lib.rs b/.0D_virtual_memory/raspi3_boot/src/lib.rs similarity index 100% rename from 0D_virtual_memory/raspi3_boot/src/lib.rs rename to .0D_virtual_memory/raspi3_boot/src/lib.rs diff --git a/0D_virtual_memory/src/delays.rs b/.0D_virtual_memory/src/delays.rs similarity index 100% rename from 0D_virtual_memory/src/delays.rs rename to .0D_virtual_memory/src/delays.rs diff --git a/0D_virtual_memory/src/gpio.rs b/.0D_virtual_memory/src/gpio.rs similarity index 100% rename from 0D_virtual_memory/src/gpio.rs rename to .0D_virtual_memory/src/gpio.rs diff --git a/0D_virtual_memory/src/main.rs b/.0D_virtual_memory/src/main.rs similarity index 100% rename from 0D_virtual_memory/src/main.rs rename to .0D_virtual_memory/src/main.rs diff --git a/0D_virtual_memory/src/mbox.rs b/.0D_virtual_memory/src/mbox.rs similarity index 100% rename from 0D_virtual_memory/src/mbox.rs rename to .0D_virtual_memory/src/mbox.rs diff --git a/0D_virtual_memory/src/memory.rs b/.0D_virtual_memory/src/memory.rs similarity index 100% rename from 0D_virtual_memory/src/memory.rs rename to .0D_virtual_memory/src/memory.rs diff --git a/0D_virtual_memory/src/memory/mmu.rs b/.0D_virtual_memory/src/memory/mmu.rs similarity index 100% rename from 0D_virtual_memory/src/memory/mmu.rs rename to .0D_virtual_memory/src/memory/mmu.rs diff --git a/0D_virtual_memory/src/uart.rs b/.0D_virtual_memory/src/uart.rs similarity index 100% rename from 0D_virtual_memory/src/uart.rs rename to .0D_virtual_memory/src/uart.rs diff --git a/0E_cache_performance/.cargo/config b/.0E_cache_performance/.cargo/config similarity index 100% rename from 0E_cache_performance/.cargo/config rename to .0E_cache_performance/.cargo/config diff --git a/0E_cache_performance/Cargo.lock b/.0E_cache_performance/Cargo.lock similarity index 100% rename from 0E_cache_performance/Cargo.lock rename to .0E_cache_performance/Cargo.lock diff --git a/0E_cache_performance/Cargo.toml b/.0E_cache_performance/Cargo.toml similarity index 100% rename from 0E_cache_performance/Cargo.toml rename to .0E_cache_performance/Cargo.toml diff --git a/0E_cache_performance/Makefile b/.0E_cache_performance/Makefile similarity index 100% rename from 0E_cache_performance/Makefile rename to .0E_cache_performance/Makefile diff --git a/0E_cache_performance/README.md b/.0E_cache_performance/README.md similarity index 100% rename from 0E_cache_performance/README.md rename to .0E_cache_performance/README.md diff --git a/0E_cache_performance/kernel8 b/.0E_cache_performance/kernel8 similarity index 100% rename from 0E_cache_performance/kernel8 rename to .0E_cache_performance/kernel8 diff --git a/0E_cache_performance/kernel8.img b/.0E_cache_performance/kernel8.img similarity index 100% rename from 0E_cache_performance/kernel8.img rename to .0E_cache_performance/kernel8.img diff --git a/0E_cache_performance/link.ld b/.0E_cache_performance/link.ld similarity index 100% rename from 0E_cache_performance/link.ld rename to .0E_cache_performance/link.ld diff --git a/0E_cache_performance/raspi3_boot/Cargo.toml b/.0E_cache_performance/raspi3_boot/Cargo.toml similarity index 100% rename from 0E_cache_performance/raspi3_boot/Cargo.toml rename to .0E_cache_performance/raspi3_boot/Cargo.toml diff --git a/0E_cache_performance/raspi3_boot/src/lib.rs b/.0E_cache_performance/raspi3_boot/src/lib.rs similarity index 100% rename from 0E_cache_performance/raspi3_boot/src/lib.rs rename to .0E_cache_performance/raspi3_boot/src/lib.rs diff --git a/0E_cache_performance/src/benchmark.rs b/.0E_cache_performance/src/benchmark.rs similarity index 100% rename from 0E_cache_performance/src/benchmark.rs rename to .0E_cache_performance/src/benchmark.rs diff --git a/0E_cache_performance/src/delays.rs b/.0E_cache_performance/src/delays.rs similarity index 100% rename from 0E_cache_performance/src/delays.rs rename to .0E_cache_performance/src/delays.rs diff --git a/0E_cache_performance/src/gpio.rs b/.0E_cache_performance/src/gpio.rs similarity index 100% rename from 0E_cache_performance/src/gpio.rs rename to .0E_cache_performance/src/gpio.rs diff --git a/0E_cache_performance/src/main.rs b/.0E_cache_performance/src/main.rs similarity index 100% rename from 0E_cache_performance/src/main.rs rename to .0E_cache_performance/src/main.rs diff --git a/0E_cache_performance/src/mbox.rs b/.0E_cache_performance/src/mbox.rs similarity index 100% rename from 0E_cache_performance/src/mbox.rs rename to .0E_cache_performance/src/mbox.rs diff --git a/0E_cache_performance/src/memory.rs b/.0E_cache_performance/src/memory.rs similarity index 100% rename from 0E_cache_performance/src/memory.rs rename to .0E_cache_performance/src/memory.rs diff --git a/0E_cache_performance/src/memory/mmu.rs b/.0E_cache_performance/src/memory/mmu.rs similarity index 100% rename from 0E_cache_performance/src/memory/mmu.rs rename to .0E_cache_performance/src/memory/mmu.rs diff --git a/0E_cache_performance/src/uart.rs b/.0E_cache_performance/src/uart.rs similarity index 100% rename from 0E_cache_performance/src/uart.rs rename to .0E_cache_performance/src/uart.rs diff --git a/0F_globals_synchronization_println/.cargo/config b/.0F_globals_synchronization_println/.cargo/config similarity index 100% rename from 0F_globals_synchronization_println/.cargo/config rename to .0F_globals_synchronization_println/.cargo/config diff --git a/0F_globals_synchronization_println/Cargo.lock b/.0F_globals_synchronization_println/Cargo.lock similarity index 100% rename from 0F_globals_synchronization_println/Cargo.lock rename to .0F_globals_synchronization_println/Cargo.lock diff --git a/0F_globals_synchronization_println/Cargo.toml b/.0F_globals_synchronization_println/Cargo.toml similarity index 100% rename from 0F_globals_synchronization_println/Cargo.toml rename to .0F_globals_synchronization_println/Cargo.toml diff --git a/0F_globals_synchronization_println/Makefile b/.0F_globals_synchronization_println/Makefile similarity index 100% rename from 0F_globals_synchronization_println/Makefile rename to .0F_globals_synchronization_println/Makefile diff --git a/0F_globals_synchronization_println/README.md b/.0F_globals_synchronization_println/README.md similarity index 100% rename from 0F_globals_synchronization_println/README.md rename to .0F_globals_synchronization_println/README.md diff --git a/0F_globals_synchronization_println/kernel8 b/.0F_globals_synchronization_println/kernel8 similarity index 100% rename from 0F_globals_synchronization_println/kernel8 rename to .0F_globals_synchronization_println/kernel8 diff --git a/0F_globals_synchronization_println/kernel8.img b/.0F_globals_synchronization_println/kernel8.img similarity index 100% rename from 0F_globals_synchronization_println/kernel8.img rename to .0F_globals_synchronization_println/kernel8.img diff --git a/0F_globals_synchronization_println/link.ld b/.0F_globals_synchronization_println/link.ld similarity index 100% rename from 0F_globals_synchronization_println/link.ld rename to .0F_globals_synchronization_println/link.ld diff --git a/0F_globals_synchronization_println/raspi3_boot/Cargo.toml b/.0F_globals_synchronization_println/raspi3_boot/Cargo.toml similarity index 100% rename from 0F_globals_synchronization_println/raspi3_boot/Cargo.toml rename to .0F_globals_synchronization_println/raspi3_boot/Cargo.toml diff --git a/0F_globals_synchronization_println/raspi3_boot/src/lib.rs b/.0F_globals_synchronization_println/raspi3_boot/src/lib.rs similarity index 100% rename from 0F_globals_synchronization_println/raspi3_boot/src/lib.rs rename to .0F_globals_synchronization_println/raspi3_boot/src/lib.rs diff --git a/0F_globals_synchronization_println/src/delays.rs b/.0F_globals_synchronization_println/src/delays.rs similarity index 100% rename from 0F_globals_synchronization_println/src/delays.rs rename to .0F_globals_synchronization_println/src/delays.rs diff --git a/0F_globals_synchronization_println/src/devices.rs b/.0F_globals_synchronization_println/src/devices.rs similarity index 100% rename from 0F_globals_synchronization_println/src/devices.rs rename to .0F_globals_synchronization_println/src/devices.rs diff --git a/0F_globals_synchronization_println/src/devices/hw.rs b/.0F_globals_synchronization_println/src/devices/hw.rs similarity index 100% rename from 0F_globals_synchronization_println/src/devices/hw.rs rename to .0F_globals_synchronization_println/src/devices/hw.rs diff --git a/0F_globals_synchronization_println/src/devices/hw/gpio.rs b/.0F_globals_synchronization_println/src/devices/hw/gpio.rs similarity index 100% rename from 0F_globals_synchronization_println/src/devices/hw/gpio.rs rename to .0F_globals_synchronization_println/src/devices/hw/gpio.rs diff --git a/0F_globals_synchronization_println/src/devices/hw/uart.rs b/.0F_globals_synchronization_println/src/devices/hw/uart.rs similarity index 100% rename from 0F_globals_synchronization_println/src/devices/hw/uart.rs rename to .0F_globals_synchronization_println/src/devices/hw/uart.rs diff --git a/0F_globals_synchronization_println/src/devices/hw/videocore_mbox.rs b/.0F_globals_synchronization_println/src/devices/hw/videocore_mbox.rs similarity index 100% rename from 0F_globals_synchronization_println/src/devices/hw/videocore_mbox.rs rename to .0F_globals_synchronization_println/src/devices/hw/videocore_mbox.rs diff --git a/0F_globals_synchronization_println/src/devices/virt.rs b/.0F_globals_synchronization_println/src/devices/virt.rs similarity index 100% rename from 0F_globals_synchronization_println/src/devices/virt.rs rename to .0F_globals_synchronization_println/src/devices/virt.rs diff --git a/0F_globals_synchronization_println/src/devices/virt/console.rs b/.0F_globals_synchronization_println/src/devices/virt/console.rs similarity index 100% rename from 0F_globals_synchronization_println/src/devices/virt/console.rs rename to .0F_globals_synchronization_println/src/devices/virt/console.rs diff --git a/0F_globals_synchronization_println/src/macros.rs b/.0F_globals_synchronization_println/src/macros.rs similarity index 100% rename from 0F_globals_synchronization_println/src/macros.rs rename to .0F_globals_synchronization_println/src/macros.rs diff --git a/0F_globals_synchronization_println/src/main.rs b/.0F_globals_synchronization_println/src/main.rs similarity index 100% rename from 0F_globals_synchronization_println/src/main.rs rename to .0F_globals_synchronization_println/src/main.rs diff --git a/0F_globals_synchronization_println/src/memory.rs b/.0F_globals_synchronization_println/src/memory.rs similarity index 100% rename from 0F_globals_synchronization_println/src/memory.rs rename to .0F_globals_synchronization_println/src/memory.rs diff --git a/0F_globals_synchronization_println/src/memory/mmu.rs b/.0F_globals_synchronization_println/src/memory/mmu.rs similarity index 100% rename from 0F_globals_synchronization_println/src/memory/mmu.rs rename to .0F_globals_synchronization_println/src/memory/mmu.rs diff --git a/0F_globals_synchronization_println/src/sync.rs b/.0F_globals_synchronization_println/src/sync.rs similarity index 100% rename from 0F_globals_synchronization_println/src/sync.rs rename to .0F_globals_synchronization_println/src/sync.rs diff --git a/10_DMA_memory/.cargo/config b/.10_DMA_memory/.cargo/config similarity index 100% rename from 10_DMA_memory/.cargo/config rename to .10_DMA_memory/.cargo/config diff --git a/10_DMA_memory/Cargo.lock b/.10_DMA_memory/Cargo.lock similarity index 100% rename from 10_DMA_memory/Cargo.lock rename to .10_DMA_memory/Cargo.lock diff --git a/10_DMA_memory/Cargo.toml b/.10_DMA_memory/Cargo.toml similarity index 100% rename from 10_DMA_memory/Cargo.toml rename to .10_DMA_memory/Cargo.toml diff --git a/10_DMA_memory/Makefile b/.10_DMA_memory/Makefile similarity index 100% rename from 10_DMA_memory/Makefile rename to .10_DMA_memory/Makefile diff --git a/10_DMA_memory/README.md b/.10_DMA_memory/README.md similarity index 100% rename from 10_DMA_memory/README.md rename to .10_DMA_memory/README.md diff --git a/10_DMA_memory/kernel8 b/.10_DMA_memory/kernel8 similarity index 100% rename from 10_DMA_memory/kernel8 rename to .10_DMA_memory/kernel8 diff --git a/10_DMA_memory/kernel8.img b/.10_DMA_memory/kernel8.img similarity index 100% rename from 10_DMA_memory/kernel8.img rename to .10_DMA_memory/kernel8.img diff --git a/10_DMA_memory/link.ld b/.10_DMA_memory/link.ld similarity index 100% rename from 10_DMA_memory/link.ld rename to .10_DMA_memory/link.ld diff --git a/10_DMA_memory/raspi3_boot/Cargo.lock b/.10_DMA_memory/raspi3_boot/Cargo.lock similarity index 100% rename from 10_DMA_memory/raspi3_boot/Cargo.lock rename to .10_DMA_memory/raspi3_boot/Cargo.lock diff --git a/10_DMA_memory/raspi3_boot/Cargo.toml b/.10_DMA_memory/raspi3_boot/Cargo.toml similarity index 100% rename from 10_DMA_memory/raspi3_boot/Cargo.toml rename to .10_DMA_memory/raspi3_boot/Cargo.toml diff --git a/10_DMA_memory/raspi3_boot/src/lib.rs b/.10_DMA_memory/raspi3_boot/src/lib.rs similarity index 100% rename from 10_DMA_memory/raspi3_boot/src/lib.rs rename to .10_DMA_memory/raspi3_boot/src/lib.rs diff --git a/10_DMA_memory/src/delays.rs b/.10_DMA_memory/src/delays.rs similarity index 100% rename from 10_DMA_memory/src/delays.rs rename to .10_DMA_memory/src/delays.rs diff --git a/10_DMA_memory/src/devices.rs b/.10_DMA_memory/src/devices.rs similarity index 100% rename from 10_DMA_memory/src/devices.rs rename to .10_DMA_memory/src/devices.rs diff --git a/10_DMA_memory/src/devices/hw.rs b/.10_DMA_memory/src/devices/hw.rs similarity index 100% rename from 10_DMA_memory/src/devices/hw.rs rename to .10_DMA_memory/src/devices/hw.rs diff --git a/10_DMA_memory/src/devices/hw/gpio.rs b/.10_DMA_memory/src/devices/hw/gpio.rs similarity index 100% rename from 10_DMA_memory/src/devices/hw/gpio.rs rename to .10_DMA_memory/src/devices/hw/gpio.rs diff --git a/10_DMA_memory/src/devices/hw/mini_uart.rs b/.10_DMA_memory/src/devices/hw/mini_uart.rs similarity index 100% rename from 10_DMA_memory/src/devices/hw/mini_uart.rs rename to .10_DMA_memory/src/devices/hw/mini_uart.rs diff --git a/10_DMA_memory/src/devices/hw/pl011_uart.rs b/.10_DMA_memory/src/devices/hw/pl011_uart.rs similarity index 100% rename from 10_DMA_memory/src/devices/hw/pl011_uart.rs rename to .10_DMA_memory/src/devices/hw/pl011_uart.rs diff --git a/10_DMA_memory/src/devices/hw/videocore_mbox.rs b/.10_DMA_memory/src/devices/hw/videocore_mbox.rs similarity index 100% rename from 10_DMA_memory/src/devices/hw/videocore_mbox.rs rename to .10_DMA_memory/src/devices/hw/videocore_mbox.rs diff --git a/10_DMA_memory/src/devices/virt.rs b/.10_DMA_memory/src/devices/virt.rs similarity index 100% rename from 10_DMA_memory/src/devices/virt.rs rename to .10_DMA_memory/src/devices/virt.rs diff --git a/10_DMA_memory/src/devices/virt/console.rs b/.10_DMA_memory/src/devices/virt/console.rs similarity index 100% rename from 10_DMA_memory/src/devices/virt/console.rs rename to .10_DMA_memory/src/devices/virt/console.rs diff --git a/10_DMA_memory/src/macros.rs b/.10_DMA_memory/src/macros.rs similarity index 100% rename from 10_DMA_memory/src/macros.rs rename to .10_DMA_memory/src/macros.rs diff --git a/10_DMA_memory/src/main.rs b/.10_DMA_memory/src/main.rs similarity index 100% rename from 10_DMA_memory/src/main.rs rename to .10_DMA_memory/src/main.rs diff --git a/10_DMA_memory/src/memory.rs b/.10_DMA_memory/src/memory.rs similarity index 100% rename from 10_DMA_memory/src/memory.rs rename to .10_DMA_memory/src/memory.rs diff --git a/10_DMA_memory/src/memory/bump_allocator.rs b/.10_DMA_memory/src/memory/bump_allocator.rs similarity index 100% rename from 10_DMA_memory/src/memory/bump_allocator.rs rename to .10_DMA_memory/src/memory/bump_allocator.rs diff --git a/10_DMA_memory/src/memory/mmu.rs b/.10_DMA_memory/src/memory/mmu.rs similarity index 100% rename from 10_DMA_memory/src/memory/mmu.rs rename to .10_DMA_memory/src/memory/mmu.rs diff --git a/10_DMA_memory/src/sync.rs b/.10_DMA_memory/src/sync.rs similarity index 100% rename from 10_DMA_memory/src/sync.rs rename to .10_DMA_memory/src/sync.rs diff --git a/11_exceptions_groundwork/.cargo/config b/.11_exceptions_groundwork/.cargo/config similarity index 100% rename from 11_exceptions_groundwork/.cargo/config rename to .11_exceptions_groundwork/.cargo/config diff --git a/11_exceptions_groundwork/Cargo.lock b/.11_exceptions_groundwork/Cargo.lock similarity index 100% rename from 11_exceptions_groundwork/Cargo.lock rename to .11_exceptions_groundwork/Cargo.lock diff --git a/11_exceptions_groundwork/Cargo.toml b/.11_exceptions_groundwork/Cargo.toml similarity index 100% rename from 11_exceptions_groundwork/Cargo.toml rename to .11_exceptions_groundwork/Cargo.toml diff --git a/11_exceptions_groundwork/Makefile b/.11_exceptions_groundwork/Makefile similarity index 100% rename from 11_exceptions_groundwork/Makefile rename to .11_exceptions_groundwork/Makefile diff --git a/11_exceptions_groundwork/README.md b/.11_exceptions_groundwork/README.md similarity index 100% rename from 11_exceptions_groundwork/README.md rename to .11_exceptions_groundwork/README.md diff --git a/11_exceptions_groundwork/kernel8 b/.11_exceptions_groundwork/kernel8 similarity index 100% rename from 11_exceptions_groundwork/kernel8 rename to .11_exceptions_groundwork/kernel8 diff --git a/11_exceptions_groundwork/kernel8.img b/.11_exceptions_groundwork/kernel8.img similarity index 100% rename from 11_exceptions_groundwork/kernel8.img rename to .11_exceptions_groundwork/kernel8.img diff --git a/11_exceptions_groundwork/link.ld b/.11_exceptions_groundwork/link.ld similarity index 100% rename from 11_exceptions_groundwork/link.ld rename to .11_exceptions_groundwork/link.ld diff --git a/11_exceptions_groundwork/raspi3_boot/Cargo.lock b/.11_exceptions_groundwork/raspi3_boot/Cargo.lock similarity index 100% rename from 11_exceptions_groundwork/raspi3_boot/Cargo.lock rename to .11_exceptions_groundwork/raspi3_boot/Cargo.lock diff --git a/11_exceptions_groundwork/raspi3_boot/Cargo.toml b/.11_exceptions_groundwork/raspi3_boot/Cargo.toml similarity index 100% rename from 11_exceptions_groundwork/raspi3_boot/Cargo.toml rename to .11_exceptions_groundwork/raspi3_boot/Cargo.toml diff --git a/11_exceptions_groundwork/raspi3_boot/src/lib.rs b/.11_exceptions_groundwork/raspi3_boot/src/lib.rs similarity index 100% rename from 11_exceptions_groundwork/raspi3_boot/src/lib.rs rename to .11_exceptions_groundwork/raspi3_boot/src/lib.rs diff --git a/11_exceptions_groundwork/src/delays.rs b/.11_exceptions_groundwork/src/delays.rs similarity index 100% rename from 11_exceptions_groundwork/src/delays.rs rename to .11_exceptions_groundwork/src/delays.rs diff --git a/11_exceptions_groundwork/src/devices.rs b/.11_exceptions_groundwork/src/devices.rs similarity index 100% rename from 11_exceptions_groundwork/src/devices.rs rename to .11_exceptions_groundwork/src/devices.rs diff --git a/11_exceptions_groundwork/src/devices/hw.rs b/.11_exceptions_groundwork/src/devices/hw.rs similarity index 100% rename from 11_exceptions_groundwork/src/devices/hw.rs rename to .11_exceptions_groundwork/src/devices/hw.rs diff --git a/11_exceptions_groundwork/src/devices/hw/gpio.rs b/.11_exceptions_groundwork/src/devices/hw/gpio.rs similarity index 100% rename from 11_exceptions_groundwork/src/devices/hw/gpio.rs rename to .11_exceptions_groundwork/src/devices/hw/gpio.rs diff --git a/11_exceptions_groundwork/src/devices/hw/mini_uart.rs b/.11_exceptions_groundwork/src/devices/hw/mini_uart.rs similarity index 100% rename from 11_exceptions_groundwork/src/devices/hw/mini_uart.rs rename to .11_exceptions_groundwork/src/devices/hw/mini_uart.rs diff --git a/11_exceptions_groundwork/src/devices/hw/pl011_uart.rs b/.11_exceptions_groundwork/src/devices/hw/pl011_uart.rs similarity index 100% rename from 11_exceptions_groundwork/src/devices/hw/pl011_uart.rs rename to .11_exceptions_groundwork/src/devices/hw/pl011_uart.rs diff --git a/11_exceptions_groundwork/src/devices/hw/videocore_mbox.rs b/.11_exceptions_groundwork/src/devices/hw/videocore_mbox.rs similarity index 100% rename from 11_exceptions_groundwork/src/devices/hw/videocore_mbox.rs rename to .11_exceptions_groundwork/src/devices/hw/videocore_mbox.rs diff --git a/11_exceptions_groundwork/src/devices/virt.rs b/.11_exceptions_groundwork/src/devices/virt.rs similarity index 100% rename from 11_exceptions_groundwork/src/devices/virt.rs rename to .11_exceptions_groundwork/src/devices/virt.rs diff --git a/11_exceptions_groundwork/src/devices/virt/console.rs b/.11_exceptions_groundwork/src/devices/virt/console.rs similarity index 100% rename from 11_exceptions_groundwork/src/devices/virt/console.rs rename to .11_exceptions_groundwork/src/devices/virt/console.rs diff --git a/11_exceptions_groundwork/src/exception.rs b/.11_exceptions_groundwork/src/exception.rs similarity index 100% rename from 11_exceptions_groundwork/src/exception.rs rename to .11_exceptions_groundwork/src/exception.rs diff --git a/11_exceptions_groundwork/src/macros.rs b/.11_exceptions_groundwork/src/macros.rs similarity index 100% rename from 11_exceptions_groundwork/src/macros.rs rename to .11_exceptions_groundwork/src/macros.rs diff --git a/11_exceptions_groundwork/src/main.rs b/.11_exceptions_groundwork/src/main.rs similarity index 100% rename from 11_exceptions_groundwork/src/main.rs rename to .11_exceptions_groundwork/src/main.rs diff --git a/11_exceptions_groundwork/src/memory.rs b/.11_exceptions_groundwork/src/memory.rs similarity index 100% rename from 11_exceptions_groundwork/src/memory.rs rename to .11_exceptions_groundwork/src/memory.rs diff --git a/11_exceptions_groundwork/src/memory/bump_allocator.rs b/.11_exceptions_groundwork/src/memory/bump_allocator.rs similarity index 100% rename from 11_exceptions_groundwork/src/memory/bump_allocator.rs rename to .11_exceptions_groundwork/src/memory/bump_allocator.rs diff --git a/11_exceptions_groundwork/src/memory/mmu.rs b/.11_exceptions_groundwork/src/memory/mmu.rs similarity index 100% rename from 11_exceptions_groundwork/src/memory/mmu.rs rename to .11_exceptions_groundwork/src/memory/mmu.rs diff --git a/11_exceptions_groundwork/src/sync.rs b/.11_exceptions_groundwork/src/sync.rs similarity index 100% rename from 11_exceptions_groundwork/src/sync.rs rename to .11_exceptions_groundwork/src/sync.rs diff --git a/11_exceptions_groundwork/src/vectors.S b/.11_exceptions_groundwork/src/vectors.S similarity index 100% rename from 11_exceptions_groundwork/src/vectors.S rename to .11_exceptions_groundwork/src/vectors.S diff --git a/X1_JTAG_boot/.cargo/config b/.X1_JTAG_boot/.cargo/config similarity index 100% rename from X1_JTAG_boot/.cargo/config rename to .X1_JTAG_boot/.cargo/config diff --git a/X1_JTAG_boot/Cargo.lock b/.X1_JTAG_boot/Cargo.lock similarity index 100% rename from X1_JTAG_boot/Cargo.lock rename to .X1_JTAG_boot/Cargo.lock diff --git a/X1_JTAG_boot/Cargo.toml b/.X1_JTAG_boot/Cargo.toml similarity index 100% rename from X1_JTAG_boot/Cargo.toml rename to .X1_JTAG_boot/Cargo.toml diff --git a/X1_JTAG_boot/Makefile b/.X1_JTAG_boot/Makefile similarity index 100% rename from X1_JTAG_boot/Makefile rename to .X1_JTAG_boot/Makefile diff --git a/X1_JTAG_boot/README.md b/.X1_JTAG_boot/README.md similarity index 100% rename from X1_JTAG_boot/README.md rename to .X1_JTAG_boot/README.md diff --git a/X1_JTAG_boot/jtag_boot b/.X1_JTAG_boot/jtag_boot similarity index 100% rename from X1_JTAG_boot/jtag_boot rename to .X1_JTAG_boot/jtag_boot diff --git a/X1_JTAG_boot/jtag_boot.img b/.X1_JTAG_boot/jtag_boot.img similarity index 100% rename from X1_JTAG_boot/jtag_boot.img rename to .X1_JTAG_boot/jtag_boot.img diff --git a/X1_JTAG_boot/link.ld b/.X1_JTAG_boot/link.ld similarity index 100% rename from X1_JTAG_boot/link.ld rename to .X1_JTAG_boot/link.ld diff --git a/X1_JTAG_boot/raspi3_boot/Cargo.toml b/.X1_JTAG_boot/raspi3_boot/Cargo.toml similarity index 100% rename from X1_JTAG_boot/raspi3_boot/Cargo.toml rename to .X1_JTAG_boot/raspi3_boot/Cargo.toml diff --git a/X1_JTAG_boot/raspi3_boot/src/lib.rs b/.X1_JTAG_boot/raspi3_boot/src/lib.rs similarity index 100% rename from X1_JTAG_boot/raspi3_boot/src/lib.rs rename to .X1_JTAG_boot/raspi3_boot/src/lib.rs diff --git a/X1_JTAG_boot/src/gpio.rs b/.X1_JTAG_boot/src/gpio.rs similarity index 100% rename from X1_JTAG_boot/src/gpio.rs rename to .X1_JTAG_boot/src/gpio.rs diff --git a/X1_JTAG_boot/src/main.rs b/.X1_JTAG_boot/src/main.rs similarity index 100% rename from X1_JTAG_boot/src/main.rs rename to .X1_JTAG_boot/src/main.rs diff --git a/X1_JTAG_boot/src/mini_uart.rs b/.X1_JTAG_boot/src/mini_uart.rs similarity index 100% rename from X1_JTAG_boot/src/mini_uart.rs rename to .X1_JTAG_boot/src/mini_uart.rs diff --git a/.githooks/pre-commit b/.githooks/pre-commit index e7f98f06..1aa4e42e 100755 --- a/.githooks/pre-commit +++ b/.githooks/pre-commit @@ -1,6 +1,10 @@ #!/usr/bin/env ruby +# frozen_string_literal: true -require_relative '../utils/copyrighted' +require_relative '../utils/helpers/copyrighted' + +puts "Warning, git pre-commit hooks temporarily disabled!" +exit source_files_exts = ['.S', '.rs', '.rb'] @@ -9,7 +13,6 @@ staged_files = `git --no-pager diff --name-only --cached`.split(/\n/) need_inspection = [] staged_files.each do |f| puts f - exit need_inspection << f if f.include?('Makefile') || source_files_exts.include?(File.extname(f)) end diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 1434c494..00000000 --- a/.travis.yml +++ /dev/null @@ -1,36 +0,0 @@ -language: rust - -notifications: - email: - recipients: - - andre.o.richter@gmail.com - on_success: never - on_failure: change - -addons: - apt: - packages: - - ruby - -rust: - - nightly - -os: - - linux - - osx - -matrix: - allow_failures: - - os: osx - -cache: cargo - -before_script: - - rustup component add rust-src llvm-tools-preview - - (test -x $HOME/.cargo/bin/cargo-install-update || cargo install cargo-update) - - (test -x $HOME/.cargo/bin/cargo-xbuild || cargo install cargo-xbuild) - - (test -x $HOME/.cargo/bin/cargo-objcopy || cargo install cargo-binutils) - - cargo install-update -a - -script: - - ruby utils/make_all.rb diff --git a/12_Spinlocks/README.md b/12_Spinlocks/README.md deleted file mode 100644 index 04dffb18..00000000 --- a/12_Spinlocks/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Tutorial 12 - Spinlocks - -Coming soon! - -Will replace the `NullLocks` with real Spinlocks! diff --git a/13_Interrupts/README.md b/13_Interrupts/README.md deleted file mode 100644 index 6cf668f8..00000000 --- a/13_Interrupts/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Tutorial 13 - Interrupts - -Coming soon! diff --git a/LICENSE b/LICENSE index 43728826..38d6ab9b 100644 --- a/LICENSE +++ b/LICENSE @@ -1,5 +1,5 @@ Copyright (C) 2017 bzt (bztsrc@github) -Copyright (c) 2018 Andre Richter +Copyright (c) 2018-2019 Andre Richter Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/README.md b/README.md index 9e389161..55ec3c05 100644 --- a/README.md +++ b/README.md @@ -1,71 +1,31 @@ # Bare-metal and Operating System development tutorials in Rust on the Raspberry Pi 3 -[![Build Status](https://travis-ci.org/rust-embedded/rust-raspi3-OS-tutorials.svg?branch=master)](https://travis-ci.org/rust-embedded/rust-raspi3-OS-tutorials) - ## Notice -**The tutorials are being rewritten [on the v2 branch](https://github.com/rust-embedded/rust-raspi3-OS-tutorials/tree/rewrite_for_v2), so please have a look from time to time. The master branch will only receive updates if something breaks.** +This is a work-in-progress rewrite started on September 2019. I will first add +code, and later write accompanying prose. The rewrite also supports both, the Raspberry Pi 3 and the **Raspberry Pi 4**! _Cheers, Andre_ -## Introduction - -This repository aims to provide easy reference code for programming bare metal -on the Raspberry Pi 3 in the [Rust systems programming language]. Emphasis is on -leveraging Rust's zero-overhead abstractions to compile lean code that is -readable, concise and safe (at least as safe as it gets on bare-metal hardware). - -[Rust systems programming language]: https://www.rust-lang.org - -The target audience is **hobby OS developers** who are new to [ARM's 64 bit ARMv8-A -architecture](https://developer.arm.com/products/architecture/cpu-architecture/a-profile/docs). -It will give you examples on how to do common Operating Systems tasks, like writing -to the serial console, setting up virtual memory and exception handling and using -various peripherals like a hardware-backed random number generator. - -However, it is *not* a tutorial on how to write a _complete_ OS from start to finish. -Rather, it comprises a set of micro-tutorials that introduce different topics one -after the other. Maybe in the distant future, a meta tutorial that -combines all the resources to a full-fleged kernel that can multi-task some simple -userspace processes is possible, but don't take my word for it. - -## Environment - -This repo tries to put a focus on user friendliness. Therefore, I made some -efforts to eliminate the biggest painpoint in embedded development: _Toolchain -hassles_. - -Users eager to try the code should not be bothered with complicated toolchain -installation/compilation steps. This is achieved by trying to use the standard -Rust toolchain as much as possible, and bridge existing gaps with Docker -containers. Please [install Docker for your distro]. - -The setup consists of the following components: -1. Compiler, linker and binutils are used from Rust nightly. -2. QEMU will be used for emulation, but RPi3 support in QEMU is very fresh and has not landed in most of the pre-packaged versions of popular distributions. [This] container will provide it ready to go. - -Please notice that you won't need to download or prepare the containers -upfront. As long as you have docker installed, they will be pulled automatically -the first time the Makefile needs them. - -If you want to know more about docker and peek at the the containers used in these -tutorials, please refer [to the repository's docker folder](docker). - -[install Docker for your distro]: https://www.docker.com/community-edition#/download -[This]: https://github.com/andre-richter/docker-raspi3-qemu - ## Prerequisites Before you can start, you'll need a suitable Rust toolchain. +Please browse to the [rustup components history] and note the date of the most recent +build that shows `clippy` as `present`. + +[rustup components history]: https://rust-lang.github.io/rustup-components-history/ + +Then, proceed to install this nightly using your noted date: ```bash -curl https://sh.rustup.rs -sSf | sh -s -- \ - --default-toolchain nightly \ - --component rust-src llvm-tools-preview clippy rustfmt +curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain nightly-YOUR_DATE_HERE +# For example: +# curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain nightly-2019-09-05 +rustup component add rust-src llvm-tools-preview clippy cargo install cargo-xbuild cargo-binutils ``` @@ -101,86 +61,6 @@ sudo screen /dev/ttyUSB0 115200 Exit screen again by pressing ctrl-a ctrl-d -## About this repository - -The tutorial is basically a combination of two awesome resources. - 1. First of all, it is a fork of [Zoltan Baldaszti]'s awesome [tutorial] on bare metal programming on RPi3 in `C`. - 1. Rust code will be based on his files, READMEs will be adapted, and I might change things here and there if I think it is beneficial. However, credits to this guy plz! - 2. The second props go to [Jorge Aparicio] for ["The Embedonomicon"], from which the boot code is taken. - -[Zoltan Baldaszti]: https://github.com/bztsrc -[tutorial]: https://github.com/bztsrc/raspi3-tutorial -[Jorge Aparicio]: https://github.com/japaric -["The Embedonomicon"]: https://rust-embedded.github.io/embedonomicon/ - -## About the hardware - -There are lots of pages on the internet describing the Raspberry Pi 3 hardware -in detail, so I'll be brief and cover only the basics. - -The board is shipped with a [BCM2837 -SoC](https://github.com/raspberrypi/documentation/tree/master/hardware/raspberrypi/bcm2837) -chip. That includes a - - - VideoCore GPU - - ARM-Cortex-A53 CPU (ARMv8) - - Some MMIO mapped pheripherals. - -Interestingly the CPU is not the main processor on the board. When it's powered -up, first GPU runs. When it's finished with the initialization by executing the -code in bootcode.bin, it will load and execute the start.elf executable. That's -not an ARM executable, but compiled for the GPU. What interests us is that -start.elf looks for different ARM executables, all starting with `kernel` and -ending in `.img`. As we're going to program the CPU in AArch64 mode, we'll need -`kernel8.img` only, which is the last to look for. Once it's loaded, the GPU -triggers the reset line on the ARM processor, which starts executing code at -address 0x80000 (or more precisely at 0, but the GPU puts an ARM jump code there -first). - -The RAM (1G for the Raspberry Pi 3) is shared among the CPU and the GPU, meaning -one can read what the other has written into memory. To avoid confusion, a well -defined, so called [mailbox -interface](https://github.com/raspberrypi/firmware/wiki/Mailboxes) is -established. The CPU writes a message into the mailbox, and tells the GPU to -read it. The GPU (knowing that the message is entirely in memory) interprets it, -and places a response message at the same address. The CPU has to poll the -memory to know when the GPU is finished, and then it can read the response. - -Similarily, all peripherals communicates in memory with the CPU. Each has it's -dedicated memory address starting from 0x3F000000, but it's not in real RAM -(called Memory Mapped IO). Now there's no mailbox for peripherals, instead each -device has it's own protocol. What's common for these devices that their memory -must be read and written in 32 bit units at 4 bytes aligned addresses (so called -words), and each has control/status and data words. Unfortunately Broadcom (the -manufacturer of the SoC chip) is legendary bad at documenting their -products. The best we've got is the BCM2835 documentation, which is close -enough. - -There's also a Memory Management Unit in the CPU which allows creating virtual -address spaces. This can be programmed by specific CPU registers, and care must -be taken when you map these MMIO addresses into a virtual address space. - -Some of the more interesting MMIO addresses are: -``` -0x3F003000 - System Timer -0x3F00B000 - Interrupt controller -0x3F00B880 - VideoCore mailbox -0x3F100000 - Power management -0x3F104000 - Random Number Generator -0x3F200000 - General Purpose IO controller -0x3F201000 - UART0 (serial port, PL011) -0x3F215000 - UART1 (serial port, AUX mini UART) -0x3F300000 - External Mass Media Controller (SD card reader) -0x3F980000 - Universal Serial Bus controller -``` -For more information, see Raspberry Pi firmware wiki and documentation on github. - -https://github.com/raspberrypi - -Good luck and enjoy hacking with your Raspberry! :-) - -Andre - ## License Licensed under the MIT license ([LICENSE-MIT](LICENSE) or http://opensource.org/licenses/MIT). diff --git a/TODO.md b/TODO.md deleted file mode 100644 index ac1ee4d5..00000000 --- a/TODO.md +++ /dev/null @@ -1,22 +0,0 @@ -# TODO - -## Add debugging targets to Makefile - -sudo apt installl gdb-multiarch - -qemu-gdb: - $(DOCKER_CMD) -p 1234:1234 $(UTILS_CONTAINER) $(QEMU_CMD) -s -S - -gdb-multiarch kernel8.img -ex "target remote :1234" -set architecture aarch64 -symbols-file ?? - -combine this with rust-gdb? - -## Find a way to easily switch betwenn release build and local development - -```toml -[patch.crates-io] -cortex-a = { path = "../../cortex-a" } -register = { path = "../../register-rs" } -``` diff --git a/doc/BCM2837-ARM-Peripherals.-.Revised.-.V2-1.pdf b/doc/BCM2837-ARM-Peripherals.-.Revised.-.V2-1.pdf deleted file mode 100644 index 5e8d4d72..00000000 Binary files a/doc/BCM2837-ARM-Peripherals.-.Revised.-.V2-1.pdf and /dev/null differ diff --git a/doc/bcm2386_SoC_datasheet_QA7_rev3.4.pdf b/doc/bcm2386_SoC_datasheet_QA7_rev3.4.pdf deleted file mode 100644 index 598393d3..00000000 Binary files a/doc/bcm2386_SoC_datasheet_QA7_rev3.4.pdf and /dev/null differ diff --git a/doc/dma_0.png b/doc/dma_0.png deleted file mode 100644 index 65c8c619..00000000 Binary files a/doc/dma_0.png and /dev/null differ diff --git a/doc/dma_0.svg b/doc/dma_0.svg deleted file mode 100644 index 8ea0f46a..00000000 --- a/doc/dma_0.svg +++ /dev/null @@ -1,402 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - core0 - - core1 - - core2 - - core3 - - - Cache - - - CPU - - DRAM - - Videocore - - - - diff --git a/doc/image_jtag_connected.jpg b/doc/image_jtag_connected.jpg deleted file mode 100644 index 43075cee..00000000 Binary files a/doc/image_jtag_connected.jpg and /dev/null differ diff --git a/doc/jtag_demo.gif b/doc/jtag_demo.gif deleted file mode 100644 index faf6c5cc..00000000 Binary files a/doc/jtag_demo.gif and /dev/null differ diff --git a/doc/page_tables_2MiB.png b/doc/page_tables_2MiB.png deleted file mode 100644 index 930d3b8e..00000000 Binary files a/doc/page_tables_2MiB.png and /dev/null differ diff --git a/doc/page_tables_2MiB.svg b/doc/page_tables_2MiB.svg deleted file mode 100644 index c98d9b4b..00000000 --- a/doc/page_tables_2MiB.svg +++ /dev/null @@ -1,1303 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - 0 - - ... - Device MMIO - - - - ... - 511 - 504 - Device MMIO - - UART_BASE + CR_Offset =0x3F20_1000 + 0x30 = 0x3F20_1030 =0b111111001_000000001000000110000 - - TTBR_EL1 - - LVL2 tablebase address - LVL3 Table base addr - static mut LVL2_TABLE - } - - 0b1_1111_1001 = 505Select entrty 505 ofLVL2 table - Virtual Address: - - APAccessPermissions - 53 - 47 - 9 - 10 - 8 - 6 - 7 - 4 - 1 - 2 - 0 - - - MAIR_EL1index - - TYPE - VALID - - - - SHShareability - AFAccessFlag - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - PXNPrivilegedexecutenever - 63 - - - - - - Final 48 Bit Physical Address: 0x3F201030 - 0b1_1111_1001 - - - } - - 0 - 20 - 47 - 21 - The LVL2 Block entry pointsto the start address ofa 2 MiB frame. The last21 Bit of the VA are theindex into the frame. - output address - UART - 505 - - - - - - - - - 21 - - - - 0b1_1111_1001 - 0b1000000110000 - - - - 0 - - - diff --git a/doc/page_tables_4KiB.png b/doc/page_tables_4KiB.png deleted file mode 100644 index 349e9037..00000000 Binary files a/doc/page_tables_4KiB.png and /dev/null differ diff --git a/doc/page_tables_4KiB.svg b/doc/page_tables_4KiB.svg deleted file mode 100644 index 99c1c911..00000000 --- a/doc/page_tables_4KiB.svg +++ /dev/null @@ -1,1566 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - ... - 0 - 127 - Stack - Stack - - - - - ... - Code + RO data - Code + RO data - 128 - - - - - ... - Data and BSS - Data and BSS - - - - ... - Remapped UART - 511 - - - - 0 - - ... - Device MMIO - - - - ... - 511 - 504 - Device MMIO - - REMAPPED_UART_BASE + CR_Offset =0x001F_F000 + 0x30 = 0x001F_F030 =0b000000000_111111111_000000110000 - - TTBR_EL1 - - LVL2 tablebase address - LVL3 Table base addr - static mut LVL2_TABLE - static mut LVL3_TABLE - } - - Select entry 0 ofLVL2 table - - } - Virtual Address: - - 0b1_1111_1111 = 511Select entry 511 ofLVL3 table - - APAccessPermissions - 53 - 12 - 47 - 9 - 10 - 8 - 6 - 7 - 4 - 1 - 2 - 0 - - - MAIR_EL1index - - TYPE - VALID - - - - SHShareability - AFAccessFlag - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - PXNPrivilegedexecutenever - 63 - - - - - - Final 48 Bit Physical Address: 0x3F201030 - - - 0x3F201 - - 0x030 - - 0x3F201 - } - - - 0 - 11 - 47 - 12 - Entry contains baseaddress of follow-upLVL3 Table. - The LVL3 PT entry pointsto the start address ofa 4 KiB frame. The last12 Bit of the VA are theindex into the frame. - output address - 1 - - diff --git a/doc/wiring_jtag.png b/doc/wiring_jtag.png deleted file mode 100644 index 88f0ba1f..00000000 Binary files a/doc/wiring_jtag.png and /dev/null differ diff --git a/docker/raspi3-gdb/Dockerfile b/docker/raspi3-gdb/Dockerfile index f66681d9..6b9d7e4c 100644 --- a/docker/raspi3-gdb/Dockerfile +++ b/docker/raspi3-gdb/Dockerfile @@ -27,7 +27,7 @@ # ============================================================================= FROM ubuntu:18.04 -LABEL maintainer="The Cortex-A team , Andre Richter " +LABEL maintainer="The resources team , Andre Richter " RUN set -ex; \ tempPkgs=' \ diff --git a/docker/raspi3-openocd/Dockerfile b/docker/raspi3-openocd/Dockerfile index 88ab72d0..53f8ea02 100644 --- a/docker/raspi3-openocd/Dockerfile +++ b/docker/raspi3-openocd/Dockerfile @@ -28,7 +28,7 @@ # ============================================================================= FROM ubuntu:18.04 -LABEL maintainer="The Cortex-A team , Andre Richter " +LABEL maintainer="The resources team , Andre Richter " RUN set -ex; \ tempPkgs=' \ diff --git a/docker/raspi3-utils/Dockerfile b/docker/raspi3-utils/Dockerfile index 3abb890e..939de531 100644 --- a/docker/raspi3-utils/Dockerfile +++ b/docker/raspi3-utils/Dockerfile @@ -27,7 +27,7 @@ # ============================================================================= FROM ubuntu:18.04 -LABEL maintainer="The Cortex-A team , Andre Richter " +LABEL maintainer="The resources team , Andre Richter " RUN set -ex; \ apt-get update; \ diff --git a/emulation/instructions.txt b/emulation/instructions.txt deleted file mode 100644 index e6b1ed87..00000000 --- a/emulation/instructions.txt +++ /dev/null @@ -1,14 +0,0 @@ -######################################################### -# Welcome to the Raspi3 Emulation with # -# MiniUart and PL011UART # -# # -# # -# 1. Use the mouse to select different panes # -# and interact with the UARTS. # -# # -# 2. To quit the emulation: # -# 2.1 Select the pane in which QEMU runs (this one). # -# 2.2 CTRL-C to close qemu. # -######################################################### - -=== QEMU === diff --git a/emulation/qemu_multi_uart.sh b/emulation/qemu_multi_uart.sh deleted file mode 100644 index 7184161f..00000000 --- a/emulation/qemu_multi_uart.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env bash -# -# MIT License -# -# Copyright (c) 2018-2019 Andre Richter -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. -# - -tmux new-session -d -s raspi3 & -sleep 1 -tmux new-window -t raspi3:1 -tmux new-window -t raspi3:2 - -tmux send-keys -t raspi3:0 "clear; echo '=== MiniUart ==='; bash /dev/ptmx" C-m -tmux send-keys -t raspi3:1 "clear; printf '=== PL011 Uart ===\n\n';bash /dev/ptmx" C-m - -FIRST=$(ps aux | grep ptmx | sort | awk '{print $7}' | sed '1q;d') -SECOND=$(ps aux | grep ptmx | sort | awk '{print $7}' | sed '2q;d') - -tmux send-keys -t raspi3:2 "clear; cat /emulation/instructions.txt && qemu-system-aarch64 -M raspi3 -kernel kernel8.img -serial /dev/$SECOND -serial /dev/$FIRST && tmux kill-session" C-m - -tmux join-pane -s raspi3:0 -t 2 -tmux join-pane -s raspi3:1 -t 2 - -tmux select-pane -t 1 -tmux attach-session -t raspi3 diff --git a/utils/clean_all.rb b/utils/clean_all.rb index a579114b..e479a89a 100755 --- a/utils/clean_all.rb +++ b/utils/clean_all.rb @@ -1,4 +1,6 @@ #!/usr/bin/env ruby +# frozen_string_literal: true + # # MIT License # @@ -24,13 +26,12 @@ # require 'fileutils' +require_relative 'helpers/tutorial_folders.rb' def clean_all - crates = Dir['**/Cargo.toml'].sort! + crates = tutorial_folders crates.each do |x| - next if x.include?('raspi3_boot') - x = File.dirname(x) Dir.chdir(x) do system('make clean') || exit(1) diff --git a/utils/clippy_all.rb b/utils/clippy_all.rb index 98a123b6..8eff0b26 100755 --- a/utils/clippy_all.rb +++ b/utils/clippy_all.rb @@ -1,4 +1,6 @@ #!/usr/bin/env ruby +# frozen_string_literal: true + # # MIT License # @@ -25,7 +27,6 @@ def clippy_all crates = Dir['*/Cargo.toml'].sort! - crates.delete_if { |x| x.include?('bareminimum') } crates.each do |x| x = File.dirname(x) diff --git a/utils/fmt_all.rb b/utils/fmt_all.rb index 8b4e4c82..deb124b7 100755 --- a/utils/fmt_all.rb +++ b/utils/fmt_all.rb @@ -1,4 +1,6 @@ #!/usr/bin/env ruby +# frozen_string_literal: true + # # MIT License # diff --git a/utils/helpers/.rubocop.yml b/utils/helpers/.rubocop.yml new file mode 100644 index 00000000..2bc3e976 --- /dev/null +++ b/utils/helpers/.rubocop.yml @@ -0,0 +1,2 @@ +Style/WordArray: + Enabled: false diff --git a/utils/copyrighted.rb b/utils/helpers/copyrighted.rb similarity index 98% rename from utils/copyrighted.rb rename to utils/helpers/copyrighted.rb index b6924f70..7c74abfa 100644 --- a/utils/copyrighted.rb +++ b/utils/helpers/copyrighted.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # # MIT License # diff --git a/utils/make_panic_test.rb b/utils/helpers/tutorial_folders.rb similarity index 80% rename from utils/make_panic_test.rb rename to utils/helpers/tutorial_folders.rb index 33ee87fa..e9558d80 100755 --- a/utils/make_panic_test.rb +++ b/utils/helpers/tutorial_folders.rb @@ -1,4 +1,6 @@ #!/usr/bin/env ruby +# frozen_string_literal: true + # # MIT License # @@ -23,18 +25,19 @@ # SOFTWARE. # -def make_panic_test - crates = Dir['**/Cargo.toml'].sort! +require 'fileutils' + +EXCLUDES = [ + 'boot2rust', + 'bsp' +].freeze + +def tutorial_folders + crates = Dir['**/Cargo.toml'] - crates.each do |x| - next if x.include?('raspi3_boot') + EXCLUDES.each { |x| crates.delete_if { |y| y.include?(x) } } - x = File.dirname(x) - puts "\n" + x.to_s + ':' - Dir.chdir(x) do - system('make nm | grep panic_fmt') - end - end + crates.sort! end -make_panic_test if $PROGRAM_NAME == __FILE__ +puts tutorial_folders if $PROGRAM_NAME == __FILE__ diff --git a/utils/make_all.rb b/utils/make_all.rb index 5d53187f..9a601c7d 100755 --- a/utils/make_all.rb +++ b/utils/make_all.rb @@ -1,4 +1,6 @@ #!/usr/bin/env ruby +# frozen_string_literal: true + # # MIT License # @@ -23,12 +25,12 @@ # SOFTWARE. # +require_relative 'helpers/tutorial_folders.rb' + def make_all - crates = Dir['**/Cargo.toml'].sort! + crates = tutorial_folders crates.each do |x| - next if x.include?('raspi3_boot') - x = File.dirname(x) puts "\n\n" + x.to_s + "\n\n" Dir.chdir(x) do diff --git a/utils/ready_for_publish.rb b/utils/ready_for_publish.rb index beb6c2a4..d6d82aa4 100755 --- a/utils/ready_for_publish.rb +++ b/utils/ready_for_publish.rb @@ -1,4 +1,6 @@ #!/usr/bin/env ruby +# frozen_string_literal: true + # # MIT License # @@ -27,14 +29,12 @@ require_relative 'clean_all' require_relative 'clippy_all' require_relative 'fmt_all' require_relative 'make_all' -require_relative 'make_panic_test' require_relative 'sanity_checks' clean_all +fmt_all sanity_checks clippy_all clean_all -fmt_all make_all -make_panic_test diff --git a/utils/sanity_checks.rb b/utils/sanity_checks.rb index 51a4772f..4977499e 100755 --- a/utils/sanity_checks.rb +++ b/utils/sanity_checks.rb @@ -1,4 +1,6 @@ #!/usr/bin/env ruby +# frozen_string_literal: true + # # MIT License # @@ -23,7 +25,7 @@ # SOFTWARE. # -require_relative 'copyrighted' +require_relative 'helpers/copyrighted' def patched? crates = Dir['**/Cargo.toml'].sort!