I am also not super happy with it, but: HDMI indeed regularly broke on this board, so I can understand that for this old board with low support state keeping things functional with a frozen kernel is pragmatic. This was not done or approved by the official Armbian Odroid C1 board maintainer, though.
It should not break DKMS, as the headers are kept omin sync. The headers package was upgraded as well, right?
That said, we could unfreeze the kernel in our fork. But would be good if someone could test HDMI then.
I am currently using this SBC as headless server, I was not even aware that the HDMI support was there at all (it never worked for me in the past since the adoption of a mainline kernel, I stopped bothering about it long time ago).
In any case yes, I upgraded the headers file as well.
The dkms module that fails to compile with the latest kernel package is: https://github.com/lwfinger/rtw88, while it compiles fine with the previous one.
Out of curiosity I plugged in a mini-HDMI cable into the C1 and, as expected, i did not get any signal on the connected monitor (however I have now the kernel on-hold on the latest version that is working for me).
rtw88 is in mainline Linux, and Armbian patches support for some additional chips into it, supported in more recent Linux versions. Are you missing a particular sub driver that you need to compile it from source?
So you mean it does not work with v6.12.74? That is probably the very reason it got downgraded.
.max_hdmi_phy_freq now takes values in Hz instead of kHz, as can be seen from “1650000000” => “1650000” revert. The patch still uses kHz values, which will break things for affected chips. However, the Odroid C1 is meson8b, hence should not match the patched value, but instead the value present upstream. That patch is for other SBCs which we do not directly support. But I am still sure that this commit is the issue, would need to check other patches which do affect the Odroid C1.
I can then raise that to v6.12.33, which does not contain mentioned commit yet, to test whether HDMI still works, narrowing things down.
I can then raise that to v6.12.34, fixing the .max_hdmi_phy_freq value of the patch to be in Hz, and in case fix other patches which were broken by this.
I need the dkms module for a Wi-Fi dongle based on RTL8811AU. Currently this dkms driver worked pretty well.
My understanding is that the mainline driver is available only in kernel > 6.14.
Indeed, I just plugged in the HDMI cable connected to an external display: nothing showed up. I have not checked if anything needed to be changed in the settings or on the software side though…
At the moment I have marked the kernel/header for holding.
I will have physical board availability only for few days at the end of the week (then I will only have remote access for some time).
Unfortunately my setup is not ideal for troubleshooting, I also do not have always possibility of using an Ethernet connection and this make more difficult to experiment on the networking side.
What I would prefer honestly is not to remain blocked on an old kernel which might have other downsides long term…
At least worth to test when you have physical access, e.g. by moving the DKMS driver out of the way, doing a reboot, and if WiFi is unexpectedly does not work anymore, move it back. But if it does as expected, you can remove DKMS.
I’ll at least prepare a v6.12.33 kernel build, and have a look into possible reasons v6.12.34 breaks HDMI on thay board.
Tried it today, unfortunately no joy.
When removing the dkms driver, after a reboot the dongle is still recognized by lsusb, however no driver is loaded at boot (dietpi-config is also not recognizing any wireless extension).
When searching for rtw8* in the available modules list, this is what I am getting (I do not see the rtw_8821au):
What is the expected effect of this command? I am not sure it worked correctly since I only got an SSH disconnection upon execution.
In any case, I installed the new packages set (kernel image, headers, firmware) and removed the dkms driver, unfortunately the Wi-Fi dongle is still not working after a reboot (“No WiFi adapter was detected on your device”).
On the newer kernel this is the dkms module compilation error:
Building module(s)
# command: KVER=6.12.28-current-meson 'make' all
make -j3 -C /lib/modules/6.12.28-current-meson/build M=$PWD modules
make[1]: Entering directory '/usr/src/linux-headers-6.12.28-current-meson'
warning: the compiler differs from the one used to build the kernel
The kernel was built by: arm-linux-gnueabihf-gcc (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0
You are using: gcc (Debian 15.2.0-16) 15.2.0
CC [M] /var/lib/dkms/rtw88/0.6/build/main.o
CC [M] /var/lib/dkms/rtw88/0.6/build/led.o
CC [M] /var/lib/dkms/rtw88/0.6/build/mac80211.o
/var/lib/dkms/rtw88/0.6/build/main.c: In function ‘rtw_sband_dup’:
/var/lib/dkms/rtw88/0.6/build/main.c:1769:25: error: implicit declaration of function ‘devm_kmemdup_array’; did you mean ‘devm_kmalloc_array’? [-Wimplicit-function-declaration]
1769 | dup->channels = devm_kmemdup_array(rtwdev->dev, sband->channels,
| ^~~~~~~~~~~~~~~~~~
| devm_kmalloc_array
/var/lib/dkms/rtw88/0.6/build/main.c:1769:23: error: assignment to ‘struct ieee80211_channel *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
1769 | dup->channels = devm_kmemdup_array(rtwdev->dev, sband->channels,
| ^
/var/lib/dkms/rtw88/0.6/build/main.c:1776:23: error: assignment to ‘struct ieee80211_rate *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
1776 | dup->bitrates = devm_kmemdup_array(rtwdev->dev, sband->bitrates,
| ^
make[3]: *** [scripts/Makefile.build:229: /var/lib/dkms/rtw88/0.6/build/main.o] Error 1
make[3]: *** Waiting for unfinished jobs....
make[2]: *** [/usr/src/linux-headers-6.12.28-current-meson/Makefile:1949: /var/lib/dkms/rtw88/0.6/build] Error 2
make[1]: *** [Makefile:224: __sub-make] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-6.12.28-current-meson'
make: *** [Makefile:193: all] Error 2
I had to revert to the last compiling one: 26.02.0-trunk-dietpi4 (6.12.74).
Additionally, I noticed that the description of linux-image-current-meson (from 26.02.0-trunk-dietpi2 to 26.05.0-trunk-dietpi1) is:
Armbian Linux current kernel image 6.12.34-current-meson
Which is not matching the real version provided by the package.
Step by step, first I assured the intended kernel modules are present, as this should render DKMS obsolete for you, and the bug with the wrong patch names affected all Linux 6.12 builds for all SBCs (on Linux 6.18 the patch is obsolete, would fail, which was never recognized as it was never applied due to the bug).
Regarding lifting the kernel version freeze: did you find time to test HDMI with this Linux 6.12.28? I just want to assure we do not try to debug why more recent Linux breaks HDMI, if it was broken before already. I do not trust Armbian commit/PR texts stating that this or that works or was fixed, as this has been quite often false, or a matter of more/other conditions, or incomplete conclusion logic. Hence better to test the actual state, before investing time.
@MichaIng, sorry I misunderstood how to test the newer packages earlier and I ended up using the version uploaded in the dietpi apt repository.
The command G_DEV_TEST_FIRMWARE apparently it is not working for me (it is just kicking me out of the SSH session). Anyhow, I have installed the .deb manually from the URL you provided:
WiFi: the dongle now works without the dkms driver (very good, thanks! ), even if the built-in led is not blinking anymore by default ().
HDMI: at the first boot I got a very garbled output with unreadable text (I was already impressed). After a reboot I got a perfect readable console output (!), however after another reboot I got the garbled output again. The results seem a bit unpredictable, and the hot-plug of the HDMI cable is not helping apparently ().
Interesting, can you test this again in a subshell?
bash
G_DEV_TEST_FIRMWARE
And are you executing it as root or unprivileged user? It internally calls itself with sudo if executed as unprivileged user, but maybe this process has an oversight if e.g. the user has no sudo or so, that exits the shell instead of just returning the function.
The WiFi dongle has a builtin LED? Is that exposed at /sys/class/leds, i.e. in dietpi-led_control?
Interesting, are the characters themselves garbled, or is there heavy tearing, like horizontal pixel rows disarranged or similar? Maybe changing the resolution and/or frequency in /boot/boot.ini helps. It seems to be hardcoded to 1080p@60Hz. Hotplug-detection can be disabled there (to force output), maybe this helps to mitigate some init steps, if the HDMI signal is weak or flaky. Also I do wonder whether these /boot/boot.ini settings do all still work . E.g. does the monitor appear below /sys/class/drm and in dietpi-display, as DRM device?
The dongle has a small blue built-in led which was blinking when the connection was established with the dkms driver.
As far as I can see the led is not exposed:
$ ls -l /sys/class/leds
total 0
lrwxrwxrwx 1 root root 0 Apr 12 18:08 c1:blue:alive -> ../../devices/platform/leds/leds/c1:blue:alive
Seems more like the second scenario, not a problem of the characters themselves, but rather pixels shifted and/or not properly aligned. The monitor I used support correctly 1080p@60Hz.
$ ls /sys/class/drm
card0 card1 card1-HDMI-A-1 renderD128 version
Changing any setting in dietpi-display result in this error:
[FAILED] Boot configuration not found
Changing resolution in /boot/boot.ini also does not seem to work.
The reason why the session SSH session was exited is that the function, assuming it run within a script, runs exec sudo "$0" "$@", i.e. it replaces the parent shell with the sudo call. Good to avoid a nested subshell, but bad it the parent shell was not a script but interactive .
I thought so, i.e. some signal issue or so. Even if the monitor supports 1080p@60Hz, it is possible that the output signal is too weak, the cable too long, or so.
Maybe those only worked in a much older vendor kernel then. That it is exposed as DRM device is another indicator that all/most of those HDMI related boot configs are obsolete.
Ah that is a pity! Thanks for the investigation and the effort spent up to now!
Do you think that the C1 will never move away from the 6.12.XX branch then?
Well, I would consider having the WiFi dongle’s led working, more like a nice-to-have rather than a strict requirement, surely not an high-priority task; indeed as you suggested it is more valuable to get rid of the dkms and compilation burden.
That said, I have no idea if it could be expected that the driver which was compiling fine on 6.12.74 is not with 6.12.28.
Chances are very low. That the kernel was frozen to a 2 years old version instead of fixing whatever broke HDMI in newer ones, is telling. The device is too old, with too low relevancy to invest a lot of time.
I suspect the kernel code to be too old for the DKMS driver code.
As a first step, I raised the frozen kernel version to 6.12.33, which, if my guess about the culprit commit breaking HDMI was correct, should still have functional HDMI: Armbian · MichaIng/DietPi@5cc81b5 · GitHub
Once done, please test again with
G_SUDO G_DEV_TEST_FIRMWARE
or manual download+install as before. However, the G_SUDO should workaround the bug you faced.