Odroid-C2: Difference between revisions

From Alpine Linux
m (→‎Booting: typo)
(Added dmesg and /etc/os-release)
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
==Introduction==
==Introduction==


The Odroid-C2 single board computer is not very well supported by Alpine/Linux. However the "Generic ARM (aarch64)" build contains almost everything we need !
The Odroid-C2 single board computer is now well supported by Alpine/Linux and the "Generic U-Boot (aarch64)" build contains everything we need !


What do we need ?
What about the hardware side ?
* kernel : provided kernel by the Alpine team does not boot
* u-boot : provided u-boot does not autoboot without serial
* system files : everything is okay
 
On the hardware side:
* [https://wiki.odroid.com/odroid-c2/odroid-c2 Odroid-C2]
* [https://wiki.odroid.com/odroid-c2/odroid-c2 Odroid-C2]
* Official PSU or just a micro-SD cable (notes : the barrel plug (inner(positive) diameter 0.8mm and outer(negative) diameter 2.5mm) is recommended, without the J1 jumper)
* Official PSU or just a micro-SD cable (notes : the barrel plug (inner(positive) diameter 0.8mm and outer(negative) diameter 2.5mm) is recommended, without the J1 jumper)
* micro-SD (or eMMC)
* micro-SD (or eMMC)
* USB to TTL ([https://wiki.odroid.com/accessory/development/usb_uart_kit official] or [https://duckduckgo.com/?q=CP2102+ttl&t=h_&iax=images&ia=images CP2102 chipset] or an old rpi)
* Debug only : USB to TTL ([https://wiki.odroid.com/accessory/development/usb_uart_kit official] or [https://duckduckgo.com/?q=CP2102+ttl&t=h_&iax=images&ia=images CP2102 chipset] or an old rpi)


==Prepare the micro-SD card==
With a blank SD card, we can now format-it using the vfat file system.


==Required environement and toolchain==
'''WARNING''' : DOUBLE-CHECK <code>/dev/sda1</code> is indeed your SD card ! Or you'll loose all your data ! You have been warned !
Using GNU/Linux is recommended and this guide and here are the required dependencies, for Debian (as example) :
For this, it's preferable to run <code>dmesg -We</code> to check for the name, for example:
<pre>
<pre>
apt install bc bison flex make gcc gcc-aarch64-linux-gnu libssl-dev libncurses-dev git squashfs-tools
[  +0,004725] ums-realtek 1-1:1.0: USB Mass Storage device detected
[  +0,002985] scsi host0: usb-storage 1-1:1.0
[  +1,020024] scsi 0:0:0:0: Direct-Access    Generic- SD/MMC/MS PRO    1.00 PQ: 0 ANSI: 4
[  +0,000591] sd 0:0:0:0: Attached scsi generic sg0 type 0
[  +1,314707] sd 0:0:0:0: [sda] 15269888 512-byte logical blocks: (7.82 GB/7.28 GiB)
[  +0,000352] sd 0:0:0:0: [sda] Write Protect is off
[  +0,000008] sd 0:0:0:0: [sda] Mode Sense: 2f 00 00 00
[  +0,000408] sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[  +0,062938]  sda: sda1
[  +0,000238] sd 0:0:0:0: [sda] Attached SCSI removable disk
</pre>
</pre>
We need to set specific environment variables IF you are not using an arm64 machine. Usually, you should be running on a x64 architecture (Intel or AMD I guess), so you would like to cross-compile.
And also verify with <code>fdisk -l</code>
<pre>
<pre>
export ARCH=arm64
Disk /dev/sda: 7.28 GiB, 7818182656 bytes, 15269888 sectors
export CROSS_COMPILE=aarch64-linux-gnu
Disk model: SD/MMC/MS PRO 
</pre>
Units: sectors of 1 * 512 = 512 bytes
 
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000


==Build u-boot from source==
Device    Boot Start      End  Sectors  Size Id Type
We need to build uboot from source as the u-boot provided does not autoboot without UART connected.
/dev/sda1        2048 15269887 15267840  7.3G  b W95 FAT32
<pre>
git clone --depth 1 https://source.denx.de/u-boot/u-boot.git -b v2022.01 u-boot-denx.de
cd u-boot-denx.de
export ARCH=arm64 && export CROSS_COMPILE=aarch64-linux-gnu-
make mrproper && make odroid-c2_defconfig
</pre>
</pre>


We used the specific deconfig for the Odroid-C2 but, as mentionned before : we want to autoboot with or without UART connection.
Now we are sure that <code>/dev/sda</code> is really our SD card device and we can format our SD card using <code>mkfs.vfat /dev/sda1</code>  
You can still access the SPL prompt by pressing the 'Enter' key twice before the two seconds countdown.
<pre>
sed -i -e 's/.*CONFIG_SD_BOOT.*/CONFIG_SD_BOOT=y/' .config
sed -i -e 's/.*CONFIG_AUTOBOOT_KEYED .*/CONFIG_AUTOBOOT_KEYED=y/' .config
echo "CONFIG_AUTOBOOT_FLUSH_STDIN=y" >> .config
echo "CONFIG_AUTOBOOT_PROMPT="Press quickly 'Enter' twice to stop autoboot: %d\n"" >> .config
echo "# CONFIG_AUTOBOOT_ENCRYPTION is not set" >> .config
echo "CONFIG_AUTOBOOT_DELAY_STR=""" >> .config
echo "CONFIG_AUTOBOOT_STOP_STR="\xd\xd"" >> .config
echo "CONFIG_AUTOBOOT_KEYED_CTRLC=y" >> .config
</pre>


Then, it's time to build :
==Extract Alpine Linux==
Then mount and extract the Alpine Linux archive, for example if you do everything as root:
<pre>
<pre>
export ARCH=arm64 && export CROSS_COMPILE=aarch64-linux-gnu-
mount /dev/sda1 /mnt/sd
make odroidc2_defconfig
tar xvzfp /home/user/Downloads/alpine-uboot-3.23.2-aarch64.tar.gz -C /mnt/sd
time make -j$(nproc)
</pre>
</pre>


Amlogic doesn’t provide sources for the firmware and for tools needed to create the bootloader image, so it is necessary to obtain them from the git tree published by the board vendor.
Then, don't forget to flush changes before unmounting the device. Note that it can be a little slow depending of the speed of your device.
 
So, you need to get Amlogic u-boot's fork to assemble the u-boot binary :
<pre>
<pre>
cd ..
sync && umount /mnt/sd
git clone --depth 1 https://github.com/hardkernel/u-boot.git -b odroidc2-v2015.01 u-boot
cd u-boot
</pre>
</pre>


Copy "u-boot.bin" from the previous git repository (source.denx.de) to the amlogic u-boot repository:
==Sign u-boot==
<pre>cp ../u-boot-denx.de/u-boot.bin .</pre>
We don't need to build u-boot from source as the version provided does autoboot properly:
<pre>git clone --depth 1 https://github.com/LibreELEC/amlogic-boot-fip.git</pre>


Then, generate u-boot using amlogic fip tools:
Copy the u-boot.bin from your sd card to the git repository, and sign Amlogic u-boot binaries:
<pre>
<pre>
./fip/fip_create --bl30  ./fip/gxb/bl30.bin --bl301 ./fip/gxb/bl301.bin --bl31 ./fip/gxb/bl31.bin --bl33  u-boot.bin ./fip.bin
cd amlogic-boot-fip/
./fip/fip_create --dump ./fip.bin
/mnt/sd/u-boot/odroid-c2/u-boot.bin alpine.u-boot.bin
cat ./fip/gxb/bl2.package ./fip.bin > ./boot_new.bin
./build-fip.sh odroid-c2 alpine.u-boot.bin my-output-dir
./fip/gxb/aml_encrypt_gxb --bootsig --input ./boot_new.bin --output ./u-boot.img
dd if=./u-boot.img of=./u-boot.gxbb bs=512 skip=96
</pre>
</pre>


 
==u-boot flashing==
==Build the latest LTS kernel from source==
'''WARNING''' : Make sure your device is <code>/dev/sda</code> !
<pre>
Also, check that the device is un-mouted using <code>umount /dev/sda1</code>, then use dd to write u-boot
git clone --depth 1 git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git -b linux-5.15.y linux-stable
For example, using /dev/sda from previous commands and the signed u-boot (u-boot.bin.sd.bin) from amlogic-boot-fip tool.
cd linux-stable
export ARCH=arm64 && export CROSS_COMPILE=aarch64-linux-gnu-
make mrproper && make defconfig
</pre>
We need to adapt the default arm64 generated by defconfig. This configuration is required for Alpine/Linux and not enabled by default.
<pre>
<pre>
sed -i -e 's/.*CONFIG_SQUASHFS_XZ.*/CONFIG_SQUASHFS_XZ=y/' .config
dd if=./amlogic-boot-fip/my-output-dir/u-boot.bin.sd.bin of=/dev/sda conv=fsync,notrunc bs=512 skip=1 seek=1
sed -i -e 's/.*CONFIG_UEVENT_HELPER.*/CONFIG_UEVENT_HELPER=y/' .config
dd if=./amlogic-boot-fip/my-output-dir/u-boot.bin.sd.bin of=/dev/sda conv=fsync,notrunc bs=1 count=444
sed -i -e 's/.*CONFIG_BLK_DEV_RAM.*/CONFIG_BLK_DEV_RAM=y/' .config
echo CONFIG_UEVENT_HELPER_PATH=\"/sbin/hotplug\" >> .config
echo CONFIG_BLK_DEV_RAM_COUNT=16 >> .config
echo CONFIG_BLK_DEV_RAM_SIZE=4096 >> .config
</pre>
</pre>


We can also disable unrequired DRM modules. Hence you'll get les modules, vmlinux will be smaller and building kernel will be faster.
Note that you can also disable more modules or functionalities, by removing all DRM drivers or disable sound if you like it. It'll be perfect for a headless machine.
<pre>
sed -i -e 's/CONFIG_DRM_\(.*\)=.*/# CONFIG_DRM_\1 is not set/' .config
sed -i -e 's/.*CONFIG_DRM_LIMA.*/CONFIG_DRM_LIMA=m/' .config
sed -i -e 's/.*CONFIG_DRM_PANFROST.*/CONFIG_DRM_PANFROST=m/' .config
</pre>


If you want to enable DVFS for the s905 amlogic cpu :
==Booting==
<pre>
Connect at least your USB keyboard and your HDMI monitor to check the boot and all should work nicely :)
git apply --ignore-space-change --ignore-whitespace - << EOF
If not, check the Debugging part of this wiki.
diff --git a/arch/arm64/boot/dts/amlogic/meson-gxbb-odroidc2.dts b/arch/arm64/boot/dts/amlogic/meson-gxbb-odroidc2.dts
index 201596247..027df3756 100644
--- a/arch/arm64/boot/dts/amlogic/meson-gxbb-odroidc2.dts
+++ b/arch/arm64/boot/dts/amlogic/meson-gxbb-odroidc2.dts
@@ -348,7 +348,8 @@ &saradc {
};


&scpi_clocks {
-      status = "disabled";
+      /* Works only with new blobs that have limited DVFS table */
+      status = "okay";
};


/* SD */
==Debugging==
EOF
Connect your USB to TTL converter on your board : I noticed that you don't need to connect all wires, pin 1 don't seems to be is not mandatory at all.
</pre>
 
The, build your kernel, associated modules and the [https://elinux.org/Device_Tree_Reference#What_Is_Device_Tree DTB] (Device Tree Blob) from the source :
<pre>
<pre>
time make -j$(nproc) Image dtbs modules
_____UART____
|Pin 4 - GND|
|Pin 3 - RXD|
|Pin 2 - TXD|
|Pin 1 - VCC|
\___________|
</pre>
</pre>


Create modloop:
All details are available on the odroid wiki : https://wiki.odroid.com/accessory/development/usb_uart_kit
<pre>
rm -rf installed-modules && mkdir installed-modules
INSTALL_MOD_PATH=installed-modules make modules_install
find installed-modules -type l -delete
rm -f modloop
mksquashfs installed-modules/lib/ modloop -b 1048576 -comp xz -Xdict-size 100% -all-root
rm -rf installed-modules
</pre>


 
I use minicom for this:
==Assembly==
Kernel part:
<pre>
<pre>
DST="/mnt/mmcblk0p1"
TERM=linux minicom -b 115200 -D /dev/ttyUSB0
gzip -c arch/arm64/boot/Image > ${DST}/vmlinuz
cp .config ${DST}/config
cp modloop ${DST}/modloop
cp System.map ${DST}/System.map
</pre>
</pre>


Copy dtb:
==Boot log==
<pre>
<pre>
mkdir ${DST}/boot/dtbs
[    0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
cp arch/arm64/boot/dts/amlogic/meson-gxbb-odroidc2.dts ${DST}/boot/dtbs
[    0.000000] Linux version 6.18.1-0-lts (buildozer@build-3-23-aarch64) (cc (Alpine 15.2.0) 15.2.0, GNU ld (GNU Binutils) 2.45.1) #1-Alpine SMP PREEMPT_DYNAMIC 2025-12-15 07:25:33
cp arch/arm64/boot/dts/amlogic/meson-gxbb-odroidc2.dtb ${DST}/boot/dtbs
[    0.000000] Machine model: Hardkernel ODROID-C2
[    0.000000] efi: EFI v2.11 by Das U-Boot
[    0.000000] efi: RTPROP=0x7af1c040 SMBIOS 3.0=0x7bf74000 INITRD=0x7aefd040 RNG=0x7aefc040 MEMRESERVE=0x7aefb040
[    0.000000] random: crng init done
[    0.000000] Reserved memory: created CMA memory pool at 0x000000005d000000, size 256 MiB
[    0.000000] OF: reserved mem: initialized node linux,cma, compatible id shared-dma-pool
[    0.000000] OF: reserved mem: 0x000000005d000000..0x000000006cffffff (262144 KiB) map reusable linux,cma
[    0.000000] OF: reserved mem: 0x0000000000000000..0x0000000000ffffff (16384 KiB) nomap non-reusable hwrom@0
[    0.000000] OF: reserved mem: 0x0000000010000000..0x00000000101fffff (2048 KiB) nomap non-reusable secmon@10000000
[    0.000000] OF: reserved mem: 0x0000000005000000..0x00000000052fffff (3072 KiB) nomap non-reusable secmon@5000000
[    0.000000] OF: reserved mem: 0x0000000005300000..0x00000000072fffff (32768 KiB) nomap non-reusable secmon@5300000
[    0.000000] NUMA: Faking a node at [mem 0x0000000000000000-0x000000007fffffff]
[    0.000000] NODE_DATA(0) allocated [mem 0x7f83e040-0x7f8505ff]
[    0.000000] Zone ranges:
[    0.000000]  DMA      [mem 0x0000000000000000-0x000000007fffffff]
[    0.000000]  DMA32    empty
[    0.000000]  Normal  empty
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]  node  0: [mem 0x0000000000000000-0x0000000000ffffff]
[    0.000000]  node  0: [mem 0x0000000001000000-0x0000000004ffffff]
[    0.000000]  node  0: [mem 0x0000000005000000-0x00000000072fffff]
[    0.000000]  node  0: [mem 0x0000000007300000-0x000000000fffffff]
[    0.000000]  node  0: [mem 0x0000000010000000-0x00000000101fffff]
[    0.000000]  node  0: [mem 0x0000000010200000-0x000000007abfffff]
[    0.000000]  node  0: [mem 0x000000007ac00000-0x000000007ac00fff]
[    0.000000]  node  0: [mem 0x000000007ac01000-0x000000007af1bfff]
[    0.000000]  node  0: [mem 0x000000007af1c000-0x000000007af1cfff]
[    0.000000]  node  0: [mem 0x000000007af1d000-0x000000007af1dfff]
[    0.000000]  node  0: [mem 0x000000007af1e000-0x000000007af3ffff]
[    0.000000]  node  0: [mem 0x000000007af40000-0x000000007bf73fff]
[    0.000000]  node  0: [mem 0x000000007bf74000-0x000000007bf74fff]
[    0.000000]  node  0: [mem 0x000000007bf75000-0x000000007df4ffff]
[    0.000000]  node  0: [mem 0x000000007df50000-0x000000007df5ffff]
[    0.000000]  node  0: [mem 0x000000007df60000-0x000000007fe5afff]
[    0.000000]  node  0: [mem 0x000000007fe5b000-0x000000007fffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x000000007fffffff]
[    0.000000] psci: probing for conduit method from DT.
[    0.000000] psci: PSCIv0.2 detected in firmware.
[    0.000000] psci: Using standard PSCI v0.2 function IDs
[    0.000000] psci: Trusted OS migration not required
[    0.000000] percpu: Embedded 34 pages/cpu s100952 r8192 d30120 u139264
[    0.000000] pcpu-alloc: s100952 r8192 d30120 u139264 alloc=34*4096
[    0.000000] pcpu-alloc: [0] 0 [0] 1 [0] 2 [0] 3
[    0.000000] Detected VIPT I-cache on CPU0
[    0.000000] CPU features: detected: ARM erratum 843419
[    0.000000] CPU features: detected: ARM erratum 845719
[    0.000000] alternatives: applying boot alternatives
[    0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-lts modules=loop,squashfs,sd-mod,usb-storage quiet
[    0.000000] Unknown kernel command line parameters "modules=loop,squashfs,sd-mod,usb-storage", will be passed to user space.
[    0.000000] printk: log buffer data + meta data: 131072 + 458752 = 589824 bytes
[    0.000000] Dentry cache hash table entries: 262144 (order: 9, 2097152 bytes, linear)
[    0.000000] Inode-cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)
[    0.000000] software IO TLB: SWIOTLB bounce buffer size adjusted to 2MB
[    0.000000] software IO TLB: area num 4.
[    0.000000] software IO TLB: mapped [mem 0x000000007f29f000-0x000000007f49f000] (2MB)
[    0.000000] Fallback order for Node 0: 0
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 524288
[    0.000000] Policy zone: DMA
[    0.000000] mem auto-init: stack:all(zero), heap alloc:on, heap free:off
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1
[    0.000000] kmemleak: Kernel memory leak detector disabled
[    0.000000] ftrace: allocating 45359 entries in 178 pages
[    0.000000] ftrace: allocated 178 pages with 4 groups
[    0.000000] Dynamic Preempt: voluntary
[    0.000000] rcu: Preemptible hierarchical RCU implementation.
[    0.000000] rcu: RCU restricting CPUs from NR_CPUS=512 to nr_cpu_ids=4.
[    0.000000] Trampoline variant of Tasks RCU enabled.
[    0.000000] Rude variant of Tasks RCU enabled.
[    0.000000] Tracing variant of Tasks RCU enabled.
[    0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 100 jiffies.
[    0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=4
[    0.000000] RCU Tasks: Setting shift to 2 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=4.
[    0.000000] RCU Tasks Rude: Setting shift to 2 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=4.
[    0.000000] RCU Tasks Trace: Setting shift to 2 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=4.
[    0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
[    0.000000] Root IRQ handler: gic_handle_irq
[    0.000000] GIC: Using split EOI/Deactivate mode
[    0.000000] rcu: srcu_init: Setting srcu_struct sizes based on contention.
[    0.000000] arch_timer: cp15 timer running at 24.00MHz (phys).
[    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x588fe9dc0, max_idle_ns: 440795202592 ns
[    0.000000] sched_clock: 56 bits at 24MHz, resolution 41ns, wraps every 4398046511097ns
[    0.000800] kfence: initialized - using 2097152 bytes for 255 objects at 0x(____ptrval____)-0x(____ptrval____)
[    0.001028] Console: colour dummy device 80x25
[    0.001040] printk: legacy console [tty0] enabled
[    0.001209] Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=24000)
[    0.001223] pid_max: default: 32768 minimum: 301
[    0.001379] LSM: initializing lsm=lockdown,capability,landlock,yama
[    0.001551] landlock: Up and running.
[    0.001556] Yama: becoming mindful.
[    0.001675] Mount-cache hash table entries: 4096 (order: 3, 32768 bytes, linear)
[    0.001694] Mountpoint-cache hash table entries: 4096 (order: 3, 32768 bytes, linear)
[    0.004293] rcu: Hierarchical SRCU implementation.
[    0.004313] rcu: Max phase no-delay instances is 400.
[    0.004552] Timer migration: 1 hierarchy levels; 8 children per group; 1 crossnode level
[    0.006137] Remapping and enabling EFI services.
[    0.006487] smp: Bringing up secondary CPUs ...
[    0.007630] Detected VIPT I-cache on CPU1
[    0.007776] CPU1: Booted secondary processor 0x0000000001 [0x410fd034]
[    0.009079] Detected VIPT I-cache on CPU2
[    0.009200] CPU2: Booted secondary processor 0x0000000002 [0x410fd034]
[    0.010412] Detected VIPT I-cache on CPU3
[    0.010531] CPU3: Booted secondary processor 0x0000000003 [0x410fd034]
[    0.010662] smp: Brought up 1 node, 4 CPUs
[    0.010676] SMP: Total of 4 processors activated.
[    0.010681] CPU: All CPU(s) started at EL2
[    0.010699] CPU features: detected: 32-bit EL0 Support
[    0.010703] CPU features: detected: 32-bit EL1 Support
[    0.010711] CPU features: detected: CRC32 instructions
[    0.010721] CPU features: detected: PMUv3
[    0.010765] alternatives: applying system-wide alternatives
[    0.011888] Memory: 1527796K/2097152K available (15744K kernel code, 2970K rwdata, 12020K rodata, 3712K init, 3510K bss, 301136K reserved, 262144K cma-reserved)
[    0.012919] devtmpfs: initialized
[    0.019322] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 1911260446275000 ns
[    0.019382] posixtimers hash table entries: 2048 (order: 3, 32768 bytes, linear)
[    0.019460] futex hash table entries: 1024 (65536 bytes on 1 NUMA nodes, total 64 KiB, linear).
[    0.023417] 23216 pages in range for non-PLT usage
[    0.023441] 514736 pages in range for PLT usage
[    0.023773] pinctrl core: initialized pinctrl subsystem
[    0.024728] SMBIOS 3.7.0 present.
[    0.024746] DMI: Hardkernel Co., Ltd. ODROID-C2/ODROID-C2, BIOS 2025.10 10/01/2025
[    0.024784] DMI: Memory slots populated: 0/0
[    0.027296] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[    0.029185] DMA: preallocated 256 KiB GFP_KERNEL pool for atomic allocations
[    0.030098] DMA: preallocated 256 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations
[    0.031290] DMA: preallocated 256 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations
[    0.031356] audit: initializing netlink subsys (disabled)
[    0.031614] audit: type=2000 audit(0.029:1): state=initialized audit_enabled=0 res=1
[    0.032703] thermal_sys: Registered thermal governor 'fair_share'
[    0.032710] thermal_sys: Registered thermal governor 'bang_bang'
[    0.032716] thermal_sys: Registered thermal governor 'step_wise'
[    0.032721] thermal_sys: Registered thermal governor 'user_space'
[    0.032781] cpuidle: using governor ladder
[    0.032805] cpuidle: using governor menu
[    0.032952] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
[    0.033051] ASID allocator initialised with 65536 entries
[    0.033915] Serial: AMBA PL011 UART driver
[    0.038430] /soc/interrupt-controller@c4301000: Fixed dependency cycle(s) with /soc/interrupt-controller@c4301000
[    0.038607] /soc/vpu@d0100000: Fixed dependency cycle(s) with /soc/hdmi-tx@c883a000
[    0.038630] /soc/hdmi-tx@c883a000: Fixed dependency cycle(s) with /soc/vpu@d0100000
[    0.045891] /soc/vpu@d0100000: Fixed dependency cycle(s) with /soc/hdmi-tx@c883a000
[    0.046143] /soc/vpu@d0100000: Fixed dependency cycle(s) with /soc/hdmi-tx@c883a000
[    0.046205] /soc/hdmi-tx@c883a000: Fixed dependency cycle(s) with /soc/vpu@d0100000
[    0.049641] /soc/hdmi-tx@c883a000: Fixed dependency cycle(s) with /hdmi-connector
[    0.049721] /hdmi-connector: Fixed dependency cycle(s) with /soc/hdmi-tx@c883a000
[    0.051188] HugeTLB: registered 1.00 GiB page size, pre-allocated 0 pages
[    0.051206] HugeTLB: 0 KiB vmemmap can be freed for a 1.00 GiB page
[    0.051213] HugeTLB: registered 32.0 MiB page size, pre-allocated 0 pages
[    0.051217] HugeTLB: 0 KiB vmemmap can be freed for a 32.0 MiB page
[    0.051223] HugeTLB: registered 2.00 MiB page size, pre-allocated 0 pages
[    0.051228] HugeTLB: 0 KiB vmemmap can be freed for a 2.00 MiB page
[    0.051234] HugeTLB: registered 64.0 KiB page size, pre-allocated 0 pages
[    0.051238] HugeTLB: 0 KiB vmemmap can be freed for a 64.0 KiB page
[    0.053003] ACPI: Interpreter disabled.
[    0.053613] iommu: Default domain type: Translated
[    0.053625] iommu: DMA domain TLB invalidation policy: lazy mode
[    0.057233] pps_core: LinuxPPS API ver. 1 registered
[    0.057254] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[    0.057271] PTP clock support registered
[    0.057622] EDAC MC: Ver: 3.0.0
[    0.057896] scmi_core: SCMI protocol bus registered
[    0.057957] efivars: Registered efivars operations
[    0.059895] vgaarb: loaded
[    0.060354] clocksource: Switched to clocksource arch_sys_counter
[    0.061045] VFS: Disk quotas dquot_6.6.0
[    0.061085] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[    0.061557] pnp: PnP ACPI: disabled
[    0.068400] NET: Registered PF_INET protocol family
[    0.068648] IP idents hash table entries: 32768 (order: 6, 262144 bytes, linear)
[    0.108233] tcp_listen_portaddr_hash hash table entries: 1024 (order: 2, 16384 bytes, linear)
[    0.108372] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
[    0.108481] TCP established hash table entries: 16384 (order: 5, 131072 bytes, linear)
[    0.108718] TCP bind hash table entries: 16384 (order: 7, 524288 bytes, linear)
[    0.109068] TCP: Hash tables configured (established 16384 bind 16384)
[    0.109414] MPTCP token hash table entries: 2048 (order: 4, 49152 bytes, linear)
[    0.109521] UDP hash table entries: 1024 (order: 4, 65536 bytes, linear)
[    0.109600] UDP-Lite hash table entries: 1024 (order: 4, 65536 bytes, linear)
[    0.109804] NET: Registered PF_UNIX/PF_LOCAL protocol family
[    0.109844] NET: Registered PF_XDP protocol family
[    0.109864] PCI: CLS 0 bytes, default 64
[    0.110179] Trying to unpack rootfs image as initramfs...
[    0.119795] kvm [1]: nv: 568 coarse grained trap handlers
[    0.120337] kvm [1]: IPA Size Limit: 40 bits
[    0.123491] kvm [1]: vgic interrupt IRQ9
[    0.123540] kvm [1]: Hyp nVHE mode initialized successfully
[    0.125490] Initialise system trusted keyrings
[    0.125735] workingset: timestamp_bits=37 max_order=19 bucket_order=0
[    0.126143] Key type asymmetric registered
[    0.126155] Asymmetric key parser 'x509' registered
[    0.126241] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 245)
[    0.126464] io scheduler mq-deadline registered
[    0.126476] io scheduler kyber registered
[    0.126533] io scheduler bfq registered
[    0.127930] irq_meson_gpio: 133 to 8 gpio interrupt mux initialized
[    0.160777] soc soc0: Amlogic Meson GXBB (S905) Revision 1f:c (0:1) Detected
[    0.166402] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
[    0.170303] Serial: AMBA driver
[    0.171277] c81004c0.serial: ttyAML0 at MMIO 0xc81004c0 (irq = 14, base_baud = 1500000) is a meson_uart
[    0.171332] printk: legacy console [ttyAML0] enabled
[    0.185811] brd: module loaded
[    0.190075] meson-sm: secure-monitor enabled
[    0.192230] hw perfevents: enabled with armv8_cortex_a53 PMU driver, 7 (0,8000003f) counters available
[    0.194651] gre: GRE over IPv4 demultiplexer driver
[    0.194813] NET: Registered PF_INET6 protocol family
[    0.196113] Segment Routing with IPv6
[    0.196163] In-situ OAM (IOAM) with IPv6
[    0.196511] Key type dns_resolver registered
[    0.207852] registered taskstats version 1
[    0.208756] Loading compiled-in X.509 certificates
[    1.890951] Freeing initrd memory: 161572K
[    1.915766] Loaded X.509 cert 'alpinelinux.org: Alpine Linux kernel key: 87fa969a47f3e2a6aa35859eb932a17c95abcd82'
[    1.925972] Demotion targets for Node 0: null
[    1.926394] Key type .fscrypt registered
[    1.926408] Key type fscrypt-provisioning registered
[    1.990532] clk: Disabling unused clocks
[    1.990750] PM: genpd: Disabling unused power domains
[    1.997464] Freeing unused kernel memory: 3712K
[    1.997642] Run /init as init process
[    1.997651]  with arguments:
[    1.997657]    /init
[    1.997663]  with environment:
[    1.997668]    HOME=/
[    1.997673]    TERM=linux
[    1.997678]    modules=loop,squashfs,sd-mod,usb-storage
[    2.035274] Alpine Init 3.13.0-r0
[    2.038758] Loading boot drivers...
[    2.059104] loop: module loaded
[    2.064737] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[    2.080813] SCSI subsystem initialized
[    2.103687] usbcore: registered new interface driver usbfs
[    2.103764] usbcore: registered new interface driver hub
[    2.103843] usbcore: registered new device driver usb
[    2.111310] usbcore: registered new interface driver usb-storage
[    2.180617] [drm] Initialized simpledrm 1.0.0 for 7fe5b000.framebuffer on minor 0
[    2.183224] fbcon: Deferring console take-over
[    2.183248] simple-framebuffer 7fe5b000.framebuffer: [drm] fb0: simpledrmdrmfb frame buffer device
[    2.192025] Loading boot drivers: ok.
[    2.198046] Mounting boot media...
[    2.378869] meson-gx-mmc d0072000.mmc: Got CD GPIO
[    2.456331] lima d00c0000.gpu: gp - mali450 version major 0 minor 0
[    2.456438] lima d00c0000.gpu: pp0 - mali450 version major 0 minor 0
[    2.456514] lima d00c0000.gpu: pp1 - mali450 version major 0 minor 0
[    2.456584] lima d00c0000.gpu: pp2 - mali450 version major 0 minor 0
[    2.456625] lima d00c0000.gpu: l2_cache0 8K, 4-way, 64byte cache line, 128bit external bus
[    2.456639] lima d00c0000.gpu: l2_cache1 64K, 4-way, 64byte cache line, 128bit external bus
[    2.457168] lima d00c0000.gpu: bus rate = 166666667
[    2.457179] lima d00c0000.gpu: mod rate = 24000000
[    2.457269] lima d00c0000.gpu: error -ENODEV: _opp_set_regulators: no regulator (mali) found
[    2.463630] lima d00c0000.gpu: devfreq_add_device: Unable to find governor for the device
[    2.463824] lima d00c0000.gpu: Couldn't initialize GPU devfreq
[    2.463832] lima d00c0000.gpu: Fatal error during devfreq init
[    2.517377] lima d00c0000.gpu: probe with driver lima failed with error -22
[    2.583042] mmc0: new high speed SDHC card at address 59b4
[    2.603130] meson-drm d0100000.vpu: Queued 1 outputs on vpu
[    2.650630] meson-drm d0100000.vpu: CVBS Output connector not available
[    2.671777] meson-drm d0100000.vpu: Couldn't bind all components
[    2.975512] meson-drm d0100000.vpu: CVBS Output connector not available
[    2.996876] meson-drm d0100000.vpu: Couldn't bind all components
[    3.001616] meson-gx-mmc d0074000.mmc: allocated mmc-pwrseq
[    3.001665] meson-drm d0100000.vpu: CVBS Output connector not available
[    3.023778] meson-drm d0100000.vpu: Couldn't bind all components
[    3.030231] meson-drm d0100000.vpu: CVBS Output connector not available
[    3.045224] mmc1: Failed to initialize a non-removable card
[    3.051765] meson-drm d0100000.vpu: Couldn't bind all components
[    3.061777] meson-drm d0100000.vpu: CVBS Output connector not available
[    3.072815] mmcblk0: mmc0:59b4 USDU1 14.9 GiB
[    3.075908]  mmcblk0: p1
[    3.083517] meson-dw-hdmi c883a000.hdmi-tx: Detected HDMI TX controller v2.01a with HDCP (meson_dw_hdmi_phy)
[    3.084214] meson-dw-hdmi c883a000.hdmi-tx: registered DesignWare HDMI I2C bus driver
[    3.084830] meson-drm d0100000.vpu: bound c883a000.hdmi-tx (ops meson_dw_hdmi_ops [meson_dw_hdmi])
[    3.087221] [drm] Initialized meson 1.0.0 for d0100000.vpu on minor 0
[    3.087571] meson-drm d0100000.vpu: [drm] Cannot find any crtc or sizes
[    3.087876] meson-drm d0100000.vpu: [drm] Cannot find any crtc or sizes
[    3.262226] FAT-fs (mmcblk0p1): utf8 is not a recommended IO charset for FAT filesystems, filesystem will be case sensitive!
[    3.335730] Mounting boot media: ok.
[    3.341301] Loading user settings from /media/mmcblk0p1/c2.apkovl.tar.gz...
[    3.377619] Loading user settings from /media/mmcblk0p1/c2.apkovl.tar.gz: ok.
[    4.232143] Installing packages to root filesystem...
[    5.557258] Installing packages to root filesystem: ok.
[  13.281481] meson_ee_pwrc c883c000.system-controller:power-controller: sync_state() pending due to c9410000.ethernet
[  18.229705] loop0: detected capacity change from 0 to 509712
[  19.928765] stmmaceth c9410000.ethernet: IRQ eth_wake_irq not found
[  19.928792] stmmaceth c9410000.ethernet: IRQ eth_lpi not found
[  19.928800] stmmaceth c9410000.ethernet: IRQ sfty not found
[  19.928909] stmmaceth c9410000.ethernet: PTP uses main clock
[  19.929231] stmmaceth c9410000.ethernet: User ID: 0x11, Synopsys ID: 0x37
[  19.929252] stmmaceth c9410000.ethernet: DWMAC1000
[  19.929261] stmmaceth c9410000.ethernet: DMA HW capability register supported
[  19.929268] stmmaceth c9410000.ethernet: RX Checksum Offload Engine supported
[  19.929274] stmmaceth c9410000.ethernet: COE Type 2
[  19.929281] stmmaceth c9410000.ethernet: TX Checksum insertion supported
[  19.929288] stmmaceth c9410000.ethernet: Wake-Up On Lan supported
[  19.929564] stmmaceth c9410000.ethernet: Normal descriptors
[  19.929582] stmmaceth c9410000.ethernet: Ring mode enabled
[  19.929589] stmmaceth c9410000.ethernet: Enable RX Mitigation via HW Watchdog Timer
[  20.249379] Registered IR keymap rc-odroid
[  20.263322] IR NEC protocol handler initialized
[  20.284506] rc rc0: meson-ir as /devices/platform/soc/c8100000.bus/c8100580.ir/rc/rc0
[  20.284665] input: meson-ir as /devices/platform/soc/c8100000.bus/c8100580.ir/rc/rc0/input0
[  20.284847] rc rc0: sw decoder init
[  20.284920] meson-ir c8100580.ir: receiver initialized
[  20.308460] platform-mhu c883c404.mailbox: Platform MHU Mailbox registered
[  20.452494] dwc2 c9100000.usb: supply vusb_d not found, using dummy regulator
[  20.452658] dwc2 c9100000.usb: supply vusb_a not found, using dummy regulator
[  20.504703] dwc2 c9100000.usb: DWC OTG Controller
[  20.504745] dwc2 c9100000.usb: new USB bus registered, assigned bus number 1
[  20.504787] dwc2 c9100000.usb: irq 43, io mem 0xc9100000
[  20.504991] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 6.18
[  20.505002] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[  20.505010] usb usb1: Product: DWC OTG Controller
[  20.505017] usb usb1: Manufacturer: Linux 6.18.1-0-lts dwc2_hsotg
[  20.505024] usb usb1: SerialNumber: c9100000.usb
[  20.505695] hub 1-0:1.0: USB hub found
[  20.505742] hub 1-0:1.0: 1 port detected
[  20.781387] usb 1-1: new high-speed USB device number 2 using dwc2
[  20.956690] usb 1-1: New USB device found, idVendor=05e3, idProduct=0610, bcdDevice=32.98
[  20.956713] usb 1-1: New USB device strings: Mfr=0, Product=1, SerialNumber=0
[  20.956721] usb 1-1: Product: USB2.0 Hub
[  20.960535] hub 1-1:1.0: USB hub found
[  20.960938] hub 1-1:1.0: 4 ports detected
[  21.400017] NET: Registered PF_PACKET protocol family
[  22.049733] stmmaceth c9410000.ethernet eth0: Register MEM_TYPE_PAGE_POOL RxQ-0
[  22.126395] stmmaceth c9410000.ethernet eth0: PHY [stmmac-0:00] driver [RTL8211F Gigabit Ethernet] (irq=38)
[  22.141555] stmmaceth c9410000.ethernet eth0: No Safety Features support found
[  22.159969] stmmaceth c9410000.ethernet eth0: PTP not supported by HW
[  22.160000] stmmaceth c9410000.ethernet eth0: configuring for phy/rgmii link mode
[  25.021598] stmmaceth c9410000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx
[  27.551668] fbcon: Taking over console
</pre>
</pre>


System part:
<pre>
<pre>
tar -C $DST -xzf alpine-uboot-3.15.4-aarch64.tar.gz ./.alpine-release ./alpine.apkovl.tar.gz ./apks ./boot/initramfs-lts 2>/dev/null
# cat /etc/os-release
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.23.2
PRETTY_NAME="Alpine Linux v3.23"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://gitlab.alpinelinux.org/alpine/aports/-/issues"
</pre>
</pre>
==U-Boot scripting==
Create boot.cmd file to /dev/mmcblk0:
<pre>
DST="/mnt/mmcblk0p1"
cat << EoF > boot.cmd
#------------------------------------------------------------------------------------------------------
#
# HELP:
# boot.cmd = source file for humans
# boot.scr = destination file needed for the board
# recompile-me with:
# mkimage -C none -A arm -T script -d boot.cmd boot.scr
#
#------------------------------------------------------------------------------------------------------
# init.
setenv modloop "/boot/modloop"
setenv console "tty1"
setenv condev "console=ttyAML0,115200n8"
setenv verbosity "7"
setenv display_autodetect "true"
# console arguments configuration
setenv consoleargs "modules=loop,squashfs,sd-mod,usb-storage modloop=\${modloop} \${condev} console=\${console} panic=10"
setenv bootargs "\${consoleargs} loglevel=\${verbosity}"
# load files
setenv devtype "mmc"
setenv devnum "0:1"
load \${devtype} \${devnum} \${kernel_addr_r} /boot/vmlinuz
load \${devtype} \${devnum} \${ramdisk_addr_r} /boot/initramfs-lts
load \${devtype} \${devnum} \${fdt_addr_r} /boot/dtbs/meson-gxbb-odroidc2.dtb
# boot
booti \$kernel_addr_r \$ramdisk_addr_r:3200000 \$fdt_addr_r
EoF
</pre>
Then, build this file for u-boot. The mkimage binary is available in the ./tools/ directory from the source.denx.de repository (see "Build u-boot from source" part).
<pre>
mkimage -C none -A arm -T script -d boot.cmd boot.scr
</pre>
Please note that those two files must be placed in the /boot/ directory.
==Booting==
Connect your USB to TTL converter on your board : I noticed that you don't need to connect all wires, pin 1 don't seems to be is not mandatory at all.
<pre>
_____UART____
|Pin 4 - GND|
|Pin 3 - RXD|
|Pin 2 - TXD|
|Pin 1 - VCC|
\___________|
</pre>
All details are available on the odroid wiki : https://wiki.odroid.com/accessory/development/usb_uart_kit


[[Category:ARM]]
[[Category:ARM]]
[[Category:Hardware]]
[[Category:Hardware]]

Latest revision as of 14:18, 21 December 2025

Introduction

The Odroid-C2 single board computer is now well supported by Alpine/Linux and the "Generic U-Boot (aarch64)" build contains everything we need !

What about the hardware side ?

  • Odroid-C2
  • Official PSU or just a micro-SD cable (notes : the barrel plug (inner(positive) diameter 0.8mm and outer(negative) diameter 2.5mm) is recommended, without the J1 jumper)
  • micro-SD (or eMMC)
  • Debug only : USB to TTL (official or CP2102 chipset or an old rpi)

Prepare the micro-SD card

With a blank SD card, we can now format-it using the vfat file system.

WARNING : DOUBLE-CHECK /dev/sda1 is indeed your SD card ! Or you'll loose all your data ! You have been warned ! For this, it's preferable to run dmesg -We to check for the name, for example:

[  +0,004725] ums-realtek 1-1:1.0: USB Mass Storage device detected
[  +0,002985] scsi host0: usb-storage 1-1:1.0
[  +1,020024] scsi 0:0:0:0: Direct-Access     Generic- SD/MMC/MS PRO    1.00 PQ: 0 ANSI: 4
[  +0,000591] sd 0:0:0:0: Attached scsi generic sg0 type 0
[  +1,314707] sd 0:0:0:0: [sda] 15269888 512-byte logical blocks: (7.82 GB/7.28 GiB)
[  +0,000352] sd 0:0:0:0: [sda] Write Protect is off
[  +0,000008] sd 0:0:0:0: [sda] Mode Sense: 2f 00 00 00
[  +0,000408] sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[  +0,062938]  sda: sda1
[  +0,000238] sd 0:0:0:0: [sda] Attached SCSI removable disk

And also verify with fdisk -l

Disk /dev/sda: 7.28 GiB, 7818182656 bytes, 15269888 sectors
Disk model: SD/MMC/MS PRO   
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000

Device     Boot Start      End  Sectors  Size Id Type
/dev/sda1        2048 15269887 15267840  7.3G  b W95 FAT32

Now we are sure that /dev/sda is really our SD card device and we can format our SD card using mkfs.vfat /dev/sda1

Extract Alpine Linux

Then mount and extract the Alpine Linux archive, for example if you do everything as root:

mount /dev/sda1 /mnt/sd
tar xvzfp /home/user/Downloads/alpine-uboot-3.23.2-aarch64.tar.gz -C /mnt/sd

Then, don't forget to flush changes before unmounting the device. Note that it can be a little slow depending of the speed of your device.

sync && umount /mnt/sd

Sign u-boot

We don't need to build u-boot from source as the version provided does autoboot properly:

git clone --depth 1 https://github.com/LibreELEC/amlogic-boot-fip.git

Copy the u-boot.bin from your sd card to the git repository, and sign Amlogic u-boot binaries:

cd amlogic-boot-fip/
/mnt/sd/u-boot/odroid-c2/u-boot.bin alpine.u-boot.bin
./build-fip.sh odroid-c2 alpine.u-boot.bin my-output-dir 

u-boot flashing

WARNING : Make sure your device is /dev/sda ! Also, check that the device is un-mouted using umount /dev/sda1, then use dd to write u-boot For example, using /dev/sda from previous commands and the signed u-boot (u-boot.bin.sd.bin) from amlogic-boot-fip tool.

dd if=./amlogic-boot-fip/my-output-dir/u-boot.bin.sd.bin of=/dev/sda conv=fsync,notrunc bs=512 skip=1 seek=1
dd if=./amlogic-boot-fip/my-output-dir/u-boot.bin.sd.bin of=/dev/sda conv=fsync,notrunc bs=1 count=444


Booting

Connect at least your USB keyboard and your HDMI monitor to check the boot and all should work nicely :) If not, check the Debugging part of this wiki.


Debugging

Connect your USB to TTL converter on your board : I noticed that you don't need to connect all wires, pin 1 don't seems to be is not mandatory at all.

_____UART____
|Pin 4 - GND|
|Pin 3 - RXD|
|Pin 2 - TXD|
|Pin 1 - VCC|
\___________|

All details are available on the odroid wiki : https://wiki.odroid.com/accessory/development/usb_uart_kit

I use minicom for this:

TERM=linux minicom -b 115200 -D /dev/ttyUSB0

Boot log

[    0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
[    0.000000] Linux version 6.18.1-0-lts (buildozer@build-3-23-aarch64) (cc (Alpine 15.2.0) 15.2.0, GNU ld (GNU Binutils) 2.45.1) #1-Alpine SMP PREEMPT_DYNAMIC 2025-12-15 07:25:33
[    0.000000] Machine model: Hardkernel ODROID-C2
[    0.000000] efi: EFI v2.11 by Das U-Boot
[    0.000000] efi: RTPROP=0x7af1c040 SMBIOS 3.0=0x7bf74000 INITRD=0x7aefd040 RNG=0x7aefc040 MEMRESERVE=0x7aefb040 
[    0.000000] random: crng init done
[    0.000000] Reserved memory: created CMA memory pool at 0x000000005d000000, size 256 MiB
[    0.000000] OF: reserved mem: initialized node linux,cma, compatible id shared-dma-pool
[    0.000000] OF: reserved mem: 0x000000005d000000..0x000000006cffffff (262144 KiB) map reusable linux,cma
[    0.000000] OF: reserved mem: 0x0000000000000000..0x0000000000ffffff (16384 KiB) nomap non-reusable hwrom@0
[    0.000000] OF: reserved mem: 0x0000000010000000..0x00000000101fffff (2048 KiB) nomap non-reusable secmon@10000000
[    0.000000] OF: reserved mem: 0x0000000005000000..0x00000000052fffff (3072 KiB) nomap non-reusable secmon@5000000
[    0.000000] OF: reserved mem: 0x0000000005300000..0x00000000072fffff (32768 KiB) nomap non-reusable secmon@5300000
[    0.000000] NUMA: Faking a node at [mem 0x0000000000000000-0x000000007fffffff]
[    0.000000] NODE_DATA(0) allocated [mem 0x7f83e040-0x7f8505ff]
[    0.000000] Zone ranges:
[    0.000000]   DMA      [mem 0x0000000000000000-0x000000007fffffff]
[    0.000000]   DMA32    empty
[    0.000000]   Normal   empty
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000000000000-0x0000000000ffffff]
[    0.000000]   node   0: [mem 0x0000000001000000-0x0000000004ffffff]
[    0.000000]   node   0: [mem 0x0000000005000000-0x00000000072fffff]
[    0.000000]   node   0: [mem 0x0000000007300000-0x000000000fffffff]
[    0.000000]   node   0: [mem 0x0000000010000000-0x00000000101fffff]
[    0.000000]   node   0: [mem 0x0000000010200000-0x000000007abfffff]
[    0.000000]   node   0: [mem 0x000000007ac00000-0x000000007ac00fff]
[    0.000000]   node   0: [mem 0x000000007ac01000-0x000000007af1bfff]
[    0.000000]   node   0: [mem 0x000000007af1c000-0x000000007af1cfff]
[    0.000000]   node   0: [mem 0x000000007af1d000-0x000000007af1dfff]
[    0.000000]   node   0: [mem 0x000000007af1e000-0x000000007af3ffff]
[    0.000000]   node   0: [mem 0x000000007af40000-0x000000007bf73fff]
[    0.000000]   node   0: [mem 0x000000007bf74000-0x000000007bf74fff]
[    0.000000]   node   0: [mem 0x000000007bf75000-0x000000007df4ffff]
[    0.000000]   node   0: [mem 0x000000007df50000-0x000000007df5ffff]
[    0.000000]   node   0: [mem 0x000000007df60000-0x000000007fe5afff]
[    0.000000]   node   0: [mem 0x000000007fe5b000-0x000000007fffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x000000007fffffff]
[    0.000000] psci: probing for conduit method from DT.
[    0.000000] psci: PSCIv0.2 detected in firmware.
[    0.000000] psci: Using standard PSCI v0.2 function IDs
[    0.000000] psci: Trusted OS migration not required
[    0.000000] percpu: Embedded 34 pages/cpu s100952 r8192 d30120 u139264
[    0.000000] pcpu-alloc: s100952 r8192 d30120 u139264 alloc=34*4096
[    0.000000] pcpu-alloc: [0] 0 [0] 1 [0] 2 [0] 3 
[    0.000000] Detected VIPT I-cache on CPU0
[    0.000000] CPU features: detected: ARM erratum 843419
[    0.000000] CPU features: detected: ARM erratum 845719
[    0.000000] alternatives: applying boot alternatives
[    0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-lts modules=loop,squashfs,sd-mod,usb-storage quiet
[    0.000000] Unknown kernel command line parameters "modules=loop,squashfs,sd-mod,usb-storage", will be passed to user space.
[    0.000000] printk: log buffer data + meta data: 131072 + 458752 = 589824 bytes
[    0.000000] Dentry cache hash table entries: 262144 (order: 9, 2097152 bytes, linear)
[    0.000000] Inode-cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)
[    0.000000] software IO TLB: SWIOTLB bounce buffer size adjusted to 2MB
[    0.000000] software IO TLB: area num 4.
[    0.000000] software IO TLB: mapped [mem 0x000000007f29f000-0x000000007f49f000] (2MB)
[    0.000000] Fallback order for Node 0: 0 
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 524288
[    0.000000] Policy zone: DMA
[    0.000000] mem auto-init: stack:all(zero), heap alloc:on, heap free:off
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1
[    0.000000] kmemleak: Kernel memory leak detector disabled
[    0.000000] ftrace: allocating 45359 entries in 178 pages
[    0.000000] ftrace: allocated 178 pages with 4 groups
[    0.000000] Dynamic Preempt: voluntary
[    0.000000] rcu: Preemptible hierarchical RCU implementation.
[    0.000000] rcu: 	RCU restricting CPUs from NR_CPUS=512 to nr_cpu_ids=4.
[    0.000000] 	Trampoline variant of Tasks RCU enabled.
[    0.000000] 	Rude variant of Tasks RCU enabled.
[    0.000000] 	Tracing variant of Tasks RCU enabled.
[    0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 100 jiffies.
[    0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=4
[    0.000000] RCU Tasks: Setting shift to 2 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=4.
[    0.000000] RCU Tasks Rude: Setting shift to 2 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=4.
[    0.000000] RCU Tasks Trace: Setting shift to 2 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=4.
[    0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
[    0.000000] Root IRQ handler: gic_handle_irq
[    0.000000] GIC: Using split EOI/Deactivate mode
[    0.000000] rcu: srcu_init: Setting srcu_struct sizes based on contention.
[    0.000000] arch_timer: cp15 timer running at 24.00MHz (phys).
[    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x588fe9dc0, max_idle_ns: 440795202592 ns
[    0.000000] sched_clock: 56 bits at 24MHz, resolution 41ns, wraps every 4398046511097ns
[    0.000800] kfence: initialized - using 2097152 bytes for 255 objects at 0x(____ptrval____)-0x(____ptrval____)
[    0.001028] Console: colour dummy device 80x25
[    0.001040] printk: legacy console [tty0] enabled
[    0.001209] Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=24000)
[    0.001223] pid_max: default: 32768 minimum: 301
[    0.001379] LSM: initializing lsm=lockdown,capability,landlock,yama
[    0.001551] landlock: Up and running.
[    0.001556] Yama: becoming mindful.
[    0.001675] Mount-cache hash table entries: 4096 (order: 3, 32768 bytes, linear)
[    0.001694] Mountpoint-cache hash table entries: 4096 (order: 3, 32768 bytes, linear)
[    0.004293] rcu: Hierarchical SRCU implementation.
[    0.004313] rcu: 	Max phase no-delay instances is 400.
[    0.004552] Timer migration: 1 hierarchy levels; 8 children per group; 1 crossnode level
[    0.006137] Remapping and enabling EFI services.
[    0.006487] smp: Bringing up secondary CPUs ...
[    0.007630] Detected VIPT I-cache on CPU1
[    0.007776] CPU1: Booted secondary processor 0x0000000001 [0x410fd034]
[    0.009079] Detected VIPT I-cache on CPU2
[    0.009200] CPU2: Booted secondary processor 0x0000000002 [0x410fd034]
[    0.010412] Detected VIPT I-cache on CPU3
[    0.010531] CPU3: Booted secondary processor 0x0000000003 [0x410fd034]
[    0.010662] smp: Brought up 1 node, 4 CPUs
[    0.010676] SMP: Total of 4 processors activated.
[    0.010681] CPU: All CPU(s) started at EL2
[    0.010699] CPU features: detected: 32-bit EL0 Support
[    0.010703] CPU features: detected: 32-bit EL1 Support
[    0.010711] CPU features: detected: CRC32 instructions
[    0.010721] CPU features: detected: PMUv3
[    0.010765] alternatives: applying system-wide alternatives
[    0.011888] Memory: 1527796K/2097152K available (15744K kernel code, 2970K rwdata, 12020K rodata, 3712K init, 3510K bss, 301136K reserved, 262144K cma-reserved)
[    0.012919] devtmpfs: initialized
[    0.019322] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 1911260446275000 ns
[    0.019382] posixtimers hash table entries: 2048 (order: 3, 32768 bytes, linear)
[    0.019460] futex hash table entries: 1024 (65536 bytes on 1 NUMA nodes, total 64 KiB, linear).
[    0.023417] 23216 pages in range for non-PLT usage
[    0.023441] 514736 pages in range for PLT usage
[    0.023773] pinctrl core: initialized pinctrl subsystem
[    0.024728] SMBIOS 3.7.0 present.
[    0.024746] DMI: Hardkernel Co., Ltd. ODROID-C2/ODROID-C2, BIOS 2025.10 10/01/2025
[    0.024784] DMI: Memory slots populated: 0/0
[    0.027296] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[    0.029185] DMA: preallocated 256 KiB GFP_KERNEL pool for atomic allocations
[    0.030098] DMA: preallocated 256 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations
[    0.031290] DMA: preallocated 256 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations
[    0.031356] audit: initializing netlink subsys (disabled)
[    0.031614] audit: type=2000 audit(0.029:1): state=initialized audit_enabled=0 res=1
[    0.032703] thermal_sys: Registered thermal governor 'fair_share'
[    0.032710] thermal_sys: Registered thermal governor 'bang_bang'
[    0.032716] thermal_sys: Registered thermal governor 'step_wise'
[    0.032721] thermal_sys: Registered thermal governor 'user_space'
[    0.032781] cpuidle: using governor ladder
[    0.032805] cpuidle: using governor menu
[    0.032952] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
[    0.033051] ASID allocator initialised with 65536 entries
[    0.033915] Serial: AMBA PL011 UART driver
[    0.038430] /soc/interrupt-controller@c4301000: Fixed dependency cycle(s) with /soc/interrupt-controller@c4301000
[    0.038607] /soc/vpu@d0100000: Fixed dependency cycle(s) with /soc/hdmi-tx@c883a000
[    0.038630] /soc/hdmi-tx@c883a000: Fixed dependency cycle(s) with /soc/vpu@d0100000
[    0.045891] /soc/vpu@d0100000: Fixed dependency cycle(s) with /soc/hdmi-tx@c883a000
[    0.046143] /soc/vpu@d0100000: Fixed dependency cycle(s) with /soc/hdmi-tx@c883a000
[    0.046205] /soc/hdmi-tx@c883a000: Fixed dependency cycle(s) with /soc/vpu@d0100000
[    0.049641] /soc/hdmi-tx@c883a000: Fixed dependency cycle(s) with /hdmi-connector
[    0.049721] /hdmi-connector: Fixed dependency cycle(s) with /soc/hdmi-tx@c883a000
[    0.051188] HugeTLB: registered 1.00 GiB page size, pre-allocated 0 pages
[    0.051206] HugeTLB: 0 KiB vmemmap can be freed for a 1.00 GiB page
[    0.051213] HugeTLB: registered 32.0 MiB page size, pre-allocated 0 pages
[    0.051217] HugeTLB: 0 KiB vmemmap can be freed for a 32.0 MiB page
[    0.051223] HugeTLB: registered 2.00 MiB page size, pre-allocated 0 pages
[    0.051228] HugeTLB: 0 KiB vmemmap can be freed for a 2.00 MiB page
[    0.051234] HugeTLB: registered 64.0 KiB page size, pre-allocated 0 pages
[    0.051238] HugeTLB: 0 KiB vmemmap can be freed for a 64.0 KiB page
[    0.053003] ACPI: Interpreter disabled.
[    0.053613] iommu: Default domain type: Translated
[    0.053625] iommu: DMA domain TLB invalidation policy: lazy mode
[    0.057233] pps_core: LinuxPPS API ver. 1 registered
[    0.057254] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[    0.057271] PTP clock support registered
[    0.057622] EDAC MC: Ver: 3.0.0
[    0.057896] scmi_core: SCMI protocol bus registered
[    0.057957] efivars: Registered efivars operations
[    0.059895] vgaarb: loaded
[    0.060354] clocksource: Switched to clocksource arch_sys_counter
[    0.061045] VFS: Disk quotas dquot_6.6.0
[    0.061085] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[    0.061557] pnp: PnP ACPI: disabled
[    0.068400] NET: Registered PF_INET protocol family
[    0.068648] IP idents hash table entries: 32768 (order: 6, 262144 bytes, linear)
[    0.108233] tcp_listen_portaddr_hash hash table entries: 1024 (order: 2, 16384 bytes, linear)
[    0.108372] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
[    0.108481] TCP established hash table entries: 16384 (order: 5, 131072 bytes, linear)
[    0.108718] TCP bind hash table entries: 16384 (order: 7, 524288 bytes, linear)
[    0.109068] TCP: Hash tables configured (established 16384 bind 16384)
[    0.109414] MPTCP token hash table entries: 2048 (order: 4, 49152 bytes, linear)
[    0.109521] UDP hash table entries: 1024 (order: 4, 65536 bytes, linear)
[    0.109600] UDP-Lite hash table entries: 1024 (order: 4, 65536 bytes, linear)
[    0.109804] NET: Registered PF_UNIX/PF_LOCAL protocol family
[    0.109844] NET: Registered PF_XDP protocol family
[    0.109864] PCI: CLS 0 bytes, default 64
[    0.110179] Trying to unpack rootfs image as initramfs...
[    0.119795] kvm [1]: nv: 568 coarse grained trap handlers
[    0.120337] kvm [1]: IPA Size Limit: 40 bits
[    0.123491] kvm [1]: vgic interrupt IRQ9
[    0.123540] kvm [1]: Hyp nVHE mode initialized successfully
[    0.125490] Initialise system trusted keyrings
[    0.125735] workingset: timestamp_bits=37 max_order=19 bucket_order=0
[    0.126143] Key type asymmetric registered
[    0.126155] Asymmetric key parser 'x509' registered
[    0.126241] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 245)
[    0.126464] io scheduler mq-deadline registered
[    0.126476] io scheduler kyber registered
[    0.126533] io scheduler bfq registered
[    0.127930] irq_meson_gpio: 133 to 8 gpio interrupt mux initialized
[    0.160777] soc soc0: Amlogic Meson GXBB (S905) Revision 1f:c (0:1) Detected
[    0.166402] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
[    0.170303] Serial: AMBA driver
[    0.171277] c81004c0.serial: ttyAML0 at MMIO 0xc81004c0 (irq = 14, base_baud = 1500000) is a meson_uart
[    0.171332] printk: legacy console [ttyAML0] enabled
[    0.185811] brd: module loaded
[    0.190075] meson-sm: secure-monitor enabled
[    0.192230] hw perfevents: enabled with armv8_cortex_a53 PMU driver, 7 (0,8000003f) counters available
[    0.194651] gre: GRE over IPv4 demultiplexer driver
[    0.194813] NET: Registered PF_INET6 protocol family
[    0.196113] Segment Routing with IPv6
[    0.196163] In-situ OAM (IOAM) with IPv6
[    0.196511] Key type dns_resolver registered
[    0.207852] registered taskstats version 1
[    0.208756] Loading compiled-in X.509 certificates
[    1.890951] Freeing initrd memory: 161572K
[    1.915766] Loaded X.509 cert 'alpinelinux.org: Alpine Linux kernel key: 87fa969a47f3e2a6aa35859eb932a17c95abcd82'
[    1.925972] Demotion targets for Node 0: null
[    1.926394] Key type .fscrypt registered
[    1.926408] Key type fscrypt-provisioning registered
[    1.990532] clk: Disabling unused clocks
[    1.990750] PM: genpd: Disabling unused power domains
[    1.997464] Freeing unused kernel memory: 3712K
[    1.997642] Run /init as init process
[    1.997651]   with arguments:
[    1.997657]     /init
[    1.997663]   with environment:
[    1.997668]     HOME=/
[    1.997673]     TERM=linux
[    1.997678]     modules=loop,squashfs,sd-mod,usb-storage
[    2.035274] Alpine Init 3.13.0-r0
[    2.038758] Loading boot drivers...
[    2.059104] loop: module loaded
[    2.064737] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[    2.080813] SCSI subsystem initialized
[    2.103687] usbcore: registered new interface driver usbfs
[    2.103764] usbcore: registered new interface driver hub
[    2.103843] usbcore: registered new device driver usb
[    2.111310] usbcore: registered new interface driver usb-storage
[    2.180617] [drm] Initialized simpledrm 1.0.0 for 7fe5b000.framebuffer on minor 0
[    2.183224] fbcon: Deferring console take-over
[    2.183248] simple-framebuffer 7fe5b000.framebuffer: [drm] fb0: simpledrmdrmfb frame buffer device
[    2.192025] Loading boot drivers: ok.
[    2.198046] Mounting boot media...
[    2.378869] meson-gx-mmc d0072000.mmc: Got CD GPIO
[    2.456331] lima d00c0000.gpu: gp - mali450 version major 0 minor 0
[    2.456438] lima d00c0000.gpu: pp0 - mali450 version major 0 minor 0
[    2.456514] lima d00c0000.gpu: pp1 - mali450 version major 0 minor 0
[    2.456584] lima d00c0000.gpu: pp2 - mali450 version major 0 minor 0
[    2.456625] lima d00c0000.gpu: l2_cache0 8K, 4-way, 64byte cache line, 128bit external bus
[    2.456639] lima d00c0000.gpu: l2_cache1 64K, 4-way, 64byte cache line, 128bit external bus
[    2.457168] lima d00c0000.gpu: bus rate = 166666667
[    2.457179] lima d00c0000.gpu: mod rate = 24000000
[    2.457269] lima d00c0000.gpu: error -ENODEV: _opp_set_regulators: no regulator (mali) found
[    2.463630] lima d00c0000.gpu: devfreq_add_device: Unable to find governor for the device
[    2.463824] lima d00c0000.gpu: Couldn't initialize GPU devfreq
[    2.463832] lima d00c0000.gpu: Fatal error during devfreq init
[    2.517377] lima d00c0000.gpu: probe with driver lima failed with error -22
[    2.583042] mmc0: new high speed SDHC card at address 59b4
[    2.603130] meson-drm d0100000.vpu: Queued 1 outputs on vpu
[    2.650630] meson-drm d0100000.vpu: CVBS Output connector not available
[    2.671777] meson-drm d0100000.vpu: Couldn't bind all components
[    2.975512] meson-drm d0100000.vpu: CVBS Output connector not available
[    2.996876] meson-drm d0100000.vpu: Couldn't bind all components
[    3.001616] meson-gx-mmc d0074000.mmc: allocated mmc-pwrseq
[    3.001665] meson-drm d0100000.vpu: CVBS Output connector not available
[    3.023778] meson-drm d0100000.vpu: Couldn't bind all components
[    3.030231] meson-drm d0100000.vpu: CVBS Output connector not available
[    3.045224] mmc1: Failed to initialize a non-removable card
[    3.051765] meson-drm d0100000.vpu: Couldn't bind all components
[    3.061777] meson-drm d0100000.vpu: CVBS Output connector not available
[    3.072815] mmcblk0: mmc0:59b4 USDU1 14.9 GiB
[    3.075908]  mmcblk0: p1
[    3.083517] meson-dw-hdmi c883a000.hdmi-tx: Detected HDMI TX controller v2.01a with HDCP (meson_dw_hdmi_phy)
[    3.084214] meson-dw-hdmi c883a000.hdmi-tx: registered DesignWare HDMI I2C bus driver
[    3.084830] meson-drm d0100000.vpu: bound c883a000.hdmi-tx (ops meson_dw_hdmi_ops [meson_dw_hdmi])
[    3.087221] [drm] Initialized meson 1.0.0 for d0100000.vpu on minor 0
[    3.087571] meson-drm d0100000.vpu: [drm] Cannot find any crtc or sizes
[    3.087876] meson-drm d0100000.vpu: [drm] Cannot find any crtc or sizes
[    3.262226] FAT-fs (mmcblk0p1): utf8 is not a recommended IO charset for FAT filesystems, filesystem will be case sensitive!
[    3.335730] Mounting boot media: ok.
[    3.341301] Loading user settings from /media/mmcblk0p1/c2.apkovl.tar.gz...
[    3.377619] Loading user settings from /media/mmcblk0p1/c2.apkovl.tar.gz: ok.
[    4.232143] Installing packages to root filesystem...
[    5.557258] Installing packages to root filesystem: ok.
[   13.281481] meson_ee_pwrc c883c000.system-controller:power-controller: sync_state() pending due to c9410000.ethernet
[   18.229705] loop0: detected capacity change from 0 to 509712
[   19.928765] stmmaceth c9410000.ethernet: IRQ eth_wake_irq not found
[   19.928792] stmmaceth c9410000.ethernet: IRQ eth_lpi not found
[   19.928800] stmmaceth c9410000.ethernet: IRQ sfty not found
[   19.928909] stmmaceth c9410000.ethernet: PTP uses main clock
[   19.929231] stmmaceth c9410000.ethernet: User ID: 0x11, Synopsys ID: 0x37
[   19.929252] stmmaceth c9410000.ethernet: 	DWMAC1000
[   19.929261] stmmaceth c9410000.ethernet: DMA HW capability register supported
[   19.929268] stmmaceth c9410000.ethernet: RX Checksum Offload Engine supported
[   19.929274] stmmaceth c9410000.ethernet: COE Type 2
[   19.929281] stmmaceth c9410000.ethernet: TX Checksum insertion supported
[   19.929288] stmmaceth c9410000.ethernet: Wake-Up On Lan supported
[   19.929564] stmmaceth c9410000.ethernet: Normal descriptors
[   19.929582] stmmaceth c9410000.ethernet: Ring mode enabled
[   19.929589] stmmaceth c9410000.ethernet: Enable RX Mitigation via HW Watchdog Timer
[   20.249379] Registered IR keymap rc-odroid
[   20.263322] IR NEC protocol handler initialized
[   20.284506] rc rc0: meson-ir as /devices/platform/soc/c8100000.bus/c8100580.ir/rc/rc0
[   20.284665] input: meson-ir as /devices/platform/soc/c8100000.bus/c8100580.ir/rc/rc0/input0
[   20.284847] rc rc0: sw decoder init
[   20.284920] meson-ir c8100580.ir: receiver initialized
[   20.308460] platform-mhu c883c404.mailbox: Platform MHU Mailbox registered
[   20.452494] dwc2 c9100000.usb: supply vusb_d not found, using dummy regulator
[   20.452658] dwc2 c9100000.usb: supply vusb_a not found, using dummy regulator
[   20.504703] dwc2 c9100000.usb: DWC OTG Controller
[   20.504745] dwc2 c9100000.usb: new USB bus registered, assigned bus number 1
[   20.504787] dwc2 c9100000.usb: irq 43, io mem 0xc9100000
[   20.504991] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 6.18
[   20.505002] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[   20.505010] usb usb1: Product: DWC OTG Controller
[   20.505017] usb usb1: Manufacturer: Linux 6.18.1-0-lts dwc2_hsotg
[   20.505024] usb usb1: SerialNumber: c9100000.usb
[   20.505695] hub 1-0:1.0: USB hub found
[   20.505742] hub 1-0:1.0: 1 port detected
[   20.781387] usb 1-1: new high-speed USB device number 2 using dwc2
[   20.956690] usb 1-1: New USB device found, idVendor=05e3, idProduct=0610, bcdDevice=32.98
[   20.956713] usb 1-1: New USB device strings: Mfr=0, Product=1, SerialNumber=0
[   20.956721] usb 1-1: Product: USB2.0 Hub
[   20.960535] hub 1-1:1.0: USB hub found
[   20.960938] hub 1-1:1.0: 4 ports detected
[   21.400017] NET: Registered PF_PACKET protocol family
[   22.049733] stmmaceth c9410000.ethernet eth0: Register MEM_TYPE_PAGE_POOL RxQ-0
[   22.126395] stmmaceth c9410000.ethernet eth0: PHY [stmmac-0:00] driver [RTL8211F Gigabit Ethernet] (irq=38)
[   22.141555] stmmaceth c9410000.ethernet eth0: No Safety Features support found
[   22.159969] stmmaceth c9410000.ethernet eth0: PTP not supported by HW
[   22.160000] stmmaceth c9410000.ethernet eth0: configuring for phy/rgmii link mode
[   25.021598] stmmaceth c9410000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx
[   27.551668] fbcon: Taking over console
# cat /etc/os-release 
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.23.2
PRETTY_NAME="Alpine Linux v3.23"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://gitlab.alpinelinux.org/alpine/aports/-/issues"