NixOS on ARM/PINE A64-LTS: Difference between revisions
imported>Samueldr m Adds disambiguation for A64 (non-LTS) and SOPINE |
imported>Samueldr m Inits section about SPI NOR Flash with t |
||
Line 55: | Line 55: | ||
* Using the upstream kernel at 4.15, neither ethernet seems to have troubles. The interface is detected but seems to not work right. | * Using the upstream kernel at 4.15, neither ethernet seems to have troubles. The interface is detected but seems to not work right. | ||
* HDMI support is untested. | * HDMI support is untested. | ||
== SPI NOR flash == | |||
The Pine A64-LTS is equipe with a 4MB SPI NOR flash chip. The CPU will read the bootloader from it, after trying the SD card and the eMMC. | |||
Flashing u-boot to the SPI NOR flash will allow booting the <code>sd-image-aarch64.img</code> based images without further manipulating the image or the boot device (e.g. without embedding u-boot to the usb drive). It may also allow booting UEFI compliant AArch64 images, though this is unverified. | |||
The author did not find ways to flash the NOR flash from a running Linux system using the mainline kernel. | |||
=== Flashing from FEL === | |||
The easiest method to trigger [http://linux-sunxi.org/FEL FEL mode] is to not have previously flashed the SPI NOR flash with a valid bootloader, and to remove all storage devices used to boot. The Pine A64-LTS will fallback to FEL mode. | |||
To connect the Pine A64-LTS to the computer in FEL mode, you will need a USB A-to-A (male to male) cable, and plug to the uppser USB receptacle<ref>http://linux-sunxi.org/Pine64#FEL_mode</ref> | |||
Once started in FEL mode, the computer should see the following device. | |||
<pre> | |||
Bus ___ Device ___: ID 1f3a:efe8 Onda (unverified) V972 tablet in flashing mode | |||
</pre> | |||
It is, then, possible to use <code>sunxi-fel</code> from <code>sunxi-tools</code> to flash the a bootloader to the SPI NOR flash. | |||
{{note|As of 2018-11-24, the <code>sunxi-tools</code> package is not up-to-date enough, and does not have the required <code>spiflash-write</code> sub-command.}} | |||
<pre> | |||
$ nix-shell -p sunxi-tools | |||
[nix-shell:~]$ sudo sunxi-fel -l | |||
USB device ___:___ Allwinner A64 ________:________:________:________ | |||
[nix-shell:~]$ sudo sunxi-fel -p spiflash-write 0 u-boot-sunxi-with-spl.bin | |||
100% [================================================] 575 kB, 96.9 kB/s | |||
</pre> | |||
Once complete, unplug the power from the Pine A64-LTS, unplug the Pine A64-LTS from the host computer, and try booting without storage devices, but either serial or HDMI. When successful, u-boot will start, and eventually try to network boot. | |||
{{note|Once a valid bootloader is on the SPI NOR flash, FEL mode will not be entered automatically. [http://linux-sunxi.org/FEL Follow instructions of the FEL page of the linux-sunxi wiki] for alternative ways to enter FEL mode.}} | |||
== Flashing from u-boot == | |||
It is possible, through using a u-boot bootloader built from the u-boot-sunxi tree, to write to the SPI NOR flash. The [https://github.com/ayufan-pine64/bootloader-build ayufan-pine64/bootloader-build] has such a build. Using the released <code>.img</code> files, it is possible to write their custom build or erase their custom build. From their custom build, it is possible to write to the SPI NOR flash using the <code>sf</code> command<ref>https://github.com/ayufan-pine64/bootloader-build/blob/d7e891cbee8a559ea50cf25ee18aa9d7b4ea9d58/blobs/flash-spi.cmd#L11-L13</ref>. | |||
<pre> | |||
# Detect the SPI NOR flash | |||
=> sf probe | |||
SF: Detected w25q128bv with page size 256 Bytes, erase size 4 KiB, total 16 MiB | |||
# Sanity checks | |||
=> ls mmc 0:1 | |||
558296 u-boot.bin | |||
1 file(s), 0 dir(s) | |||
# Loading the bootloader from an SD card | |||
=> load mmc 0:1 ${kernel_addr_r} /u-boot.bin | |||
reading /u-boot.bin | |||
558296 bytes read in 79 ms (6.7 MiB/s) | |||
# Erasing the SPI NOR flash | |||
=> sf erase 0 3e8000 | |||
SF: 4096000 bytes @ 0x0 Erased: OK | |||
# Writing to the SPI NOR flash | |||
=> sf write ${kernel_addr_r} 0 3e8000 | |||
device 0 offset 0x0, size 0x3e8000 | |||
SF: 4096000 bytes @ 0x0 Written: OK | |||
</pre> | |||
== Resources == | == Resources == |