NixOS on ARM: Difference between revisions
imported>Dezgeg Document Wandboard |
imported>Samueldr m →Building u-boot from your NixOS PC: New section. |
||
Line 169: | Line 169: | ||
== Porting NixOS to new boards == | == Porting NixOS to new boards == | ||
The easy way (if you're lucky) | === The easy way === | ||
''(if you're lucky)'' | |||
If your board is an ARMv7 board supported by multi_v7_defconfig and you have access to U-Boot on the board, getting <code>sd-image-armv7l-linux.img</code> to boot is the easiest option: | If your board is an ARMv7 board supported by multi_v7_defconfig and you have access to U-Boot on the board, getting <code>sd-image-armv7l-linux.img</code> to boot is the easiest option: | ||
Line 175: | Line 177: | ||
* If you're lucky and your U-Boot build comes with the extlinux.conf support built in, the image boots out-of-the-box. This is the case for all (upstream) Allwinner and Tegra U-Boots, for instance. | * If you're lucky and your U-Boot build comes with the extlinux.conf support built in, the image boots out-of-the-box. This is the case for all (upstream) Allwinner and Tegra U-Boots, for instance. | ||
* Otherwise, you can get the boot information (path to kernel zImage, initrd, DTB, command line arguments) by extracting <code>extlinux.conf</code> from the boot partition of the image, and then attempt to boot it via the U-Boot shell, or some other mechanism that your board's distro uses (e.g. <code>uEnv.txt</code>). | * Otherwise, you can get the boot information (path to kernel zImage, initrd, DTB, command line arguments) by extracting <code>extlinux.conf</code> from the boot partition of the image, and then attempt to boot it via the U-Boot shell, or some other mechanism that your board's distro uses (e.g. <code>uEnv.txt</code>). | ||
==== Building u-boot from your NixOS PC ==== | |||
Assuming | |||
* Your board is supported upstream by u-boot or there is a recent enough fork with <code>extlinux.conf</code> support. | |||
* You do not have nix setup on an ARM device | |||
* Your nix isn't setup for cross-compilation | |||
It is still possible to build u-boot using tools provided by NixOS. | |||
In the following terminal session, replace <code>orangepi_pc_defconfig</code> with the appropriate board [http://git.denx.de/?p=u-boot.git;a=tree;f=configs;hb=HEAD from the configs folder] of u-boot. | |||
{{Commands|<nowiki> | |||
$ nix-shell -E 'with import <nixpkgs> {}; stdenv.mkDerivation { name = "arm-shell"; buildInputs = [git gnumake gcc gcc-arm-embedded dtc]; }' | |||
$ git clone git://git.denx.de/u-boot.git | |||
$ cd u-boot | |||
# We're checking out a version from before the use of `binman`. | |||
# The dtc package is 1.4.2, which does not include `pylibftd`. | |||
# Furthermore, I do not know how to package the library so it would be | |||
# available in the python interpreter, making binman happy. | |||
$ git checkout v2017.03 | |||
$ make -j4 ARCH=arm CROSS_COMPILE=arm-none-eabi- orangepi_pc_defconfig | |||
$ make -j4 ARCH=arm CROSS_COMPILE=arm-none-eabi- | |||
</nowiki>}} | |||
The name of the final file will change depending on the board. For this specific build, and most Allwinner builds, the file will be named <code>u-boot-sunxi-with-spl.bin</code>. | |||
=== The hard way === | === The hard way === |