Featured imageViews and opinions of the author are independent of employers past or present. Duh...

I had written a draft of an anti-LLM post some months ago, and ended up not posting it. Since then, I’ve used these tools much more during my day job, as well as hobby projects. I’ve had many thoughts about LLMs, and their impact on my mental health and ability to learn (or the stunting of said growth). I’ve also experienced many cases where it is undoubtedly an amazing tool that has enabled me to learn new things by reducing the barrier to entry for new fields.

In all, it’s been a mixed bag, and I wish LLMs never existed.

But the technology is here now, so I thought I’d show some of the things I have managed to do aided by these tools. In line with not letting perfect get in the way of good/done, I’ll probably post updates in Part 2 and so on.

Linux Hacking

The Linux kernel is huge, complicated, amazing, and not something I have experience in modifying. I am however quite comfortable compiling software and figuring out how the pieces fit together (eg here and here). That being the case, I’ve gone ahead and tried a couple projects with kernel related hacking.

Samsung Galaxy S9 - starqltechn

My old phone collecting dust, so why not try to get it running Nura?1 There’s already a working port, but lots of peripherals don’t yet work, so I figured I’d start there.

Long story short, using LLMs I was able to get:

  • Working camera+flash
  • Aperture control
  • Manual focus
  • WiFi+BT (tracked down an existing patch)
  • DisplayPort output
Samsung Galaxy S9 running a camera app, showing a color-bar test pattern from its working rear camera.
Galaxy S9 camera app with the aperture selector open, offering f/1.5 and f/2.4.
Galaxy S9 connected over USB-C to a monitor, which shows the GNOME About screen: postmarketOS edge, Linux 7.1.0-rc1-sdm845, FD630 graphics.

My Code

Vendor Resources

Motorola Moto G Play (2024) - fogona

Fresh on the success of getting progress on an older phone, I decided to find the cheapest phone that a US resident can just go out and potentially install Linux on. At this time, it’s the Motorola Moto G Play (2024), which can be had for $100 USD new in box, carrier unlocked and bootloader unlockable. There’s already SoC support, but it’s somewhat early.

After much back and forth, I was able to get:

  • GPU support
  • Video decoder acceleration
  • Cameras with PDAF and stock tunings
  • WiFi, BT
  • Modem (data, calls, texts/mms)
  • GPS, accelerometer, compass, rotation, lux, proximity

My Code

Vendor Resources

PRs that resulted:

Projects that resulted:

bootmanager

Such an inventive name, I know… A Slint GUI + Go backend tailored for Linuxboot+u-root setups, meant to be a beautiful alternative to uboot. Supports touchscreen, SSH, fastboot, LUKS decryption, usage in place of unl0kr, and a web GUI built in WASM from same Slint.

Moto G Play (2024) in hand, showing the bootmanager Unlock screen with a password field and on-screen keyboard for the UFS userdata partition.
Moto G Play (2024) in hand, showing the bootmanager Choose a system screen with a postmarketOS card marked default, on encrypted UFS userdata.

godot-maps

Comaps doesn’t look great on Linux, and I couldn’t find anything else that did what I wanted, so I made a quick and dirty navigation app built on Comaps backend using Godot. It compiles to many platforms too, including MacOS and Android.

godot-maps running turn-by-turn navigation on a phone held in a car: a 3D map with buildings, a blue route line, a 0.4 mi right-turn banner, a 35 mph speed limit sign, and a one-minute ETA bar.

go-msm-firmware-loader

Go port of msm-firmware-loader, used by bootmanager

go-qbootctl

A static Go replacement for the A/B slot subset of qbootctl so it works in an initramfs, used by bootmanager

go-chromatix2libcamera

Translates Qualcomm Chromatix tuning files to something libcamera (or a fork thereof) can interpret.

go-unbrick

Swiss army knife that I use to inspect stock firmware images, any files contained therein, and to make some files to help with bricked devices.

go-qshrink4

A reader for Qualcomm QShrink4 hash databases (.qdb / .qsr4), mapping the hashes in QShrink’d modem diag messages back to their format string, file and line.

2024 Kia EV6 Head Unit

New (to me) car, new project! Once I got the stock system image (download from Kia, community knows how to decrypt), a root shell on the running unit (others already figured this out), and the vendor source, I was off to the races.

Given the ancient (3.18.24, from 2015) vendor kernel (for Android Kitkat!), I used LLMs to do minimal mainline porting for the quad Cortex-A53 Telechips TCC803x SoC, which turned out to almost work first try. With a bit of back and forth (and much USB swapping), display out was achieved and I could feed log messages back into the LLM to help it fix things up. Note that stock was never reflashed, this is a kexec cycle that uses USB data only. The old Android version is in some ways a blessing in disguise, because older systems are in some ways much easier to bend to your will.

I figured the quickest path to something useful was to get bootmanager running, which turned out to be trivial.

bootmanager running on the Kia EV6 head unit: a Choose a system screen titled Telechips TCC803x AVN, with a single Tools card (services, partitions, log, power).

Still, after ~3.5min, it would reboot. So using LLMs I logged serial transfers from Android and did some decompilation of the MICOM firmware (seems to be some kind of PowerPC VLE chip) and Android apps to see what signals we needed to respond to, and found a hung SoC check that we can respond to to keep from being reset. At the same time we find signals for things like power draw of climate, battery state, etc. (I still need to map this out properly).

Working:

  • Display
  • I2C
  • USB
  • eMMC
  • WiFi (and soon, BT)
  • Touch
  • Serial
  • MICOM keepalive + Vehicle data
  • re-kexecing back to stock Android

Does it run DOOM?

If you saw the cover image, you’ll know. Of course it does!

DOOM running on the 2024 Kia EV6 head unit at night, a first-person corridor with on-screen touch controls (move, turn, run, fire, use, map) on either side.
Vendor Resources
  • Mobis open source: “AVNT STD G50 WIDE R6” for “EV6 (CV1)” (AVNT_STD_G50_WIDE_R6.zip, 565 MB)

My Code


  1. Formerly PostmarketOS ↩︎