123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 |
- Raspberry Pi
- Intro
- =====
- These instructions apply to all models of the Raspberry Pi:
- - the original models A and B,
- - the "enhanced" models A+ and B+,
- - the model CM (aka Raspberry Pi Compute Module).
- - the model Zero (aka Raspberry Pi Zero)
- - the model Zero W (aka Raspberry Pi Zero W)
- - the model Zero 2 W (aka Raspberry Pi Zero 2 W)
- - the model B2 (aka Raspberry Pi 2)
- - the model B3 (aka Raspberry Pi 3).
- - the model CM3 (aka Raspberry Pi Compute Module 3).
- - the model CM3+ (aka Raspberry Pi Compute Module 3+).
- - the model B4 (aka Raspberry Pi 4).
- - the model 400 (aka Raspberry Pi 400).
- - the model CM4 (aka Raspberry Pi Compute Module 4 and IO Board).
- - the model CM4s (aka Raspberry Pi Compute Module 4s).
- - the model B5 (aka Raspberry Pi 5).
- - the model 500 (aka Raspberry Pi 500).
- - the model CM5 (aka Raspberry Pi Compute Module 5 and IO Board).
- How to build it
- ===============
- Configure Buildroot
- -------------------
- There are several Raspberry Pi defconfig files in Buildroot, one for
- each major variant, which you should base your work on:
- For models A, B, A+, B+ and CM:
- $ make raspberrypi_defconfig
- For model Zero (model A+ in smaller form factor):
- $ make raspberrypi0_defconfig
- or for model Zero W (model Zero with wireless LAN and Bluetooth):
- $ make raspberrypi0w_defconfig
- For model Zero 2 W (model B3 in smaller form factor):
- $ make raspberrypizero2w_defconfig
- or for model Zero 2 W (model B3 in smaller form factor, 64-bit):
- $ make raspberrypizero2w_64_defconfig
- For model 2 B:
- $ make raspberrypi2_defconfig
- or for model 2 B (Rev 1.2, model B3 without wireless LAN and Bluetooth, 64 bit):
- $ make raspberrypi2_64_defconfig
- For model 3 B, B+, CM3 and CM3+:
- $ make raspberrypi3_defconfig
- or for model 3 B, B+, CM3 and CM3+ (64 bit):
- $ make raspberrypi3_64_defconfig
- For model 4 B, 400, CM4 and CM4s:
- $ make raspberrypi4_defconfig
- or for model 4 B, 400, CM4 and CM4s (64 bit):
- $ make raspberrypi4_64_defconfig
- For model CM4 (on IO Board):
- $ make raspberrypicm4io_defconfig
- or for CM4 (on IO Board - 64 bit):
- $ make raspberrypicm4io_64_defconfig
- For model 5 B and 500:
- $ make raspberrypi5_defconfig
- For model CM5 (on IO Board):
- $ make raspberrypicm5io_defconfig
- Build the rootfs
- ----------------
- Note: you will need to have access to the network, since Buildroot will
- download the packages' sources.
- You may now build your rootfs with:
- $ make
- (This may take a while, consider getting yourself a coffee ;-) )
- Result of the build
- -------------------
- After building, you should obtain this tree:
- output/images/
- +-- bcm2708-rpi-b-rev1.dtb [1]
- +-- bcm2708-rpi-b.dtb [1]
- +-- bcm2708-rpi-b-plus.dtb [1]
- +-- bcm2708-rpi-cm.dtb [1]
- +-- bcm2708-rpi-zero.dtb [1]
- +-- bcm2708-rpi-zero-w.dtb [1]
- +-- bcm2709-rpi-2-b.dtb [1]
- +-- bcm2710-rpi-2-b.dtb [1]
- +-- bcm2710-rpi-3-b.dtb [1]
- +-- bcm2710-rpi-3-b-plus.dtb [1]
- +-- bcm2710-rpi-cm3.dtb [1]
- +-- bcm2710-rpi-zero-2-w.dtb [1]
- +-- bcm2711-rpi-4-b.dtb [1]
- +-- bcm2711-rpi-400.dtb [1]
- +-- bcm2711-rpi-cm4.dtb [1]
- +-- bcm2711-rpi-cm4s.dtb [1]
- +-- bcm2712-rpi-5-b.dtb [1]
- +-- bcm2712d0-rpi-5-b.dtb [1]
- +-- bcm2712-rpi-500.dtb [1]
- +-- bcm2712-rpi-cm5-cm5io [1]
- +-- bcm2712-rpi-cm5l-cm5io [1]
- +-- boot.vfat
- +-- rootfs.ext4
- +-- rpi-firmware/
- | +-- bootcode.bin [2]
- | +-- cmdline.txt
- | +-- config.txt
- | +-- fixup.dat [3]
- | +-- fixup4.dat [4]
- | +-- start.elf [3]
- | +-- start4.elf [4]
- | `-- overlays/ [5]
- +-- sdcard.img
- +-- Image [1]
- `-- zImage [1]
- [1] Not all of them will be present, depending on the RaspberryPi
- model you are using.
- [2] Only for the Raspberry Pi 1, 2, 3, Zero, Zero W and Zero 2 W. The Raspberry
- Pi 4, 400, 5 and the Compute Module 4, 4s and 5 load the second stage
- bootloader from a SPI flash EEPROM.
- [3] Only for the Raspberry Pi 1, 2, 3, Zero and Zero 2.
- [4] Only for the Raspberry Pi 4, 400, Compute Module 4 and 4s.
- [5] Only for the Raspberry Pi installing device-tree overlays. The Raspberry Pi
- with Bluetooth connectivity (Zero W, Zero 2 W, 3, 4, 400, Compute Module 4
- and 4s) use the miniuart-bt overlay to enable UART0 for the serial console;
- the Bluetooth uses the mini-UART instead. Alternative would be to disable
- the serial console in cmdline.txt and /etc/inittab.
- How to write the SD card
- ========================
- Once the build process is finished you will have an image called "sdcard.img"
- in the output/images/ directory.
- Copy the bootable "sdcard.img" onto an SD card with "dd":
- $ sudo dd if=output/images/sdcard.img of=/dev/sdX
- Insert the SDcard into your Raspberry Pi, and power it up. Your new system
- should come up now and start two consoles: one on the serial port on
- the P1 header, one on the HDMI output where you can login using a USB
- keyboard.
- How to write to CM4 eMMC memory
- ===============================
- For CM4 modules without eMMC memory see above for booting from SD card,
- for CM4 modules with eMMC memory proceed as following:
- - fit jumper on IO Board header J2 to disable eMMC boot
- - connect IO Board micro USB port (J11 USB slave) to your host linux system
- - power up CM4/IO Board (lsusb command should show a '0a5c:2711 Broadcom Corp.
- BCM2711 Boot' device)
- - run 'sudo ./host/bin/rpiboot', output should look like the following:
- Waiting for BCM2835/6/7/2711...
- Loading embedded: bootcode4.bin
- Sending bootcode.bin
- Successful read 4 bytes
- Waiting for BCM2835/6/7/2711...
- Loading embedded: bootcode4.bin
- Second stage boot server
- Loading embedded: start4.elf
- File read: start4.elf
- Second stage boot server done
- - a USB mass storage device should show up (the CM4 eMMC memory), proceed
- as described above to copy sdcard.img to it
- - power down CM4/IO Board
- - remove jumper on IO Board header J2 to re-enable eMMC boot
- - power up CM4/IO Board
- CM5 debug UART
- ==============
- The debug UART header is not assembled on the Compute Module 5.
- 2.23. Debug UART
- Space is provided for the user to fit a debug UART connector. This
- connector provides the same functionality as Raspberry Pi 5. The
- connector is a three-pin 1mm pitch JST-SH connector, Part number
- BM03B-SRSS-TB. The signals are replicated on the bottom as test points.
- Appendix B: Test Points
- | Reference | X | Y | NAME |
- | TP35 | 11 | 37.8 | DEBUG_UART_TX |
- | TP36 | 8.5 | 37.1 | DEBUG_UART_RX |
- Debug UART
- TP35 and TP36 are a TX and RX of the debug UART. TP46 should be used as
- the ground. It is very useful to have access to these pins during
- programming and initial boot.
- See https://datasheets.raspberrypi.com/cm5/cm5-datasheet.pdf.
- The signals are not wired up to 100-pin headers either. And thus, it is
- impossible to output early boot traces in the EEPROM firmware without
- assembling a JST-SH connector (or using the test points).
|