version 1.63, 2017/10/22 00:39:08
|
version 1.85, 2018/11/06 02:38:43
|
Line 2
|
Line 2
|
|
|
This page attempts to document and coordinate efforts towards NetBSD/evbarm on [Raspberry Pi](http://www.raspberrypi.org). All board variants are supported. |
This page attempts to document and coordinate efforts towards NetBSD/evbarm on [Raspberry Pi](http://www.raspberrypi.org). All board variants are supported. |
|
|
Initial, limited, Raspberry Pi support was introduced in NetBSD 6.0. NetBSD 7.0 adds complete support for the board, along with introducing support for the quad-core Raspberry Pi 2 board. Raspberry Pi 3 support was added for NetBSD 8, and backported to NetBSD 7 in July of 2017. |
Initial, limited, Raspberry Pi support was introduced in NetBSD 6.0. NetBSD 7.0 adds complete support for the board, along with introducing support for the quad-core Raspberry Pi 2 board. Raspberry Pi 3 support was added for NetBSD 8, and backported to NetBSD 7 in July of 2017. (This page assumes those using NetBSD 7 are using 7.2, or the netbsd-7 branch after mid 2018.) |
|
|
[[images/raspberrypi.jpg]] |
[[images/raspberrypi.jpg]] |
|
|
Line 12 Initial, limited, Raspberry Pi support w
|
Line 12 Initial, limited, Raspberry Pi support w
|
|
|
# What works (and what doesn't yet) |
# What works (and what doesn't yet) |
|
|
## NetBSD 7 before July, 2017 |
## NetBSD 7 and NetBSD 8 |
|
|
- RaspberryPi 1, and 2 (including SMP) |
- RaspberryPi 1, 2, 3 (except Pi 3 builtin WiFi and bluetooth) |
- multi-user boot with root on SD card |
- multiple processors on 2/3 |
|
- boots normally to multiuser, with FAT32 boot partition on uSD |
|
- root filesystem can be uSD or USB-attached mass storage |
- serial or graphics console (with EDID query / parsing) |
- serial or graphics console (with EDID query / parsing) |
|
- X11 via HDMI |
|
- GPU (VCHIQ) - 3D and video decode. man page missing. |
|
- USB host controller - dwctwo(4) and most devices work |
|
- USB Ethernet - usmsc(4) |
- DMA controller driver and sdhc(4) support |
- DMA controller driver and sdhc(4) support |
|
- RNG |
- Audio: works. man page missing. |
- Audio: works. man page missing. |
- I²C: works, could use enhancements, man page |
|
- GPIO |
- GPIO |
- RNG |
- I²C: works, could use enhancements, man page |
- SPI: could use enhancements, man page |
- SPI: could use enhancements, man page |
- GPU (VCHIQ) - 3D and video decode. man page missing. |
|
- USB (host) - dwctwo(4) |
|
- USB Ethernet - usmsc(4) |
|
- X windows. |
|
|
|
## NetBSD 7 after July, 2017 and NetBSD 8 |
|
|
|
- Raspberry Pi 3 (excluding WiFi and bluetooth) |
|
|
|
## NetBSD current |
## NetBSD current |
|
|
- Raspberry Pi 3 bluetooth |
- Raspberry Pi 3 builtin bluetooth |
- Raspberry Pi 3 new SD host controller driver |
- Raspberry Pi 3 new SD host controller driver |
|
|
## What needs work |
## What needs work |
|
|
- USB (host); isochronous transfers. |
- USB (host); isochronous transfers. |
- WiFi |
- Raspberry Pi 3 builtin WiFi |
|
|
# CPU types |
# CPU types |
|
|
Note that one can also use code for earlier models on later models. |
|
|
|
- Raspberry Pi 1 uses "earmv6hf". |
- Raspberry Pi 1 uses "earmv6hf". |
|
- Raspberry Pi 0 uses "\todo". |
- Raspberry Pi 2 uses "earmv7hf". |
- Raspberry Pi 2 uses "earmv7hf". |
- Raspberry Pi 3 uses "earmv7hf". (NetBSD does not yet have 64-bit support.) |
- Raspberry Pi 3 uses "earmv7hf". |
|
- Raspberry Pi 0W uses "\todo". |
|
|
|
Note that one can run earmv6hf code on the 2 and 3. See also |
|
[[NetBSD/aarch64|aarch64]] for running the Pi 2/3 in 64-bit mode. |
|
|
# Installation |
# Installation |
|
|
## SD card structure |
## SD card structure |
|
|
The Raspberry Pi looks for firmware and a kernel on the first FAT32 |
The Raspberry Pi looks for firmware and kernel.img on the first FAT32 partition of the uSD card. A separate kernel (kernel7.img) is used on RPI2 and RPI3. |
partition of the uSD card. The NetBSD kernel will then use the FFS |
|
partition as the root filesystem. |
The NetBSD kernel will then use the FFS partition as the root filesystem. |
|
|
A 2 GB card is the smallest workable size. The NetBSD filesystem will |
A 2 GB card is the smallest workable size. The NetBSD filesystem will be expanded to fit. |
be expanded to fit on larger cards. |
|
|
|
## Choosing a version |
## Choosing a version |
|
|
First, decide if you want to install a formal release (7.1), a stable |
First, decide if you want to install a formal release (7.2 or 8.0), a stable branch build (netbsd-7, netbsd-8), or NetBSD-current. For people who don't know how to choose among those, 8.0 or netbsd-8 is probably best. |
branch build (netbsd-7, netbsd-8), or current. Note that 7.1 predates |
|
Raspberry Pi 3 support. For people who don't know how to choose among |
See also "ebijun's image", below, which is NetBSD-current and includes packages. |
those, netbsd-8 is probably best. |
|
|
|
## Getting bits to install |
## Getting bits to install |
|
|
You can either build a release yourself with build.sh, or get one from the NetBSD FTP servers. |
You can either build a release yourself with build.sh, or get one from the NetBSD FTP servers. |
|
|
Both will provide rpi.img.gz and rpi_inst.img.gz. Each is an image to |
Both will provide rpi.img.gz and rpi_inst.img.gz. Each is an image to be written to a uSD card, and has a FAT32 partition for booting. In rpi.img.gz, there is also an FFS partition for NetBSD. |
be written to a uSD card, and has a FAT32 partition for booting. In |
|
rpi.img.gz, there is also an FFS partition for NetBSD. |
|
|
|
### Building yourself |
### Building yourself |
|
|
Getting sources and building a release with build.sh is not special for evbarm. |
Getting sources and building a release with build.sh is not special for evbarm. However, the evbarm port has a very large number of CPU types, compared to i386 and amd64 which have one. The standard approach is to use -m to define MACHINE and -a to define MACHINE_ARCH. build.sh supports aliases that can be passed as a MACHINE value, but denote both MACHINE and a MACHINE_ARCH. The third line uses an alias and is equal to the second in effect, for RPI2/3. |
Pick a CPU type alias and pass it to build.sh with -m. Examples: |
|
- ./build.sh -m earmv6hf -u release |
|
- ./build.sh -m evbarm -a earmv6hf -u release |
- ./build.sh -m evbarm -a earmv6hf -u release |
- ./build.sh -m evbarm -a earmv7hf -u release |
- ./build.sh -m evbarm -a earmv7hf -u release |
|
- ./build.sh -m earmv7hf-el -u release |
|
|
|
Consider setting RELEASEMACHINEDIR if you wish to build multiple MACHINE_ARCH values on the same system; see build.sh. |
|
|
### NetBSD FTP servers |
### NetBSD autobuild HTTPS/FTP servers |
|
|
NetBSD provides nightly builds on [nyftp.netbsd.org](http://nyftp.netbsd.org/pub/NetBSD-daily/). These are equivalent to building yourself. |
NetBSD provides nightly builds on [nyftp.netbsd.org](https://nyftp.netbsd.org/pub/NetBSD-daily/). These are equivalent to building yourself. The next directory level is the branch being built (netbsd-7, netbsd-8, HEAD, and more), plus optionally things like compiler type. It is followed by date/time, e.g. "HEAD/201811051650Z"; once a build is complete the symlink "latest" is adjusted to point to it. The next level is "${MACHINE}-${MACHINE_ARCH}", e.g. "evbarm-earmv7hf", and multiple combinations are provided. |
|
|
- The 'evbarm-earmv6hf/binary/gzimg/' directory contains an rpi.img file that can be used as a single image for both boards. |
- The 'evbarm-earmv6hf/binary/gzimg/' directory contains an rpi.img file that will run on any of the RPI boards. |
- The 'evbarm-earmv7hf/binary/gzimg/' directory contains an armv7.img file that is optimized for Raspberry Pi 2. |
- The 'evbarm-earmv7hf/binary/gzimg/' directory contains an armv7.img file that uses the armv7 instruction set, and thus can run only on the Raspberry Pi 2/3, but is also faster than rpi.img. |
- The stable build directory will be under netbsd-7/YYYYMMDDHHMMZ/ (for example, http://nyftp.netbsd.org/pub/NetBSD-daily/netbsd-7/201710201440Z/evbarm-earmv6hf/binary/gzimg) |
|
- The not-yet-released stable build directory will be under netbsd-8/YYYYMMDDHHMMZ/ (for example, http://nyftp.netbsd.org/pub/NetBSD-daily/netbsd-8/201710211010Z/evbarm-earmv6hf/binary/gzimg/) |
|
- The HEAD/current directory build will be under HEAD/YYYYMMDDHHMMZ/ (for example, http://nyftp.netbsd.org/pub/NetBSD-daily/HEAD/201710202210Z/evbarm-earmv7hf/binary/gzimg/) |
|
|
|
## Installing to uSD |
An example URL, arguably the standard approach for beginners, is https://nyftp.netbsd.org/pub/NetBSD-daily/netbsd-8/latest/evbarm-earmv7hf/binary/gzimg/ |
|
|
Once you have rpi.img.gz, put it on a uSD card using gunzip and dd, for example: |
## Preparing a uSD card |
|
|
|
Once you have rpi.img.gz (or rpi_inst), put it on a uSD card using gunzip and dd, for example: |
|
|
- gunzip rpi.img.gz |
- gunzip rpi.img.gz |
- dd if=rpi.i7mg of=/dev/disk1 |
- dd if=rpi.img of=/dev/disk1 |
|
|
### Serial Console |
### Serial Console |
|
|
Line 112 edit cmdline.txt and remove '"console=fb
|
Line 110 edit cmdline.txt and remove '"console=fb
|
|
|
In minicom, run "minicom -s" and set hardware flow control to "no" |
In minicom, run "minicom -s" and set hardware flow control to "no" |
|
|
|
### Enabling ssh |
|
|
|
If you want to enable ssh with the standard image, so that you can log in over the net without either a serial or HDMI console, mount the ffs partition, place /root/.ssh/authorized_keys, uncomment PermitRootLogin in /etc/ssh/sshd_config, and comment out the rc_configure=NO in /etc/rc.conf. Besides having to find the IP address, you will have to wait for the partition resizing and reboot. |
|
|
### Installation with sshramdisk image |
### Installation with sshramdisk image |
|
|
build.sh (and hence the FTP site) also creates an image 'rpi_inst.img.gz' specifically for installation without HDMI or a serial console. To use this method, write that image to a uSD card as above, and then: |
build.sh (and hence the FTP site) also creates an image 'rpi_inst.img.gz' specifically for installation without HDMI or a serial console. Note that this image is much smaller and that you will need to fetch the sets over the network. To use this method, write that image to a uSD card as above, and then: |
|
|
- Ensure that you have a lan with a DHCP server. |
- Ensure that you have a lan with a DHCP server. |
- Connect an Ethernet cable from the RPI to the LAN. |
- Connect an Ethernet cable from the RPI to the LAN. |
Line 133 every few weeks.
|
Line 135 every few weeks.
|
|
|
- [https://github.com/ebijun/NetBSD/blob/master/RPI/RPIimage/Image/README](https://github.com/ebijun/NetBSD/blob/master/RPI/RPIimage/Image/README) |
- [https://github.com/ebijun/NetBSD/blob/master/RPI/RPIimage/Image/README](https://github.com/ebijun/NetBSD/blob/master/RPI/RPIimage/Image/README) |
|
|
|
# Maintaining a system |
|
|
|
## vcgencmd |
|
|
|
The program vcgencmd, referenced in the boot section, can be found in pkgsrc/misc/raspberrypi-userland. |
|
|
## Updating the kernel |
## Updating the kernel |
|
|
- Build a new kernel, e.g. using build.sh. It will tell you where the ELF version of the kernel is, e.g. |
- Build a new kernel, e.g. using build.sh. It will tell you where the ELF version of the kernel is, e.g. |
Line 142 every few weeks.
|
Line 150 every few weeks.
|
/Users/feyrer/work/NetBSD/cvs/src-current/obj.evbarm-Darwin-XXX/sys/arch/evbarm/compile/RPI2/netbsd |
/Users/feyrer/work/NetBSD/cvs/src-current/obj.evbarm-Darwin-XXX/sys/arch/evbarm/compile/RPI2/netbsd |
... |
... |
|
|
- Besides the "netbsd" kernel in ELF format, there is also a "netbsd.bin" kernel that is in a format that the Raspberry can boot. |
- Besides the "netbsd" kernel in ELF format, there is also a "netbsd.img" (for current) or "netbsd.bin" (for 7 and 8) kernel that is in a format that the Raspberry can boot. |
- Depending on your hardware version, copy this either to /boot/kernel.img (First generation Pi, Pi Zero hardware) or to /boot/kernel7.img (Pi 2, Pi 3 hardware) |
- Depending on your hardware version, copy this either to /boot/kernel.img (First generation Pi, Pi Zero hardware) or to /boot/kernel7.img (Pi 2, Pi 3 hardware) |
- reboot |
- reboot |
|
|
|
## Updating the firmware |
|
|
|
A section below describes the process of updating NetBSD's copy of the firmware from upstream, with testing, by NetBSD developers. This section is about updating a system's firmware from the firmware in a version of NetBSD. |
|
|
|
TODO: Explain where the firmware is in the source tree, and if it is in the installed system image (such as /usr/mdec). Explain any particular cautions. |
|
|
|
## Booting |
|
|
|
The device boots by finding a file "bootcode.bin". The primary location is a FAT32 partition on the uSD card, and an additional location is on a USB drive. See the [upstream documentation on booting](https://www.raspberrypi.org/documentation/hardware/raspberrypi/bootmodes/) and read all the subpages. |
|
|
|
The standard approach is to use a uSD card, with a fdisk partition table containing a FAT32 partition marked active, and a NetBSD partition. The NetBSD partition will then contain a disklabel, pointing to an FFS partition (a), a swap paritiion (b) and the FAT32 boot partition mounted as /boot (e). The file /boot/cmdline.txt has a line to set the root partition. |
|
|
|
One wrinkle in the standard approach is that the disk layout is "boot swap /", but the NetBSD fdisk partition starts at the location of /. The / partition can hold a disklabel, while swap cannot. It is normal to have swap after / (and thus within the fdisk partition), but the arrangement used permits growing / on first boot, for the typical case where a larger uSD is used, compared to the minimum image size. |
|
|
|
An alternate approach is to have the boot FAT32 partition as above, but to have the entire system including root on an external disk. This is configured by changing root=ld0a to root=sd0a or root=dk0 (depending on disklabel/GPT). Besides greater space, part of the point is to avoid writing to the uSD card. |
|
|
|
A third approach, workable on the Pi 3 only, is to configure USB host booting (already enableed on the 3+; see the upstream documentation) and have the boot partition also on the external device. In this case the external device must have an MBR because the hardware's first-stage boot does not have GPT support. In theory the [procedure to program USB host boot mode](https://www.raspberrypi.org/documentation/hardware/raspberrypi/bootmodes/msd.md) will function on a NetBSD system because the programming is done by bootcode.bin. |
|
\todo Confirm that putting program_usb_boot_mode=1 in config.txt and booting works to program the OTP bit. Confirm that one can then boot NetBSD from external USB. |
|
|
|
\todo Explain USB enumeration and how to ensure that the correct boot and root devices are found if one has e.g. a small SSD for the system and a big disk. |
|
|
# Wireless Networking |
# Wireless Networking |
|
|
Note that the built-in WiFi in the RPI3 is not yet supported. |
Note that the built-in WiFi in the RPI3 is not yet supported. USB WiFi interfaces (that work on NetBSD in general) should all work. |
|
|
- A Realtek 802.11n USB adaptor configures as urtwn(4). |
- A Realtek 802.11n USB adaptor configures as urtwn(4). |
- Configure with wpa_supplicant in /etc/rc.conf - |
- Configure with wpa_supplicant in /etc/rc.conf - |
Line 196 $ retroarch --appendconfig gamepad.cfg -
|
Line 225 $ retroarch --appendconfig gamepad.cfg -
|
|
|
These notes are for people working on improvements to RPI support in NetBSD. |
These notes are for people working on improvements to RPI support in NetBSD. |
|
|
## Updating the firmware |
## Updating the firmware version in the NetBSD sources |
|
|
You probably don't want to do this. Firmware updates can break things, |
(Note that trying new firmware may result in a non-bootable system, so |
and the latest firmware that's been tested is already included in the |
be prepared to recover the bootable media with another system.) |
NetBSD build you installed. |
|
|
Upstream firmware releases are |
|
[on GitHub](https://github.com/raspberrypi/firmware/releases). |
|
Copy all files except `kernel*.img` into `/boot` and reboot. |
|
|
If you're feeling adventurous (or are the port maintainer), here's what |
New firmware should pass all of the following tests before being committed to NetBSD. |
to test whenever you try new firmware: |
|
|
|
- Audio |
- Audio |
- OMXPlayer (and [[!template id=man name="vchiq"]]) |
- OMXPlayer (and [[!template id=man name="vchiq"]]) |
- Serial/framebuffer console |
- Serial/framebuffer console |
- CPU frequency scaling |
- CPU frequency scaling |
|
|
That goes for all of `rpi[0123]`. |
Tests shoudl be run on all of `rpi[0123]`. |
|
|
Upstream firmware releases are |
|
[on GitHub](https://github.com/raspberrypi/firmware/releases). |
|
Copy all files except `kernel*.img` into `/boot` and reboot. |
|