NixOS on ARM/PINE A64-LTS: Difference between revisions

imported>Samueldr
mNo edit summary
m Dark mode support
 
(3 intermediate revisions by 3 users not shown)
Line 19: Line 19:
|-
|-
!Maintainer
!Maintainer
|[[User:samueldr|samueldr]]
|
|}
|}
</div>
</div>
Line 27: Line 27:


It can boot from SD or from an eMMC.
It can boot from SD or from an eMMC.
The [https://www.pine64.org/?page_id=1491 SOPINE board] from the same manufacturer, using the Baseboard "Model A" should be 100% compatible with the A64-LTS; the A64-LTS support is built using the device tree of the Baseboard "Model A". Though untested, this should mean that the Baseboard "Model A" will work with NixOS<sup>[testing needed]</sup>.


== Status ==
== Status ==
Line 34: Line 32:
Upstream NixOS AArch64 image boots on the PINE A64-LTS, using the proper upstream U-Boot.
Upstream NixOS AArch64 image boots on the PINE A64-LTS, using the proper upstream U-Boot.


U-boot support [https://github.com/NixOS/nixpkgs/pull/32553#issuecomment-373915787 has been added 2018-03-18]. The bootloader with SPL can be downloaded from these location:
U-boot support [https://github.com/NixOS/nixpkgs/pull/32553#issuecomment-373915787 has been added 2018-03-18]. The bootloader with SPL can be downloaded from this location:


* [http://cs.helsinki.fi/u/tmtynkky/sopine-u-boot-sunxi-with-spl.bin <code>sopine-u-boot-sunxi-with-spl.bin</code> built by Dezgeg.]
* [https://hydra.nixos.org/job/nixpkgs/trunk/ubootPine64LTS.aarch64-linux Nixpkgs unstable builds on hydra.]
* [https://hydra.nixos.org/job/nixpkgs/trunk/ubootSopine.aarch64-linux Trunk builds on hydra.]


== Installation instructions ==
== Installation instructions ==
Line 43: Line 40:
{{ARM/installation allwinner|variant=aarch64}}
{{ARM/installation allwinner|variant=aarch64}}


Flashing u-boot to the SD card can be skipped if it is installed to the [[#SPI_NOR_flash|SPI NOR flash]]
Flashing U-Boot to the SD card can be skipped if it is installed to the [[#SPI_NOR_flash|SPI NOR flash]]


These instructions can also be followed for installation on the eMMC module. A compatible eMMC writer may be required to flash the eMMC. If you do not have one available, it is possible to boot another operating system on the A64-LTS and from there <code>dd</code> to the eMMC.
These instructions can also be followed for installation on the eMMC module. A compatible eMMC writer may be required to flash the eMMC. If you do not have one available, it is possible to boot another operating system on the A64-LTS and from there <code>dd</code> to the eMMC.
Line 57: Line 54:
{| class="table"
{| class="table"
|-
|-
!colspan="2" style="background: #fafafa"| EXP Connector
!colspan="2" style="background: var(--color-inverted)"| EXP Connector
|-
|-
! Pin
! Pin
Line 71: Line 68:
| GND
| GND
|-
|-
!colspan="2" style="background: #fafafa"| Euler "e" Connector
!colspan="2" style="background: var(--color-inverted)"| Euler "e" Connector
|-
|-
! Pin
! Pin
Line 89: Line 86:


{| class="table arm-compatibility"
{| class="table arm-compatibility"
!colspan="2" style="background: #fafafa"| Mainline kernel
!colspan="2" style="background: var(--color-inverted)"| Mainline kernel
|-
|-
! Ethernet
! Ethernet
Line 153: Line 150:
}
}
</syntaxhighlight>
</syntaxhighlight>
=== Clusterboard Ethernet ===
It appears that Ethernet with the [https://www.pine64.org/clusterboard/ pine64 clusterboard] requires [https://forum.pine64.org/showthread.php?tid=10432 a slightly modified device tree to work].  There's some conflicting information about exactly what is needed to get Ethernet working but currently, mainline linux (5.4.58 at the time of testing) plus a modified device tree is sufficient to get a full speed 1gbps connection.
First create the device tree overlay.
<pre>
/* sopine-baseboard-ethernet.dts */
/dts-v1/;
/ {
model = "SoPine with baseboard";
compatible = "pine64,sopine-baseboard\0pine64,sopine\0allwinner,sun50i-a64";
fragment@0 {
target-path = "/soc/ethernet@1c30000";
__overlay__ {
allwinner,tx-delay-ps = <500>;
};
};
};
</pre>
Create the device tree binary from that.
<pre>
dtc -O dtb -o sopine-baseboard-ethernet.dtbo -b 0 sopine-baseboard-ethernet.dts
</pre>
And add it to your configuration.nix
<pre>
...
  hardware.deviceTree.enable = true;
  hardware.deviceTree.overlays = [
    "${/path/to/sopine-baseboard-ethernet.dtbo}"
  ];
...
</pre>


== SPI NOR flash ==
== SPI NOR flash ==
Line 191: Line 223:


=== Flashing from U-Boot ===
=== Flashing from U-Boot ===
{{outdated|Mainline U-Boot can now be used, since the <tt>sf</tt> command and support for the SPI NOR flash has been added}}


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>.  
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>.  
Line 218: Line 252:


* [https://www.pine64.org/?page_id=46823 Official product page]
* [https://www.pine64.org/?page_id=46823 Official product page]
* [https://linux-sunxi.org/Xunlong_Orange_Pi_PC linux-sunxi wiki page]