Packages
nerves_system_br
1.26.0
1.34.0
1.33.9
1.33.8
1.33.7
1.33.6
1.33.5
1.33.4
1.33.3
1.33.2
1.33.1
1.33.0
1.32.5
1.32.4
1.32.3
1.32.2
1.32.1
1.32.0
1.31.7
1.31.6
1.31.5
1.31.4
1.31.3
1.31.2
1.31.1
1.31.0
1.30.1
1.30.0
1.29.3
1.29.2
1.29.1
1.29.0
1.28.3
1.28.2
1.28.1
1.28.0
1.27.3
1.27.2
1.27.1
1.27.0
1.26.1
1.26.0
1.25.3
1.25.2
1.25.1
1.25.0
1.24.1
1.24.0
1.23.3
1.23.2
1.23.1
1.23.0
1.22.8
1.22.7
1.22.6
1.22.5
1.22.4
1.22.3
1.22.2
1.22.1
1.22.0
1.21.6
1.21.5
1.21.4
1.21.3
1.21.2
1.21.1
1.21.0
1.20.6
1.20.5
1.20.4
1.20.3
1.20.2
1.20.1
1.20.0
1.19.1
1.19.0
1.18.6
1.18.5
1.18.4
1.18.3
1.18.2
1.18.1
1.18.0
1.17.4
1.17.3
1.17.2
1.17.1
1.17.0
1.16.5
1.16.4
1.16.3
1.16.2
1.16.1
1.16.0
1.15.2
1.15.1
1.15.0
1.14.5
1.14.4
1.14.3
1.14.2
1.14.1
1.14.0
1.13.8
1.13.7
1.13.6
1.13.5
1.13.4
1.13.3
1.13.2
1.13.1
1.13.0
1.12.4
1.12.3
1.12.2
1.12.1
1.12.0
1.12.0-rc.0
1.11.4
1.11.3
1.11.2
1.11.1
1.11.0
1.10.3
1.10.2
1.10.1
1.10.0
1.9.5
1.9.4
1.9.3
1.9.2
1.9.1
1.9.0
1.8.6
1.8.5
1.8.4
1.8.3
1.8.2
1.8.1
1.8.0
1.7.3
1.7.2
1.7.1
1.7.0
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.6
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.2
1.2.1
1.2.0
1.1.0
1.0.1
1.0.0
1.0.0-rc.4
1.0.0-rc.3
1.0.0-rc.2
1.0.0-rc.1
1.0.0-rc.0
0.17.0
0.16.4
0.16.3
0.16.2
0.16.1-2017-11
0.16.0-2017-11
0.15.1
0.15.0
0.14.1
0.14.0
0.13.9
0.13.8
0.13.7
0.13.6
0.13.5
0.13.4
retired
0.13.3
0.13.2
0.13.0
0.12.1
0.12.0
0.11.1
0.11.0
0.10.1
0.10.0
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.2
0.4.1
Nerves System BR - Buildroot based build platform for Nerves Systems
Current section
Files
Jump to
Current section
Files
nerves_system_br
README.md
README.md
# nerves_system_br[](https://circleci.com/gh/nerves-project/nerves_system_br)[](https://hex.pm/packages/nerves_system_br)Nerves System BR provides the common logic for building Nerves Systems using[Buildroot](https://buildroot.org/). If you're new to Nerves, you probably don'twant to look at this repository. Please check out the official[documentation](https://hexdocs.pm/nerves/getting-started.html).For examples of using `nerves_system_br`, take a look at the officiallysupported hardware systems:* [Beaglebones](https://github.com/nerves-project/nerves_system_bbb)* [Raspberry Pi Zero](https://github.com/nerves-project/nerves_system_rpi0)* [Raspberry Pi Zero, A+, B and B+](https://github.com/nerves-project/nerves_system_rpi)* [Raspberry Pi 2 Model B](https://github.com/nerves-project/nerves_system_rpi2)* [Raspberry Pi 3 Model B and B+](https://github.com/nerves-project/nerves_system_rpi3)* [Raspberry Pi 3 Model A+](https://github.com/nerves-project/nerves_system_rpi3a)* [Raspberry Pi 4 Model B](https://github.com/nerves-project/nerves_system_rpi4)* [OSD32MP1](https://github.com/nerves-project/nerves_system_osd32mp1)* [Generic x86_64](https://github.com/nerves-project/nerves_system_x86_64)* [GRiSP 2](https://github.com/nerves-project/nerves_system_grisp2)We only officially support easily obtained hardware, but that doesn't mean thatNerves only works on these boards. If it's possible to use Buildroot to create aLinux root filesystem for your hardware, then it's possible that Nerves can bemade to run. The general steps to supporting a new board are the following:1. Create a minimal Buildroot `defconfig` that boots and runs on the board. This doesn't use Nerves at all.2. If the `defconfig` requires a writable root filesystem, figure out how to make it read-only. This should be pretty easy unless you're using `systemd`. Since Nerves uses a custom init system, keep in mind for later that `systemd` may be helping initialize something on the board that will need to be done manually later.3. Take a look at the Flash memory layout and compare that to the layouts used in one of the supported systems. We use [fwup](https://github.com/fhunleth/fwup) to create images. There's a lot of variety in how one can lay out Flash memory and deal with things like failbacks. At this point, just see if you can get `fwup` to create an image.4. Clone one of the official systems that seems close for your board. Update the `nerves_defconfig` based on the Buildroot `defconfig` that works.5. Build the system using `mix` or manually by running the `create-build.sh` script.## Non-mix way of using NervesIt is highly recommended that all users follow the official documentation onusing systems. However, advanced users have found the information to be helpful,so it hasn't been deleted. This ONLY works on Linux.After you have manually built Nerves, activate it before running any Elixir orErlang build tools on your application. source build/nerves-env.shIn the above line, substitute `build` for whatever directory was used to buildthe Nerve System. If you downloaded a pre-built Nerves System, source the`nerves-env.sh` inside of it. When using a rebuilt system, the crosscompilertoolchain must also be downloaded. See the[toolchains project](https://github.com/nerves-project/toolchains). As statedbefore, the Nerves `mix` integration takes care of this for you.This step has to be done each time you launch a shell. The key environmentsettings updated by the script are the `PATH` variable and a set of variablesthat direct build tools such as `rebar`, `mix`, `relx`, and other `Makefiles` toinvoke the cross-compiler.## Enabling a native library or applicationBuildroot comes with support for a zillion C libraries and applications. Nervesenables the minimum number of packages to keep the base system image small.Examples of packages that you may want to add are things like graphics and UIframeworks, command line utilities, databases, and file system utilities. Tobrowse available packages, go to your build directory and run: make menuconfigIf you can't find a package, try typing `/` to search for it. After you haveenabled a package, save your changes and exit menuconfig. The changes are savedto the `.config` file in your build directory. To save them to your system's`nerves_defconfig` file, run `make savedefconfig`.Enabling an application or library is only part of the process to getting it towork. If that package needs to write to the filesystem, it may need to beconfigured to write to `/root` or another location since Nerves keeps the rootfilesystem readonly. This is done on purpose to avoid corrupting the rootfilesystem.Be aware that Buildroot caches the root filesystem between builds and that whenyou deselect a configuration option, it will not disappear from the Nerves rootfile system image until a clean build.### Enabling a Linux kernel driverIf you have a piece of hardware that requires a special Linux driver that isn'tenabled by default, run: make linux-menuconfigThis will let you config kernel options. When done, save and exit. Like before,the configuration is saved to your build directory. To make the changepermanent, run `make linux-update-defconfig`.### Enabling simple commandline utilitiesIf you're looking for many standard commandline utilities like `ls(1)`, `dd(1)`,`cat(1)`, etc., they'll be in a package called Busybox. Nerves disables most ofthem since it uses the Erlang, Elixir, or LFE shells. To enable more of them,run: make busybox-menuconfigJust like the other configuration menus, when you exit menuconfig, the optionswill only be stored in your build directory. To make them permanent, save the`.config` (see `build/busybox-*/.config`) to your configuration directory. Youwill need to run `make menuconfig` to update the location of the Busyboxconfiguration.