99 lines
4.8 KiB
Plaintext
99 lines
4.8 KiB
Plaintext
**NOTE** I haven't yet tested direct boot through Raspberry's
|
|
proprietary bootloader.
|
|
|
|
Booting Yggdrasil on Raspberry Pi 4B with u-boot:
|
|
|
|
1. Clone u-boot sources and build with rpi_4_defconfig
|
|
|
|
**NOTE** I assume you have all the bootloader parts in the boot partition already.
|
|
If not, clone raspberry fw repo and copy the following files to the boot partition:
|
|
* bootcode.bin
|
|
* start4.elf
|
|
* all the .dtb files (a bcm2711-rpi-4-b.dtb should be enough though)
|
|
|
|
2. Copy u-boot.bin into the Pi's boot partition and edit the config.txt:
|
|
enable_uart=1
|
|
arm64_bit=1
|
|
kernel=u-boot.bin
|
|
|
|
3. Compile the OS with `cargo xtask --arch=aarch64 --board=raspi4b --release`
|
|
4. Copy the following files into some directory:
|
|
* target/aarch64-unknown-raspi4b/release/kernel.bin
|
|
* userspace/target/aarch64-unknown-yggdrasil/release/initrd.tar
|
|
5. cd into that directory and start a TFTP server of your choice. I used `uftpd`.
|
|
|
|
6. Connect an ethernet and serial to the Pi and run the following commands in u-boot shell:
|
|
|
|
### If using DHCP
|
|
$ dhcp
|
|
### If not using DHCP
|
|
$ env set ipaddr <RASPBERRY-IP-ADDR>
|
|
$ env set fdt_addr_r 0x11000000
|
|
$ env set initrd_addr_r 0x04000000
|
|
$ tftpboot ${initrd_addr_r} <BUILD-MACHINE-IP-ADDR>:initrd.tar
|
|
$ tftpboot ${loadaddr} <BUILD-MACHINE-IP-ADDR>:kernel.bin
|
|
$ load mmc 0:1 ${fdt_addr_r} bcm2711-rpi-4-b.dtb
|
|
$ fdt addr ${fdt_addr_r}
|
|
$ fdt resize
|
|
$ fdt memory 0x0 0x3C000000
|
|
$ booti ${loadaddr} ${initrd_addr_r}:<SIZE-PRINTED-WHEN-LOADING-INITRD> ${fdt_addr_r}
|
|
|
|
###### Assuming BUILD-MACHINE-IP-ADDR is 13.0.0.1 and RASPBERRY-IP-ADDR is 13.0.0.2, here's
|
|
###### a quick command for a development boot
|
|
###### (FIXME when initrd gets larger than 64MiB)
|
|
|
|
env set ipaddr 13.0.0.2; env set fdt_addr_r 0x11000000; env set initrd_addr_r 0x20000000; tftpboot ${initrd_addr_r} 13.0.0.1:initrd.img; tftpboot ${loadaddr} 13.0.0.1:yggdrasil-kernel.bin; load mmc 1:1 ${fdt_addr_r} bcm2711-rpi-4-b.dtb; fdt addr ${fdt_addr_r}; fdt resize; fdt memory 0x0 0x3C000000; booti ${loadaddr} ${initrd_addr_r}:0x4000000 ${fdt_addr_r}
|
|
|
|
dhcp;
|
|
env set initrd_addr_r 0x20000000; tftpboot ${initrd_addr_r} 192.168.88.10:initrd.img; tftpboot ${loadaddr} 192.168.88.10:yggdrasil-kernel.bin; load mmc 1:1 ${fdt_addr_r} bcm2711-rpi-4-b.dtb; fdt addr ${fdt_addr_r}; fdt resize; fdt memory 0x0 0x3C000000; booti ${loadaddr} ${initrd_addr_r}:0x4000000 ${fdt_addr_r}
|
|
|
|
|
|
Missing drivers:
|
|
|
|
No driver for Some("hvs@7e400000") ("brcm,bcm2711-hvs")
|
|
No driver for Some("i2c@7e804000") ("brcm,bcm2711-i2c")
|
|
also "brcm,bcm2835-i2c"
|
|
No driver for Some("usb@7e980000") ("brcm,bcm2835-usb")
|
|
No driver for Some("local_intc@40000000") ("brcm,bcm2836-l1-intc")
|
|
: avs-monitor@7d5d2000: probed
|
|
No driver for Some("thermal") ("brcm,bcm2711-thermal")
|
|
No driver for Some("dma@7e007000") ("brcm,bcm2835-dma")
|
|
No driver for Some("watchdog@7e100000") ("brcm,bcm2835-pm")
|
|
also "brcm,bcm2835-pm-wdt"
|
|
No driver for Some("rng@7e104000") ("brcm,bcm2711-rng200")
|
|
No driver for Some("pixelvalve@7e206000") ("brcm,bcm2711-pixelvalve0")
|
|
No driver for Some("pixelvalve@7e207000") ("brcm,bcm2711-pixelvalve1")
|
|
No driver for Some("pixelvalve@7e20a000") ("brcm,bcm2711-pixelvalve2")
|
|
No driver for Some("pwm@7e20c800") ("brcm,bcm2835-pwm")
|
|
No driver for Some("pixelvalve@7e216000") ("brcm,bcm2711-pixelvalve4")
|
|
No driver for Some("clock@7ef00000") ("brcm,brcm2711-dvp")
|
|
No driver for Some("interrupt-controller@7ef00100") ("brcm,bcm2711-l2-intc")
|
|
also "brcm,l2-intc"
|
|
No driver for Some("hdmi@7ef00700") ("brcm,bcm2711-hdmi0")
|
|
No driver for Some("i2c@7ef04500") ("brcm,bcm2711-hdmi-i2c")
|
|
No driver for Some("hdmi@7ef05700") ("brcm,bcm2711-hdmi1")
|
|
No driver for Some("i2c@7ef09500") ("brcm,bcm2711-hdmi-i2c")
|
|
No driver for Some("firmware") ("raspberrypi,bcm2835-firmware")
|
|
also "simple-mfd"
|
|
No driver for Some("clocks") ("raspberrypi,firmware-clocks")
|
|
No driver for Some("gpio") ("raspberrypi,firmware-gpio")
|
|
No driver for Some("reset") ("raspberrypi,firmware-reset")
|
|
No driver for Some("power") ("raspberrypi,bcm2835-power")
|
|
No driver for Some("mailbox@7e00b840") ("brcm,bcm2835-vchiq")
|
|
No driver for Some("phy") ("usb-nop-xceiv")
|
|
No driver for Some("gpu") ("brcm,bcm2711-vc5")
|
|
No driver for Some("mmc@7e340000") ("brcm,bcm2711-emmc2")
|
|
No driver for Some("arm-pmu") ("arm,cortex-a72-pmu")
|
|
also "arm,armv8-pmuv3"
|
|
No driver for Some("cpu@0") ("arm,cortex-a72")
|
|
No driver for Some("cpu@1") ("arm,cortex-a72")
|
|
No driver for Some("cpu@2") ("arm,cortex-a72")
|
|
No driver for Some("cpu@3") ("arm,cortex-a72")
|
|
No driver for Some("pcie@7d500000") ("brcm,bcm2711-pcie")
|
|
No driver for Some("ethernet@7d580000") ("brcm,bcm2711-genet-v5")
|
|
No driver for Some("mdio@e14") ("brcm,genet-mdio-v5")
|
|
No driver for Some("leds") ("gpio-leds")
|
|
No driver for Some("wifi-pwrseq") ("mmc-pwrseq-simple")
|
|
No driver for Some("sd_io_1v8_reg") ("regulator-gpio")
|
|
No driver for Some("sd_vcc_reg") ("regulator-fixed")
|