I have pushed the initial version of my new image builder for R64 on github.
It builds an image for running Arch Linux. There is also a pre-build image ready for download, see assets in the release, or the download link located here below. You can use this image as try-out. If you like it, then you can use the script later. I’ve tested the script running on Arch Linux, should work on debian/ubuntu too.
The script only installs packages and configures them. It will therefore not take too long to create an image.
Everything that needs building is pre-built and can be updated through the AUR. Kernel is also a prebuild package, based on the
linux-rolling-stable branch. When updating the linux-bpir64-git package in the AUR, it should build the newest stable linux version and install it automaticallty. The same goes for the Arm Trusted Firmware bpir64-atf-git, it is also a package, but it does not have many updates. When installed/upgraded it is automatically written to the correct partition. There is a separate package bpir64-mkimage, which is modified to stretch the image leaving empty space on sectors 2 through 34, so a GPT table can be used without problems.
Devicetree can be edited on the spot through devicetree overlay sources, one command to save changes: bpir64-writefip and then reboot with the new devicetree.
Note: With the emmc version, wan only works with bootswitch set to boot from emmc first! (see closed issues buildR64ubuntu)
There is no dns server installed, The DHCP server gives the client DNS=8.8.8.8. It is the simplest setup. From this simple setup, it is up to every user to implement the setup by his/her choice. The goal is to keep the install script as clean and simple as possible.
The script runs without any errors, expect the few changes and the additional hint in the Readme we sendend you as pull request.
The only strange thing is that mounting no longer works properly after executing the script once. So far, I have only been able to fix it with a restart… The problem with “system halt” persists.
... ~/GitRepos/buildR64arch (git)-[main] % ./build.sh -r
Target device=sdmmc
Not running on Bananapi BPI-R64
'' != '/dev/mmcblk0p1', using mount point '/mnt/bpirootfs'
umount: /dev/mmcblk0p1: not mounted.
mount: /mnt/bpirootfs: mount(2) system call failed: File exists.
dmesg(1) may have more information after failed mount system call.
Running exit function to clean up...
/mnt/bpirootfs is not a mountpoint
Done. You can remove the card now.
We tried it out for several times, also with a brand new SD-card. However we always got the “System halt” message and the bpi does not boot correctly. Is there anything in the output of the build.sh script that may be helpful?
My guess it is that the ATF is not written. I need to check if it happens here with the latest version. The Arm Trusted Firmware is also installed/updated via a package. After installing/updating the package the correct version (emmc/sdmmc) is written automatically to disk.
Now the bpi seems to correctly jump to bootloader. However we still get an error message
ERROR: BL2: Failed to load image id 5 (-2)
Output of the build.sh-script:
[root@p1 /]# pacman -Syu bpir64-atf-git
:: Synchronizing package databases...
core is up to date
extra is up to date
community is up to date
alarm is up to date
aur is up to date
ericwoud is up to date
warning: bpir64-atf-git-r20220818182002.9c9c499-1 is up to date -- reinstalling
:: Starting full system upgrade...
resolving dependencies...
looking for conflicting packages...
Packages (1) bpir64-atf-git-r20220818182002.9c9c499-1
Total Installed Size: 0.24 MiB
Net Upgrade Size: 0.00 MiB
:: Proceed with installation? [Y/n]
(1/1) checking keys in keyring [####################################################################################################################################] 100%
(1/1) checking package integrity [####################################################################################################################################] 100%
(1/1) loading package files [####################################################################################################################################] 100%
(1/1) checking for file conflicts [####################################################################################################################################] 100%
:: Processing package changes...
(1/1) reinstalling bpir64-atf-git [####################################################################################################################################] 100%
0+1 records in
0+1 records out
440 bytes copied, 0.00226643 s, 194 kB/s
214+1 records in
214+1 records out
109773 bytes (110 kB, 107 KiB) copied, 0.151287 s, 726 kB/s
:: Running post-transaction hooks...
(1/1) Arming ConditionNeedsUpdate...
[root@p1 /]#
Output of the bpi at boot:
F0: 102B 0000
F5: 0000 0000
V0: 0000 0000 [0001]
00: 0000 0000
BP: 0400 0041 [0000]
G0: 1190 0000
T0: 0000 0325 [000F]
Jump to BL
NOTICE: BL2: v2.7(release):9c9c499-dirty
NOTICE: BL2: Built : 13:20:25, Aug 23 2022
INFO: BL2: Doing platform setup
INFO: PMIC: MediaTek MT6380 E3
INFO: EMI: DRAMC calibration done
INFO: EMI: complex R/W mem test passed
INFO: MediaTek MMC/SD Card Controller ver 20160506, eco 0
INFO: Located GPT partition 'fip' at 0x100000, size 0x3f00000
INFO: BL2: Loading image id 3
INFO: Image id=3 copied: 0x42000000 - 0x4200b0dd
INFO: BL2: Loading image id 5
WARNING: Firmware Image Package header check failed.
WARNING: Failed to access image id=5 (-2)
ERROR: BL2: Failed to load image id 5 (-2)
One step further However the boot process still results in an Error “Failed to load image id 5” and previously the warning “Image id=5 size out of bounds”…
F0: 102B 0000
F5: 0000 0000
V0: 0000 0000 [0001]
00: 0000 0000
BP: 0400 0041 [0000]
G0: 1190 0000
T0: 0000 02EA [000F]
Jump to BL
NOTICE: BL2: v2.7(release):9c9c499-dirty
NOTICE: BL2: Built : 13:20:25, Aug 23 2022
INFO: BL2: Doing platform setup
INFO: PMIC: MediaTek MT6380 E3
INFO: EMI: DRAMC calibration done
INFO: EMI: complex R/W mem test passed
INFO: MediaTek MMC/SD Card Controller ver 20160506, eco 0
INFO: Located GPT partition 'fip' at 0x100000, size 0x3f00000
INFO: BL2: Loading image id 3
INFO: Image id=3 copied: 0x42000000 - 0x4200b0dd
INFO: BL2: Loading image id 5
INFO: Loading image id=5 at address 0x42000000
WARNING: Image id=5 size out of bounds
ERROR: BL2: Failed to load image id 5 (-27)
If this boots successful, then you can remove the package (boot partition is still written) to prevent it from being automatically updated. However, I need to put the fiptool in a separate package, so you cannot do that yet. Updating Linux package needs the fiptool.
Again one step further The boot process now seem to be okay.
However, after boot the bpi randomly freezes and reboots after a while. Sometimes I manage to log in before the freeze, sometimes it happens before the login. Because of the freeze, I have unfortunately not yet managed to output the error messages with journalctl.
Error is from bl2 when trying to load fip (uboot+bl31) so atf is working partially. Second part cannot be loaded…kernel is far away as this is loaded by uboot
Sadly we still have the problem with the system freeze and a restart afterwards. Certainly the time until we get the freeze increased up to a few minutes. So far, however, we have not been able to identify any real correlation. The freeze currently seems quite random. Also journalctl does not really help…
Just a guess that it might be related to /media/emmc. Below a snipped from the journalctl before the freeze (in this specific case we got a core dump after the command “du”):
Aug 10 01:37:02 bpir64 login[227]: ROOT LOGIN ON ttyS0
Aug 10 01:37:36 bpir64 systemd[1]: dev-disk-by\x2dpartlabel-bpir64\x2demmc\x2droot.device: Job dev-disk-by\x2dpartlabel-bpir64\x2demmc\x2droot.device/start timed out.
Aug 10 01:37:36 bpir64 systemd[1]: Timed out waiting for device /dev/disk/by-partlabel/bpir64-emmc-root.
Aug 10 01:37:36 bpir64 systemd[1]: Dependency failed for /media/emmc.
Aug 10 01:37:36 bpir64 systemd[1]: media-emmc.mount: Job media-emmc.mount/start failed with result 'dependency'.
Aug 10 01:37:36 bpir64 systemd[1]: Startup finished in 2.521s (kernel) + 1min 31.300s (userspace) = 1min 33.821s.
Aug 10 01:37:36 bpir64 systemd[1]: dev-disk-by\x2dpartlabel-bpir64\x2demmc\x2droot.device: Job dev-disk-by\x2dpartlabel-bpir64\x2demmc\x2droot.device/start failed with result 'timeout'.
-- Boot d1ad04cafab84e4eb88044a72132dd91 --
Aug 10 01:29:32 bpir64 systemd-resolved[167]: Negative trust anchors: home.arpa 10.in-addr.arpa 16.172.in-addr.arpa 17.172.in-addr.arpa 18.172.in-addr.arpa 19.172.in-addr.arpa 20.172.in-addr.arpa 21.172.in-addr.arpa 22.172.in-addr.arpa 23.172.in-addr.arpa 24.172.in-addr.arpa 25.172.in-addr.arpa 26.172.in-addr.arpa 27.172.in-addr.arpa 28.172.in-a>
Aug 10 01:29:32 bpir64 systemd-timesyncd[168]: System clock time unset or jumped backwards, restoring from recorded timestamp: Wed 2022-08-10 01:39:30 CEST
Aug 10 01:39:30 bpir64 systemd[1]: Started Network Time Synchronization.
Aug 10 01:39:41 bpir64 systemd[1]: media-sdmmc.automount: Got automount request for /media/sdmmc, triggered by 282 (du)
Aug 10 01:39:41 bpir64 systemd[1]: Mounting /media/sdmmc...
Aug 10 01:39:41 bpir64 systemd[1]: Mounted /media/sdmmc.
Aug 10 01:39:41 bpir64 systemd[1]: Created slice Slice /system/systemd-coredump.
Aug 10 01:39:41 bpir64 systemd[1]: Started Process Core Dump (PID 284/UID 0).
Aug 10 01:39:41 bpir64 systemd[285]: [email protected]: ProtectHostname=yes is configured, but the kernel does not support UTS namespaces, ignoring namespace setup.
Aug 10 01:39:42 bpir64 systemd-coredump[285]: [LNK] Process 282 (du) of user 0 dumped core.
Module linux-vdso.so.1 with build-id 81d00e871a7b494a287af9b45aeef9c52ccc966c
Module libc.so.6 with build-id a11e506985b1f3d7eb868fc58de1473a19d5ebd0
Module du with build-id e690a8bea0033888234c08f0a070f53db964e435
Stack trace of thread 282:
#0 0x0000007fab942790 n/a (libc.so.6 + 0x82790)
#1 0x0000007fab8fb6fc raise (libc.so.6 + 0x3b6fc)
#2 0x0000007fab8e78b0 abort (libc.so.6 + 0x278b0)
#3 0x0000007fab8f4bcc n/a (libc.so.6 + 0x34bcc)
#4 0x0000007fab8f4c30 __assert_fail (libc.so.6 + 0x34c30)
#5 0x00000055907f4630 n/a (du + 0x4630)
#6 0x0000007fab8e7b80 n/a (libc.so.6 + 0x27b80)
#7 0x0000007fab8e7c60 __libc_start_main (libc.so.6 + 0x27c60)
#8 0x00000055907f4830 n/a (du + 0x4830)
ELF object binary architecture: AARCH64
-- Boot d1ad04cafab84e4eb88044a72132dd91 --
Then ./build.sh -SD and format again.
Then run the script ./build.sh -r … The atf and fip partitions should get written now on first go. Grep from your pull request is also fixed.
I’ve changed the script according to your suggestions. To run the script with this change I only needed to remove the mmc-utils package because it was not downloadable (http-request 404). But I’ve seen that it is not needed in this case. Sadly the freeze still persisted. uname -r gives 5.18.16 as expected.
According your question above regarding additional hardware I realized that I used the wifi-module MT7615. I removed it to test if it helps somehow. And yes it helps, at least the software freeze has gone and the following log has revealed:
[ 283.728323] mt7622-wmac 18000000.wmac wlan0: failed (err=-2) to del object (id=3)
[ 283.739159] mt7530 mdio-bus:00 aux: failed (err=-2) to del object (id=3)
[ 283.745925] mt7530 mdio-bus:00 lan3: failed (err=-2) to del object (id=3)
[ 283.752760] mt7530 mdio-bus:00 lan2: failed (err=-2) to del object (id=3)
[ 283.759608] mt7530 mdio-bus:00 lan1: failed (err=-2) to del object (id=3)
[ 283.766429] mt7530 mdio-bus:00 lan0: failed (err=-2) to del object (id=3)
[ 283.773268] mt7530 mdio-bus:00 wan: failed (err=-2) to del object (id=3)
[ 283.780014] mt7622-wmac 18000000.wmac wlan0: failed (err=-2) to del object (id=3)
[ 283.789810] mt7622-wmac 18000000.wmac wlan0: failed (err=-2) to del object (id=3)
I was wondering because this module was the whole time attached (as well as with your old ubuntu-based script) and there no software freezes occured.
Then I remembered that you’ve added further packages and enabled wifi-related services e.g. the hostapd-service. So I disabled the hostapd.service and the nftables.service. Then I attached the Wifi-module again and rebooted. Now it’s running without any freeze up to now.
I would propose to add such “user-specific” services optionally and let it on the users own to enable them. I will investigate further because I want to use the bpir64 as an AP. If I have any ideas for improvement I will send you a pull request in git.