NixOS on ARM/Banana Pi BPI-M5: Difference between revisions
mNo edit summary |
ToasterUwU (talk | contribs) Replaced the outdated instructions with currently working ones. The issue was the gcc-arm-embedded package not providing the needed cross compiler anymore, along with shebang issues. This is my first time editing the wiki, so please check everything extra hard for issues. |
||
| (One intermediate revision by one other user not shown) | |||
| Line 1: | Line 1: | ||
{{ARM/breadcrumb}} | {{ARM/breadcrumb}} | ||
'''Note:''' To build an image for a BPI-M5 you will need to use flakes. If you don't know them or need to set them up for your system, follow [[Flakes|the Flakes Wiki page]]. | |||
== Setting up the Flake for cross-compilation == | |||
Create a folder with a name of your choosing. In it create a flake.nix file with the following contents:<syntaxhighlight lang="nix"> | |||
{ | |||
description = "Banana Pi M5 NixOS Build Environment"; | |||
== | inputs = { | ||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; | |||
}; | |||
outputs = { nixpkgs, ... }: let | |||
system = "x86_64-linux"; | |||
pkgs = import nixpkgs { inherit system; }; | |||
# Expose the correct AArch64 cross-compilation package set | |||
crossPkgs = import nixpkgs { | |||
inherit system; | |||
crossSystem = { | |||
config = "aarch64-unknown-linux-gnu"; | |||
}; | |||
}; | |||
in { | |||
devShells.${system}.default = pkgs.mkShell { | |||
packages = [ | |||
# For patching shebangs in the official build scripts | |||
pkgs.stdenv | |||
# Provides the 64-bit aarch64-unknown-linux-gnu-gcc | |||
crossPkgs.buildPackages.gcc | |||
# Retained for Amlogic's 32-bit SCP/BL30 binary generation | |||
pkgs.gcc-arm-embedded | |||
pkgs.ubootTools | |||
pkgs.dtc | |||
pkgs.flex | |||
pkgs.bison | |||
pkgs.swig | |||
pkgs.openssl | |||
pkgs.gnutls | |||
# Resolves the insecure Python 2 dependency | |||
pkgs.python3 | |||
]; | |||
# Pre-set the build variables expected by Make | |||
shellHook = '' | |||
export CROSS_COMPILE="aarch64-unknown-linux-gnu-" | |||
export ARCH="arm" | |||
''; | |||
}; | |||
}; | |||
} | |||
</syntaxhighlight> | |||
== Building Amlogic-compatible U-Boot == | |||
=== Building U-Boot === | === Building U-Boot === | ||
'''Note:''' Do not use the severely outdated [https://github.com/BPI-SINOVOIP/BPI-M5-bsp BPI-M5-bsp] or [https://github.com/Dangku/Amlogic-u-boot Amlogic-u-boot] to build u-boot. | '''Note:''' Do not use the severely outdated [https://github.com/BPI-SINOVOIP/BPI-M5-bsp BPI-M5-bsp] or [https://github.com/Dangku/Amlogic-u-boot Amlogic-u-boot] to build u-boot. | ||
<syntaxhighlight lang="shell-session"> | <syntaxhighlight lang="shell-session"> | ||
$ nix develop | |||
$ git clone git://git.denx.de/u-boot.git | $ git clone git://git.denx.de/u-boot.git | ||
$ cd u-boot | $ cd u-boot | ||
$ make -j$(nproc) bananapi-m5_defconfig | |||
$ make -j$(nproc) | $ make -j$(nproc) | ||
$ make -j$(nproc) | |||
$ cd .. | $ cd .. | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| Line 24: | Line 76: | ||
'''Note:''' The following steps require an AMD64 platform. | '''Note:''' The following steps require an AMD64 platform. | ||
<syntaxhighlight lang="shell-session"> | <syntaxhighlight lang="shell-session">$ git clone https://github.com/LibreELEC/amlogic-boot-fip | ||
$ git clone https://github.com/LibreELEC/amlogic-boot-fip | |||
$ cd amlogic-boot-fip | $ cd amlogic-boot-fip | ||
$ mkdir -p output-bananapim5/ | $ mkdir -p output-bananapim5/ | ||
$ patchShebangs . | |||
$ ./build-fip.sh bananapi-m5 ../u-boot/u-boot.bin output-bananapim5 | $ ./build-fip.sh bananapi-m5 ../u-boot/u-boot.bin output-bananapim5 | ||
$ hexdump -C -n 32 output-bananapim5/u-boot.bin | grep "40 41 4d 4c" | $ hexdump -C -n 32 output-bananapim5/u-boot.bin | grep "40 41 4d 4c" | ||
$ cd .. | $ cd ..</syntaxhighlight> | ||
</syntaxhighlight> | |||
Verify that the new u-boot.bin contains <code>40 41 4d 4c</code> (<code>@AML</code>) at 0x10 onwards. | Verify that the new u-boot.bin contains <code>40 41 4d 4c</code> (<code>@AML</code>) at 0x10 onwards. | ||
| Line 37: | Line 88: | ||
== Board-specific installation notes == | == Board-specific installation notes == | ||
First follow the [[ | First follow the [[NixOS on ARM/Installation|NixOS_on_ARM instructions to get the SD card image]] and decompress it. | ||
Once the image has been decompressed, the Amlogic U-Boot package needs to be copied to byte 512+ inside the image (replace the image with the name downloaded and decompressed image): | Once the image has been decompressed, the Amlogic U-Boot package needs to be copied to byte 512+ inside the image (replace the image with the name downloaded and decompressed image): | ||
<syntaxhighlight lang="shell-session"> | <syntaxhighlight lang="shell-session">$ sudo dd if=amlogic-boot-fip/output-bananapim5/u-boot.bin of=nixos-sd-image-22.11.2620.de5448dab58-aarch64-linux.img conv=fsync,notrunc bs=512 seek=1</syntaxhighlight> | ||
$ sudo dd if=amlogic-boot-fip/output-bananapim5/u-boot.bin of=nixos-sd-image-22.11.2620.de5448dab58-aarch64-linux.img conv=fsync,notrunc bs=512 seek=1 | |||
</syntaxhighlight> | |||
Then, copy the image onto the eMMC or sdcard using the [[NixOS_on_ARM#Installation_steps|the installation steps]]. | Then, copy the image onto the eMMC or sdcard using the [[NixOS_on_ARM#Installation_steps|the installation steps]]. | ||
| Line 59: | Line 108: | ||
* [https://wiki.banana-pi.org/Banana_Pi_BPI-M5 Official product page] | * [https://wiki.banana-pi.org/Banana_Pi_BPI-M5 Official product page] | ||
* [https://u-boot.readthedocs.io/en/latest/board/amlogic/odroid-c4.html Installation here is based on the U-Boot for Odroid C4 documentation] | * [https://u-boot.readthedocs.io/en/latest/board/amlogic/odroid-c4.html Installation here is based on the U-Boot for Odroid C4 documentation] | ||
[[Category:NixOS on ARM]] | |||