NixOS on ARM/Firefly AIO-3399C: Difference between revisions

imported>Makefu
m update links
Pigs (talk | contribs)
m Add category
 
(9 intermediate revisions by 3 users not shown)
Line 4: Line 4:
!colspan="2" class="title"|Firefly AIO-3399C
!colspan="2" class="title"|Firefly AIO-3399C
|-
|-
|colspan="2"|[[File:Firefly_AIO-3399C.png|frameless|256px|A Firefly AIO-3399C with eMMC.]]
|colspan="2"|[[File:Firefly_AIO-3399C.png|frameless|256px|A Firefly AIO-3399C attached to LVDS]]
|-
|-
!Manufacturer
!Manufacturer
Line 13: Line 13:
|-
|-
!Bootloader
!Bootloader
|?
| u-boot with ARM trusted boot and Rockchip Miniloader
|-
|-
!Boot order
!Boot order
| eMMC,SD
| official: eMMC
|-
|-
!Maintainer
!Maintainer
Line 22: Line 22:
|}
|}
</div>
</div>
== Status ==
The board '''boots NixOS from eMMC''' with the downstream u-boot and Rockchip trusted boot blob. Also flashing Rockchip tertiary bootloader (**idbloader**).
Additionally image provided by firefly on [http://www.t-firefly.com/doc/download/54.html the chinese download page], click on '''Ubuntu (GPT)'''. The image has also been uploaded to [https://archive.org/details/AIO-3399C archive.org].
The official documentation, which is a pretty good state, can be found at [http://wiki.t-firefly.com/en/AIO-3399C/ the wiki of firefly].




== Status ==
== Serial console ==
On the board there are 3 pins which have a 2.54mm pitch, this is the debug console with the text DEBUG on it. Starting from the middle to the side of the board:
 
* GND (Black Wire)
* RX (White Wire)
* TX (Green Wire)
* VCC, only the silver trace point and not a pin


It can boot the image provided by firefly on [http://www.t-firefly.com/doc/download/54.html the chinese download page], click on '''Ubuntu (GPT)'''. You will need a pan.baidu.com account.
Baud rate is <code>1500000</code>
Connect to it via:
<syntaxHighlight lang=bash>
nix-shell -p picocom --run "picocom -b 1500000 /dev/ttyUSB0"
</syntaxHighlight>


The official documentation, which is a pretty good state, can be found at [http://wiki.t-firefly.com/en/AIO-3399C/ the wiki of firefly]
When you build your own image, you need the following extra kernel command-line parameters to get serial output:
<syntaxHighlight lang=nix>
{
  boot.kernelParams = lib.mkForce ["console=ttyS2,1500000n8" "earlycon=uart8250,mmio32,0xff1a0000" "earlyprintk"];
}
</syntaxHighlight>
Make sure you disable other consoles (tty0) as they seem to interfere with the output.


== Board-specific installation notes ==
== Board-specific installation notes ==


=== Installation onto eMMC ===
{{note|it may be necessary to first flash the ubuntu gpt image before overriding the partitions with NixOS, use <code>upgrade_tool UF ./AIO-3399C-UBUNTU16.04-LVDS-GPT.img</code>}}
==== boot parts ====
For booting the Image you will need the following parts:
# idbloader (rockchip proprietary)
# u-boot customized by firefly
# ARM Trusted image customized for working with uboot
The whole setup can be built by hand with the following scripts originally from user '''samueldr'''.


<syntaxHighlight lang=bash>
git clone https://github.com/makefu/ROC-RK3399-PC-overlay.git builder && cd builder
nix-build -A pkgsCross.aarch64-multiplatform.AIO-3399C.firmware
ls result/
cp result/{idbloader.img,uboot.img,trust.img} .
</syntaxHighlight>


== Serial console==
==== boot and rootfs ====
The latest linux kernel (4.19 and up) is working with this board. Instead of building the image yourself you can fetch the latest sd-image from hydra and dd the created images onto the separate partitions.
You can find all the successful builds in [https://hydra.nixos.org/job/nixos/release-18.09-aarch64/nixos.sd_image.aarch64-linux hydra @ nixos:release-18.09-aarch64:nixos.sd_image.aarch64-linux]


<syntaxHighlight lang=bash>
# get the latest link directly from hydra
wget https://hydra.nixos.org/build/89033499/download/1/nixos-sd-image-18.09.2227.ea0820818a7-aarch64-linux.img -O sd.img
udisksctl loop-setup -f sd.img -r
dd if=/dev/loop0p1 boot.img
dd if=/dev/loop0p2 root.img
</syntaxHighlight>


== Compatibility notes ==
==== Bringing the device into Rockchip loader mode ====
The board can easily be flashed by booting the device into the Rockchip ''loader'' mode. The device exposes the emmc with the rockusb protocol to a connected host pc.


=== Downstream kernel ===
To bring the device in the loader mode:
# Disconnect from power
# Connect USB-C from the board to your computer
# Hold 'Recovery' button pressed
# Connect power, wait for 2 (or more) seconds
# Short press the 'reset' button and release the 'Recovery' button afterwards


==== flashing all boot parts ====
<syntaxHighlight lang=bash>
# You should have the following files available:
$ ls *.img
boot.img root.img trust.img uboot.img idbloader.img


# enter loader or maskrom mode
nix-build -A AIO-3399C.upgrade_tool
# optional: re-flash the rockchip loader, haven't tested
# result/bin/upgrade_tool UL idbloader.img
result/bin/upgrade_tool di -u uboot.img -t trust.img -boot ./boot.img -rootfs root.img
result/bin/upgrade_tool rd # reset
</syntaxHighlight>


Now cross fingers, the system should boot into NixOS now, the getty BAUD rate
will change to <code>115200</code>.


=== Flashing from with Rockchip upgrade_tool ===
== Compatibility notes ==
See the [http://opensource.rock-chips.com/wiki_Status_Matrix Rockchip compatibility matrix]. Uboot requires the Rockchip Miniloader and an arm trusted boot image.


=== Downstream kernel ===


The downstream kernel sources can be found on github at [https://github.com/FireflyTeam/kernel]. The stable kernel branch they are maintaining is <code>4.4</code>, however mainline 4.19 is already work according to the [http://opensource.rock-chips.com/wiki_Status_Matrix Rockchip compatibility matrix].


=== Flashing from U-Boot ===
=== u-boot ===
Firefly maintains an own u-boot fork at [https://github.com/FireflyTeam/u-boot].


=== Firefly upgrade_tool ===
Firefly provides an <code>upgrade_tool</code> which is a modified [http://opensource.rock-chips.com/wiki_Upgradetool rock-chip upgrade tool]. Using the upstream tool however may result in weird errors like being unable to flash the image or being unable to erase the flash. To be sure use the [https://archive.org/details/AIO-3399C archive.org mirror].


However, because the software is essentially a blob, you will need to either patchelf the thing or use '''steam-run''':
<syntaxHighlight lang=bash>nix-shell -p steam-run --run "steam-run ./upgrade_tool"</syntaxHighlight>
I tried flashing with the open-source rkflashtool (in the same repo as the
u-boot stuff), however i was unable to actually connect to the device neither in
"loader" nor in "maskrom" mode. I resorted to using the closed source blob
<code>upgrade_tool</code> which works directly.
=== Rockchip MaskROM Mode ===
Maskrom mode is a way to get extended privileges when flashing but you need to shorten two trace points on the board. Follow [https://wiki.t-firefly.com/en/AIO-3399C/04-maskrom_mode.html the official documentation]. However the loader mode should be enough for most things.


== Resources ==
== Resources ==


* [https://www.pine64.org/?page_id=46823 Official product page]
* [http://en.t-firefly.com/product/industry/aio_3399c Official product page]
* [http://wiki.t-firefly.com/en/AIO-3399C/ Firefly Wiki Page for the AIO-3399c]
* [http://wiki.t-firefly.com/en/AIO-3399C/ Firefly Wiki Page for the AIO-3399c]
[[Category:NixOS on ARM]]