The system calls Python package used to load tables for all architectures into memory
on each import. Nowadays, it only loads tables for the requested architectures.
The first kernel version for a system call
A few months ago, Tom Hromatka
posted Request for Enhancement (RFE) for the “seccomp” project,
to add support for the maximum supported kernel version. I left some comments
and, since then, I have had an idea of adding information about the kernel
version when a system call first appeared.
Release plans
Merged changes will be released in 6.17.0 version — a few days after Linux 6.17 release.
Those who follow my blog are already aware that I love and listen to “Made in Hungary” high-end audio gear: https://peter.czanik.hu/posts/zsolt-audio-turns-40-this-year/. This weekend I visited Zsolt Audio again. He showed us his latest creation, a pair of speakers, which he called “no-name” and “anti-marketing”.
The Zsolt Audio listening room However, when I arrived at today’s event, music was still playing on another pair of loudspeakers. Last time I wrote about a pair of classical floor-standing speakers, a reincarnation of the StandArt line of loudspeakers.
Whenever I present syslog-ng at a conference or I stand next to a booth, people often ask me why should they use syslog-ng instead of one of its competitors. So let me summarize what the users and developers of syslog-ng typically consider as its most important values.
Documentation Yes, I know, this is not syslog-ng itself. However, talking to some of our most active and loyal users, one common feedback was that they had chosen syslog-ng because of the quality of its documentation.
The August syslog-ng newsletter is now on-line:
Deprecating Java-based drivers from syslog-ng: Is HDFS next?
Your first steps configuring syslog-ng
Prometheus exporter in syslog-ng
It is available at https://www.syslog-ng.com/community/b/blog/posts/the-syslog-ng-insider-2025-08-hdfs-configuration-prometheus
syslog-ng logo
Recently, several people have asked me about the syslog-ng project’s view on Artificial intelligence. In short, there is cautious optimism: we embrace AI, but it does not take over any critical tasks from humans. But what does this mean for syslog-ng?
Read more at https://www.syslog-ng.com/community/b/blog/posts/syslog-ng-development-and-ai
syslog-ng logo
Whenever people use a non-x86 system, sooner or later someone asks: “But can it run
[name of x86-64 only binary]?”. So, let’s check how to make it possible.
It is a good thing to read to understand the stack. But if your Arm system runs
a 4K page size kernel, then most of that documentation can be skipped. You would
not need muvm nor binfmt-dispatcher packages.
What you need is FEX-emu, and nothing else, as it recommends all required components.
To make it easier, I recommend removing some of QEMU packages:
dnf remove qemu-static-* so only FEX-emu will be used for running foreign
architecture binaries.
Checking emulation
Installing FEX-emu should also install the Fedora/x86-64 rootfs. So, let check
if emulation is working:
$ uname -m
aarch64
$ FEXBash "uname -m"
erofsfuse 1.8.9
<W> erofs: /usr/share/fex-emu/RootFS/default.erofs mounted on /run/user/1000/.FEXMount2262322-Fjd32T with offset 0
x86_64
If you have errors at this stage, then check what you have in the
/usr/lib/binfmt.d/ directory. There should be only two files:
That’s the level of an Intel Atom CPU from 2021. My AMD Ryzen 5 3600 has much
better results.
Can it be better?
I asked FEX-Emu developers a few days ago with this kind of question. There are
several Arm CPU features that can be used to make emulation faster:
Section
Features
Crypto
AES, CRC, SHA, PMULL
TSO emulation
Apple Silicon TSO bit, LRCPC, LRCPC2, LSE2
Flags stuff
AFP, FlagM, FlagM2
Atomic operations
LSE
Misc
FCMA, FRINTTS, RPRES, SVE, SVE_bitperm
Future
RCPC3, CSSC, RAND
The Ampere Altra is an old, Arm v8.2 CPU. Its Neoverse-N1 cores are from 2019
and can support only a small subset of entries from the table above: all crypto
ones + LSE and LRCPC.
Tips and tricks
After publishing post I got some additional hints from FEX-emu folks to make
emulation a bit faster.
One is reducing precision of x86 FPU, second is disabling TSO. So my
configuration file (“~/.fex-emu/Config.json”) looks like this now:
This gave Factorio a visible speed-up. Cannot compare Geekbench results cause it
crashes randomly after configuration changes.
Steam
Now that we have sorted out software, let’s start with games (because what else
would you do with x86(-64) emulation?). Which usually means Steam.
First of all, we need Steam package. I took it from the
RPM Fusion non-free
page. The next step is installation. This is done without dependencies (those
will be provided by the FEX-emu rootfs), and we need to tell RPM that the
architecture of the package is not that important:
The next step is the Steam installation, where we run it under emulation:
FEXBash steam
It can take some time, but at the end you should get the Steam window:
Steam
So now we are ready to play some games, right?
Factorio
As you may know from one of my previous posts,
I am addicted to the the Factorio game. So how it goes on an Ampere Altra-based system?
Factorio
Let me be honest: without tweaking FEX-Emu config it was unplayable. At least
not with my saved games, in 3440x1440 resolution. What was 60/60 on a Ryzen 5
3600 went to 8-11/59.5 ;(
After tweaking FEX-Emu configuration Factorio started to be more playable. In
areas with many robots it was running at 16-25 FPS and there were moments with
close to 60/60 but it had to be close zoom to deserted area. I may consider
attempt to finish game during 100 hours.
At first, I built the ALTRA8UD-1L2T firmware without using Ninja. It took 30
seconds (11 minutes of total CPU time). Then I did a run with Ninja. It took
2 minutes (72 minutes of total CPU time).
Hmm… It should be much faster. I retried and looked at the htop window. And I
saw a lot of “FEXInterpreter” lines… So it was running in emulation.
I then replaced the x86-64 binary of Ninja with a symlink to the aarch64 one, and
then it was a visible improvement.
I commented on the pull request with a NAK.
Is it worth using?
So, the final question is: “Is it worth using x86(-64) emulation at all?”…
I do not plan to use it much. I may try to play some older games like Torchlight
II, which I managed to run once and then it stopped working.
There are multiple syslog protocols with multiple variants. The new transport(auto) option of the syslog() source in syslog-ng allows you to support all TCP-based variants with a single source driver.
When it comes to syslog, there are many transport options. RFC3164 describes the “legacy” or “BSD” syslog protocol, while RFC5424 refers to the “new” syslog protocol (which is also more than a decade old now… :-) ). RFC5424-formatted messages normally come with framing or octet counting (as per RFC6587), where messages are prefixed with the length of the message.
The IBM POWER architecture is not just for database servers. While most people know it only for DB2 and SAP HANA, it is an ideal platform also for HPC or other high performance server applications, like syslog-ng.
While all the buzz is around POWER 11 now, we have yet to see real-world testing results, as GA is still a few weeks away. You can learn more about POWER 11 at https://newsroom.
Last year, I wrote a small configuration snippet for syslog-ng: FreeBSD audit source. I published it in a previous blog, and based on feedback, it is already used in production. And soon, it will be available also as part of a syslog-ng release.
As an active FreeBSD user and co-maintainer of the sysutils/syslog-ng port for FreeBSD, I am always happy to share FreeBSD-related news. Last year, we improved directory monitoring and file reading on FreeBSD and MacOS.
Now, with my Altra-based system, I decided to try it again.
Hardware used
Compared to the Pinkiepie (the Mustang), Wooster (the current system) looks beefy:
component
Pinkiepie
Wooster
cpu model
X-Gene 1
Altra Q80-30
core model
X-Gene 1
Neoverse-N1
core arch
v8.0
v8.2
core count
8
80
memory speed
1866 MHz
3200 MHz
memory amount
16 GB
128 GB
storage
SATASSD (500 MB/s)
PCIe 4.0 NVME (6200 MB/s)
graphics card
Radeon HD5450
Radeon RX6700XT
resolution
1920x1080
3440x1440
Both systems ran the latest, stable release of Fedora with the KDE desktop.
Generic use
I started by rsyncing my home directory from Puchatek (my x86-64 desktop) to
Wooster (the AArch64 system). To have the same environment in both places. Of
course, I had to replace a few binaries in the ~/.local/bin directory with their
AArch64 equivalents. And I regenerated some Python virtual environments.
The desktop worked as before, Thunderbird fetched mail and sent it, files could
be edited in Neovim-qt as before etc.
Films from the local NAS share worked just fine using the same “mpv” as on Puchatek.
Multimedia online
But then you realise that it would be nice to listen to some music. For several
reasons, I am using Spotify for this. And their app is x86-64 only…
Firefox refused to play anything. So did Chromium. I Installed the
“widevine-installer” package, ran one command and, thanks to binaries from
ChromeOS, both web browsers started playing. But Firefox was stopping after each
song, so I had to revert to Chromium for it. Widgets on the KDE Plasma desktop
recognised it, and I had information and playback controls embedded in the top panel.
Films on streaming services
But what about films on streaming services? Well, let me create a table, as I was
surprised by the results:
Streaming service
Firefox
Chromium
Amazon Prime Video
Works
Works
Disney Plus
Works
Works
Max
Works
Works
Netflix
Fails (E100)
Fails (E100)
YouTube
Works, up to 4320p
Works, up to 1440p*
Chromium
For Chromium it depends which build of it you are using. I used Fedora
package and then was pointed to Flathub build of
Chromium as better one.
Flathub’s Chromium plays 2160p videos on YouTube and does not have an option to
choose higher resolutions so I could not test 4320p ones.
Again, let make a table of “Graphics Feature Status” information:
Entry
Fedora build
Flathub build
Canvas
Software only
Hardware accelerated
Direct Rendering Display Compositor
Disabled
Disabled
Compositing
Software only
Hardware accelerated
Multiple Raster Threads
Enabled
Enabled
OpenGL
Disabled
Enabled
Rasterization
Software only
Hardware accelerated
Raw Draw
Disabled
Disabled
Skia Graphite
Disabled
Disabled
TreesInViz
Disabled
Disabled
Video Decode
Software only
Hardware accelerated
Video Encode
Software only
Software only
Vulkan
Disabled
Disabled
WebGL
Software only
Hardware accelerated
WebGL2
Software only
Hardware accelerated
WebGPU
Disabled
Disabled
WebNN
Software only
Disabled
WebGL
How does the 3D hardware acceleration situation look? I tested it with
the WebGL Aquarium.
Amount of fish
Firefox
Chromium/Fedora
Chromium/Flathub
1
75
18
75
1000
75
9
75
5000
42-71
4
29-37
10000
33-39
1
15-17
I do not remember numbers I got with the same graphics card in my x86-64 system.
To be continued…
I am planning to write a few more posts about using my Ampere Altra-based system
as a desktop. So stay tuned.
Last week, I was in Nürnberg for the openSUSE conference. The project turned 20 years old this year, and I was there right from the beginning (and even before that, if we also count the S.u.S.E. years). There were many great talks, including a syslog-ng talk from me, and even a birthday party… :-)
This year marks not just 20 years of openSUSE but also a major new SLES and openSUSE Leap release: version 16.
In the hunt for a development machine, I got to the next phase. I did some
shopping, and there it is: my own Ampere Altra-based system.
Why?
As you may have read in my previous post,
I used several AArch64 systems for local development. And the latest one, an
Apple MacBook Pro, is nice and fast but has some limits — does not support 64k
page size. Which I need for my work.
Let’s go cheap
So I have decided to buy myself an Ampere Altra system. As cheap as possible.
AArch64 server parts
The only part I needed to buy brand new was a motherboard. And the only
“affordable” one was AsrockRack ALTRA8BUD-1L2T,
which was a product for data centres (so I was told).
Next, a used processor. At first, the idea was to buy a Q64-22 (64 cores,
2.2 GHz clock), but when the seller on eBay was not responding, one of my friends
decided to upgrade his Altra systems and offered me a Q80-30 (80 cores, 3.0 GHz clock).
The CPU requires cooling. There are not many options for the LGA 4926 socket. I
found an Arctic Freezer 4U-M in one of the online stores here in Poland and
bought the only one they had.
Each computer needs memory, right? So I went with used ones again, as there is a
huge market for used server parts.
I bought eight sticks of 16GB each; the model is SK-Hynix HMA82GR7CJR8N-XN.
It is not present on the official Ampere
Altra memory Approved Vendor List.
The rest of the parts are ordinary ones available in any random store.
Computer case
The case was a challenge. The ALTRAD8UD-1L2T is a “deep MicroATX” case which
means I needed a case that can take an EATX motherboard (they are a bit deeper
than ATX).
I looked through pictures in online stores and selected about 10 candidates. Then
I started watching reviews and crossed several of them out. Usually because the
holes for handling cables were too close to the edge of a board.
Finally, bought an Endorfy 700 Air case. It came with five 120mm fans (3 at the
front, one at the rear, and one on the top). There was a lot of space behind
the motherboard’s plate for cabling, and a fan splitter so I could connect all
five case fans as one to the motherboard.
And the PSU compartment has an extra hole for PCIe power cables!
Power supply
The ALTRAD8UD-1L2T motherboard is expected to be powered by a 12V PSU only.
There is no connection port for the ATX 24-pin plug. Instead, there is an
adapter that takes only power-on and power-good signals from it and connects to
the small 4-pin port on the motherboard.
There are three EPS12V connectors available. I used two of them. The MSIMPGA850G power supply I bought comes with two such cables and has an option for
connecting the third one.
The rest
What else is needed? Some NVME for storage (Lexar LM7902TB) and a random
graphics card (Radeon Pro WX2100, remembering the old times).
And I was ready to build the system.
How does it look?
The motherboard feels small once the CPU cooler is mounted. And a low-profile
graphics card is almost invisible:
Inside view
The back side of the case shows where I hid the ATX 24-pin adapter and most of
the cables.
Back side with cabling
Price
Of course, if I went cheap, then how cheap did it end up being?
Component
Price in PLN
motherboard
4 068
CPU
1 341
CPU cooler
191
memory
696
case
395
power supply
529
NVME
522
In total: 7 732 PLN (around 1 800 EUR). About 500 EUR more than I anticipated at first.
The CPU upgrade to 80 cores was extra 100 EUR. Memory came from another seller,
as the first one ended their sale before I was ready to buy, resulting in an
extra 40 EUR to the cost.
At first, I wanted to have 2GB per core, but with the CPU upgrade, I would have
needed to go to 256 GB, and that would have been another 250-300 EUR extra.
The case had a 30% discount due to a promotion, and the NVME came with 7% cashback.
Plans
My current plans for this system are:
install Fedora 42
create some VM instances:
RHEL 9/10
CentOS Stream 9/10
put a Radeon RX6700XT inside and check whether it would work
try to use it as a desktop
do some crazy experiments
All Linux systems will have both 4k and 64k page size kernels.
Since I started working on AArch64 in 2012, I had been searching for a hardware
system capable of meeting my development needs at home.
Pinkie Pie
In 2014, I got Applied Micro Mustang for home use.
I named it “pinkiepie” because I use cartoon-character names for all
systems I manage. As both mustangs and ponies are types of horse, I decided
that Pinkie Pie from My Little Pony was a good name.
This system served me for several years. With 8 cores, 32 GBRAM, and a SATASSD
for storage, it was enough to build RHEL, Fedora, Debian packages — both for
AArch64 and 32-bit armhf.
It failed in 2020, was briefly
operational again, but has remained non-operational since then.
Jagular
In 2021, I acquired Solidrun HoneyComb. With
sixteen Cortex-A72 cores, 32 GBRAM, and SATASSD from Pinkiepie, it served as my
development machine.
Jagular’s name came from Winnie the Pooh, as this system was my own (unlike
Mustang, which was Red Hat property).
After the installation of Fedora Asahi Remix on the MacBook, I moved Jagular to
storage. And sold it in 2025.
Radxa Orion C6
At the end of 2024, Radxa announced “World’s First Open Source Arm V9
Motherboard”. Several people sent me a link to it. I checked the details and
decided to wait for any delivery of source code for this platform.
It took them months to release anything. An old (6.1.44) version of the Linux
kernel, a copy of EDK2 sources with 23 megabytes of binary blobs.
The good part was that this SBC was capable of running mainline Linux in ACPI
mode. Still, the situation regarding it was far from what their slogan promised…
There were “Arm V9” systems before it, so it was not “World’s First”. There were
several blobs needed to run it, so it was not “Open Source”.
I was following discussions on their forum and had a feeling that the more I
read, the more I postpone my order.
RHEL and 64k page size
After leaving Linaro, I started
working on Red Hat Enterprise Linux (RHEL) again. And while most things can be
tested in virtual machines on Applejack, some tasks require booting 64k page
size kernels — which the Apple M1 Pro is not capable of doing.
As a temporary solution, I used remote boxes from the Red Hat lab, but it was
not a good solution in the long term.
So I started searching again.
Ampere Altra?
In May 2024, I was one step from spending 3000 EUR on Ampere Altra-based
workstation — the typical 64-core system with 128 GB of RAM.
I did not buy it because at that time I was looking at it as an Arm desktop.
Which, at that time, it was far from — issues with AMD cards under Linux
required patching the kernel with out-of-tree patches.
Time passed, and I looked at it from different perspective — as “a tool”.
You see — I split computer systems into two categories: tools and toys.
Tools
Computer systems that have to do their job are tools. My x86-64 desktop is a
tool. The same with my x86-64 NAS, or my work laptop.
Those systems have their purposes and have to work. No tricks with firmware or
operating systems, no self-built kernels.
Toys
Some of my computer systems are toys — I do not expect them to be stable, I do
not keep any important data on them. This is where most of my Arm SBCs
(Seriously Bad Computers) are.
FriendlyElec NanoPC-T6 LTS on my desk is a perfect example. At this moment, it
is offline and waits for firmware reflashing because I flashed the wrong file
two weeks ago. And many times I have run my own kernels on it to check some
out-of-tree patches adding support for hardware features.
I got a few people interested, tried to find a way for some kind of discount and
started ordering parts. During the next few weeks I will build myself yet
another development machine. For my own use, at home.
A few days ago, I was asked “Do you use AI?”. I also noticed some recent blog
posts and emails about it.
So let me explain how I use AI on this blog.
Grammar stuff
If you look through this blog’s archives you may see how terrible
my English grammar used to be (not that it is particularly good nowadays). Back
in 2010 I started attending English lessons to improve both my grammar and
vocabulary. And it paid off.
Still, my writing style can be described as ‘Hrw English’. I try to keep it
British English rather than American (I learnt the British version throughout my
formal education). My vocabulary includes words from American, Australian and
other variants.
Take text below, fix grammar to British English and show changes side-by-side
So let take some examples from the result:
Original
ChatGPT
Some time ago my right arm started to hurt. In the beginning it was a bit annoying but then got serious. So I went to orthopaedist.
Some time ago, my right arm started to hurt. At first, it was a bit annoying, but then it became serious. So, I went to an orthopaedist.
MRI was the other thing. My daughter told me already that I need to be prepared for loud annoying noise. What I was not prepared was some shitty pop played over some shitty headphones. zOMG…
The MRI was a different matter. My daughter had already told me to expect loud, annoying noise. What I wasn’t prepared for was some dreadful pop music played over equally dreadful headphones. zOMG…
I know that those headphones have to be as plastic as possible to survive inside of MRI machine but next time I will ask for not playing anything.
I know the headphones have to be made entirely of plastic to survive inside the MRI machine, but next time I’ll ask them not to play anything.
BTW: Can anyone recommend some good Linux application for watching DICOM images (other than AlizaMS)?
By the way, can anyone recommend a good Linux application for viewing DICOM images (other than AlizaMS)?
Most of cases are related to professional sport people. A group where I do not belong.
Most cases are related to professional athletes—a group to which I definitely do not belong.
I promised my daughter some trips during summer vacations. One set of attractions will slip for 3rd time.
I promised my daughter some trips during the summer holidays. One set of attractions will be postponed for the third time.
Review of suggestions
So what do we have here? Some vocabulary changes like “professional sport people”
-> “professional athletes”, the usual missing “a/an/the”, more commas, work
order changes etc.
I review the suggestions and choose some of them: vocabulary tweaks, missing
articles and some word order changes. Most of the time I ignore punctuation
related ones as I always had problems with commas — never mind which language I
was writing in.
I am leaving several errors as they were — I wrote that text so let it show my
mistakes instead of hiding them. And I prefer to use ‘some’ rather than ‘few/a
few’ as I always forget when to use which ;D
Style variations
After some updates I got question:
Let me know if you’d like it shortened, rephrased in a more humorous or
technical tone, or formatted for a specific blog engine like Hugo, Ghost, or WordPress.
Fun starts with mixing all of them:
updated text below. give me British English version, differences side-by-side
and then more technical tone version and more causal one plus more humorous
one. render markdown
Look how one sentence can change:
So, let me explain how I use AI on this blog.
In this post, I’ll outline how I integrate AI into the workflow of this blog.
So, here’s a quick explanation of how I use AI on this blog.
Yes, I use AI. But not for evil. Mostly.
Those are original, technical, causal, humorous versions.
I have to admit that the ‘more technical tone’ version was a bit too much for
me. It looked completely different from my writing style. Anyway I read it twice
and took some wording from it. The ‘more causal’ version looks what I could
write but still not quite my style. And the humorous version is pure fun to read
but nothing to copy from it.
Conclusion
Will I continue to use of AI on this blog? Probably yes. It gives me good
suggestions and fixes some of my language/grammar mistakes. And I do not have to
apply all the changes so text keeps my style.
Is it a way for other people? No idea but I recommend giving it a try and seeing
it for yourself. The results can be interesting.
Some of my readers may say that I’ve always had a problem with Arm. The company,
the architecture, the ecosystem etc.
But today I have some other problem. With arm.
Beginning
Some time ago my right arm started to hurt. At first, it was a bit annoying but
then got serious. So I went to an orthopaedist.
Orthopaedist
“Please stand up, please stand up” and then started moving my arms in various
ways. We wrestled a bit, I did that “fasten your bra” move and the diagnosis
was clear: I had a problem with my arm.
I received some sick leave and a list of imaging tests to do.
Imaging
I went through the standard imaging flow:
RTG (X-ray)
USG (Ultrasound)
MRI (Magnetic Resonance Imaging)
I visited a few places and received some optical media with images (and
some in physical form).
The RTG and USG were simple. I have done them many times before.
The MRI was another matter. My daughter had already told me to be prepared for
loud, annoying noise. What I was not prepared for was some awful pop music
played through dreadful headphones. zOMG… I know that those headphones have to
be as plastic as possible to survive inside the MRI machine but next time I will
ask them to not play anything.
BTW: Can anyone recommend a good Linux application for watching DICOM images
(other than AlizaMS)?
Second visit to orthopaedist
“Looks like you have SLAP (Superior Labrum Anterior Posterior).” Yay…
Most cases are related to professional athletes — a group to which I definitely
do not belong.
I think I need to rethink my life desk setup.
But first have to sort out stuff and how my summer time will look like.
Rehabilitation, exercises, handling things with only one arm (not my dominant one).
So if you would like me to do something for you before September then consider
postponing as I may not be ready for it.
Summer holidays
I promised my daughter some trips during summer break. One set of attractions
will be postponed for 3rd time. We have some conventions to attend and they
should be safe.
The trip to visit my mother will be more difficult. No way to drive a car means
that I will have to rely on public transport. In area where it sucks. Should be
fun (for some sick definition of “fun”).
I regularly visit Seoul, and for the last couple of years I've been doing segments from the Seoul Trail, a series of walks that add up to a 150km circuit around the outskirts of Seoul. If you like hiking I recommend it, it's mostly through the hills and wooded areas surrounding the city or parks within the city and the bits I've done thus far have mostly been very enjoyable. Everything is generally well signposted and easy to follow, with varying degrees of difficulty from completely flat paved roads to very hilly trails.
The trail had been divided into eight segments but just after I last visited the trail was reorganised into 21 smaller ones. This was very sensible, the original segments mostly being about 10-20km and taking 3-6 hours (with the notable exception of section 8, which was 36km) which can be a bit much (especially that section 8, or section 1 which had about 1km of ascent in it overall). It does complicate matters if you're trying to keep track of what you've done already though so I've put together a quick table:
Original
Revised
1
1-3
2
4-5
3
6-8
4
9-10
5
11-12
6
13-14
7
15-16
8
17-21
This is all straightforward, the original segments had all been arranged to start and stop at metro stations (which I think explains the length of 8, the metro network is thin around Bukhansan what with it being an actual mountain) and the new segments are all straight subdivisions, but it's handy to have it written down and I figured other people might find it useful.
About a year ago I wrote a post about a need for a good keyboard. And that I am
thinking of making mechanical one.
During last week I built one.
Repetitive strain injury
Twenty years ago I had a problem with repetitive strain injury (RSI in short).
Typing on normal PC keyboard was quite impossible for me. Someone recommended
buying one of those “fancy” ergonomic ones. And that’s how I ended with Microsoft
Natural Keyboard Elite.
Microsoft Natural Keyboard
It was a great help. Got used to layout and my RSI problems were going away.
Then bought second one to have one at home and one at work.
During last year I looked at several keyboards. Checked KMK, QMK, ZMK and other
solutions of keyboard firmware. Watched countless videos on how to make keyboard
and read many articles about it.
One layout caught my eye: TGR Alice
as it was quite simple ergonomic one. Then found
Arisu which added cursor keys and did
some other changes. And finally Adelheid
which added function keys.
My Adelheid
As those layouts are available on MIT license I took Adelheid and altered its
layout a bit:
added Meta key
moved Backspace to were it is on PC105
moved Backslash to above Enter key
My version of Adelheid
Parts and costs
I had some parts already (ordered then to my MS4KMech project which I abandoned
in meantime) and decided that my first keyboard will be as cheap as possible:
As a way to keep costs down I printed plate in two pieces (Ender 3 table size
was a limit) and used some screws and plates to keep them together.
Soldering rows and columns
Mounted switches and started soldering. Simple diode to diode to create rows.
And it is visible that I watched some video after first 3 rows of one half ;D
Instead of forming diodes I soldered them and then use small pliers to form
rows. Later started cutting legs before soldering.
Columns were easier. Spool of kynar and stripping isolation using nails did the job.
First half of keyboard
Added a bunch of colour wires to be able to test did my soldering resulted in
something working. Grabbed Raspberry Pico from a drawer, flashed it with QMK
firmware and testing bench was ready:
Testing bench
And it almost worked! One key was not working. Turned out that diode was
soldered in wrong direction. Happens.
For second half I took a bit different strategy. Decided to solder columns
first as they took me more time than rows. Whole half went much faster then first.
Second half of keyboard
Then all that left was finding a way to connect both halves (I did not wanted to
make a split keyboard) and connect rows. I used pieces of old universal PCB and screws:
Both halves of keyboard
Connecting controller
I bought Ultimate Pico RP2040 especially for keyboard project months ago.
Compared to Raspberry Pico this board had USB-C port and one line more (GP29).
Also less GND pins so 17 GPIO lines are on one side. My keyboard has 16 columns
so this allowed me to have all columns connected on one side of board and use
second side connections for rows:
Final view of bottom side
I may do not look nice but it works :D
Powering up
I flashed QMK and started testing. Turned out that one column is not working.
Soldered wire and it was fine.
3 other keys were not working. One needed soldering but other ones looked fine.
QMK has a solution for it: “Console debugging”. I added a bit of code to
keymap.c file:
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
// If console is enabled, it will print the matrix position and status
// of each key pressed
#ifdef CONSOLE_ENABLE
uprintf("KL: kc: 0x%04X, row: %2u, col: %2u, pressed: %u, "
"time: %5u, int: %u, count: %u\n",
keycode, record->event.key.col, record->event.key.row,
record->event.pressed, record->event.time, record->tap.interrupted,
record->tap.count);
#endif
return true;
}
This allowed me to notice that both Enter and End keys are seen. Turned out that
I wrote wrong row/column values for both of them.
Mistakes
I made some mistakes with this keyboard. They were expected as usual with first attempts.
First mistake: 2mm plate. Should had do 1.5mm to make switches keep better.
Total thickness can be even 3-5 mm but with holes done in a way that
switches hold properly. Also it may make keyboard less bendy.
Second ones - holes for stabilisers. I have a few 2u - 2.75u keys and they
should get stabilisers. But I did holes in wrong way so the ones I have do not
fit. Will see how it affects keyboard use.
Third one: soldering. I do not remember when last time I soldered so many
points. So some of other are shitty. Just had to fix one more…
Tools
Community behind mechanical keyboards created many tools. Let me try to list
ones I used.
First comes QMK firmware which allows to forget about
programming microcontrollers as keyboard is done as simple JSON file and one C
file with keymap definition.
Then Keyboard Layout Editor which
allows to define layout of keys in any crazy way you want. Raw data from it is a
base for several other tools.
Keyboard Firmware Builder is a simplest way to manage
wiring of keyboard. You paste raw data from previous tool and start simplifying
wiring. It can also generate ready to use QMK firmware images for several
popular micro controllers (but no RP2040 I used).
Plate & Case Builder also takes layout data. And
allows to choose switch/stabilizer types plus a bunch of other options. Then
generates plate for your layout with option to download it in SVG, DXF, EPS file
formats. I took SVG, extruded to 2mm and had a base plate for 3d printing.
Was it worth the time?
The question for the end: was it worth the time? I think that it was. Learnt new
things, got something working. Something I did on my own. Sure, it is far from
being perfect but gives me area for improvements.
I have two space keys and already see that for most of time I use right one.
There are no layers defined yet and I have a key for it. Some keycaps may get
replaced with other ones (like Calculator one next to left Space begs for lower one).
I have links to many interesting layouts so who knows, maybe I will make a new
keyboard soon. Split, orthogonal one. With volume knob. Will see.
Again this year, Arm offered to
host us for
a mini-debconf
in Cambridge. Roughly 60 people turned up on 10-13 October to the Arm
campus, where they made us really welcome. They even had some
Debian-themed treats made to spoil us!
Hacking together
For the first two days, we had a "mini-debcamp" with disparate
group of people working on all sorts of things: Arm support, live
images, browser stuff, package uploads, etc. And (as is traditional)
lots of people doing last-minute work to prepare slides for their
talks.
Sessions and talks
Saturday and Sunday were two days devoted to more traditional
conference sessions. Our talks covered a typical range of Debian
subjects: a DPL "Bits" talk, an update from the Release Team, live
images. We also had some wider topics: handling your own data, what to
look for in the upcoming Post-Quantum Crypto world, and even me
talking about the ups and downs of Secure Boot. Plus a random set of
lightning talks too! :-)
Video team awesomeness
Lots of volunteers from the DebConf video team were on hand too
(both on-site and remotely!), so our talks were both streamed live and
recorded for posterity - see the links from the individual talk pages
in the wiki,
or http://meetings-archive.debian.net/pub/debian-meetings/2024/MiniDebConf-Cambridge/
for the full set if you'd like to see more.
A great time for all
Again, the mini-conf went well and feedback from attendees was very
positive. Thanks to all our helpers, and of course to our
sponsor: Arm for providing the venue
and infrastructure for the event, and all the food and drink too!
Photo credits: Andy Simpkins, Mark Brown, Jonathan Wiltshire. Thanks!
It's been a while since I've posted about arm64 hardware. The last
machine I spent my own money on was
a SolidRun
Macchiatobin, about 7 years ago. It's a small (mini-ITX) board
with a 4-core arm64 SoC (4 * Cortex-A72) on it, along with things like
a DIMM socket for memory, lots of networking, 3 SATA disk interfaces.
The Macchiatobin was a nice machine compared to many earlier
systems, but it took quite a bit of effort to get it working to my
liking. I replaced the on-board U-Boot firmware binary with an EDK2
build, and that helped. After a few iterations we got a new build
including graphical output on a PCIe graphics card. Now it worked much
more like a "normal" x86 computer.
I still have that machine running at home, and it's been a
reasonably reliable little build machine for arm development and
testing. It's starting to show its age, though - the onboard USB ports
no longer work, and so it's no longer useful for doing things like
installation testing. :-/
So...
I was involved in a conversation in the #debian-arm IRC channel a
few weeks ago, and diederik suggested
the Radxa Rock 5
ITX. It's another mini-ITX board, this time using a Rockchip
RK3588 CPU. Things have moved on - the CPU is now an 8-core big.LITTLE
config: 4*Cortex A76 and 4*Cortex A55. The board has NVMe on-board,
4*SATA, built-in Mali graphics from the CPU, soldered-on memory. Just
about everything you need on an SBC for a small low-power desktop, a
NAS or whatever. And for about half the price I paid for the
Macchiatobin. I hit "buy" on one of the listed websites. :-)
A few days ago, the new board landed. I picked the version with
24GB of RAM and bought the matching heatsink and fan. I set it up in
an existing case borrowed from another old machine and tried the Radxa
"Debian" build. All looked OK, but I clearly wasn't going to stay with
that. Onwards to running a native Debian setup!
I installed an EDK2 build
from https://github.com/edk2-porting/edk2-rk3588
onto the onboard SPI flash, then rebooted with a Debian 12.7
(Bookworm) arm64 installer image on a USB stick. How much trouble
could this be?
I was shocked! It Just Worked (TM)
I'm running a standard Debian arm64 system. The graphical installer
ran just fine. I installed onto the NVMe, adding an Xfce desktop for
some simple tests. Everything Just Worked. After many
years of fighting with a range of different arm machines (from simple
SBCs to desktops and servers), this was without doubt the most
straightforward setup I've ever done. Wow!
It's possible to go and spend a lot of money on
an Ampere machine, and
I've seen them work well too. But for a hobbyist user (or even a
smaller business), the Rock 5 ITX is a lovely option. Total cost to me
for the board with shipping fees, import duty, etc. was just over
£240. That's great value, and I can wholeheartedly recommend this
board!
The two things that are missing compared to the Macchiatobin? This
is soldered-on memory (but hey, 24G is plenty for me!) It also doesn't
have a PCIe slot, but it has sufficient onboard network, video and
storage interfaces that I think it will cover most people's needs.
Where's the catch? It seems these are very popular
right now, so it can be difficult to find these machines in stock
online.
FTAOD, I should also point out: I bought this machine entirely with
my own money, for my own use for development and testing. I've had no
contact with the Radxa or Rockchip folks at all here, I'm
just so happy with this machine that I've felt the
need to shout about it! :-)
It (was) that time of year again - last weekend we hosted a bunch
of nice people at our place in Cambridge for the annual Debian
UK OMGWTFBBQ!
Lots of friends, lots of good food and drink. Of course lots of
geeky discussions about Debian, networking, random computer languages
and... screws? And of course some card games to keep us
laughing into each night!
Many thanks to a number of awesome friendly people for again
sponsoring the important refreshments for the weekend. It's
hungry/thirsty work celebrating like this!