Lambdaカクテル

京都在住Webエンジニアの日記です

Invite link for Scalaわいわいランド

Claude Code Opusはデバイスドライバも作れる / VAIO SX14-Rのキーボードバックライトを点灯させよ

先日業務マシンを変えた。VAIO SX14-Rである。もともとプライベートで持っていたのだが、かなり出来が良かったので業務PCとしても採用したのだ。

blog.3qe.us

で、一つ問題があった。キーボードバックライトが点灯しないのだ。

バックライトを点灯させる旅

もともとLinuxにはvaio-laptopというデバイスドライバがあるのだが、これがちょっと古いのか、最新モデルであるSX14-Rには対応していないようで、うまくバックライトを認識しなかった。

とはいえ薄暗い場所などでは困ってしまうので、なんとかならないか、という点をOpusに尋ねたところ、色々な方法でリバースエンジニアリングを開始した。

  • /sys/class/leds/vaio::kbd_backlight/brightnessに何かないか
  • ACPIテーブル(DSDT)の情報はないか
  • Embedded Controller経由の情報はないか

すると、OpusはDSDTに KBBL という4ビットのフィールドがあることを発見した。

sudo cat /sys/firmware/acpi/tables/DSDT > /tmp/dsdt.dat
sudo zypper install acpica
iasl -d /tmp/dsdt.dat
grep -i -E "kbd|backlight|KBBL|keyboard.*light" /tmp/dsdt.dsl
               KBBL,   4,
            PKBD,   8,

Opusによれば、これはKeyBoard BackLight、すなわちキーボードバックライト用のフラグだという。

するとOpusはこのオフセットを計算しはじめた。

grep -n -B 10 -A 5 "KBBL" /tmp/dsdt.dsl
41251-                LCKV,   8,
41252-                RCKV,   8,
41253-                SFLV,   8,
41254-                GBCC,   8,
41255-                Offset (0xE8),
41256-                SLMD,   8,
41257-                    ,   1,
41258-                F101,   1,
41259-                Offset (0xEB),
41260-                BTP1,   8,
41261:                KBBL,   4,
41262-                    ,   3,
41263-                KEXE,   1,
41264-                WLID,   2,
41265-                WLD3,   1,
41266-                RTS4,   1,

Opusは KBBL がEC(Embedded Controller)のレジスタ オフセット 0xEC の下位4ビット にあることを突き止めた。ここまでで既にすごい。

試しにここに値を入れてみろ、と急かすので、実際に値を入れてみると(値のセットの仕方まで教えてくれた):

sudo modprobe ec_sys write_support=1
printf '\x01' | sudo dd of=/sys/kernel/debug/ec/ec0/io bs=1 seek=$((0xEC)) count=1 conv=notrunc 2>/dev/null

するとあっさりバックライトが光ったではないか。偉すぎる。

デバイスドライバ作成編

ここで良い気になった自分は、Opusに無茶振りすることにした。Linux用のデバイスドライバを作れ。

するとご丁寧にC言語を書き始め、DKMSに対応したドライバが上がってきた。ビルドしてインストールすると、あっさり動いている。

メインのCファイル、DKMS用の定義ファイル、Makefileが吐き出された。

普通に有用だったので、リポジトリとして公開しておく。

github.com

VAIO SX14-Rを使っている人で、Linuxをインストールしている人がいたら、ぜひ試してみてほしい。

感想

Opus賢すぎである。相当深い知識でもって自分を助けてくれた、というかほぼやってもらったようなものである。自分は単に作業者としてClaudeが指示するコードを実装するだけだ。

ありがたいことに、自分もデバイスドライバまわりの知識が深まった。ACPIこう読んだらいいのか〜とか、こういう感じでDKMSは動くのか〜、とか。

まったく糸口がないような状態でも、LLMはなんとか脱出路を探そうとしてくれる。 高級なLLMになるほど、その確度が上がっていく。高級なLLMは困難なタスクでこそ活きるなあ、と思った。

★記事をRTしてもらえると喜びます
Webアプリケーション開発関連の記事を投稿しています.読者になってみませんか?