Using Claude Code to modernize a 25-year-old kernel driver
- Увлечение — восстановление данных с кассет QIC-80 90-х гг.
- Драйвер
ftape
(Linux 2.4) последний раз собирался ~2000 г.; с тех пор приходится держать CentOS 3.5. - Привод подключается к контроллеру гибкого диска: дёшево, но 500 Кбит/с и куча «магии» портов/IRQ.
- Под DOS/Windows есть проприетарные утилиты, но только
ftape
даёт «сырой» дамп, независимо от формата ПО, которое писало кассету.
Цель: переписать драйвер под современное ядро без боли.
Инструмент — Claude Code (Claude 3.5 Sonnet) в режиме «актов» (акт = автоматический цикл «предложи-отладь-протестируй»).
Ход работы
- Запустил
claude
в каталоге исходниковftape-4.04
(1999 г.). - Первый акт: «сделай модуль для ядра 6.10». Claude выдал:
- заменил
cli/sti
наspinlock_t
; sleep_on
→wait_event
;register_blkdev
→blk_mq
;kmalloc
→kmalloc_array
;- добавил
MODULE_LICENSE/AUTHOR/DESCRIPTION
.
Собралось с десятком предупреждений.
- заменил
- Акт 2: «убери варнинги». Убрал устаревшие
ioctl
, обернулprintk
вpr_*
, добавилfallthrough;
. - Акт 3: «проверь на x86_64». Исправил
long
↔int
в структурах, выровнялu8/u16
через__packed
. - Акт 4: «протестируй на железе». Создал QEMU-образ с контроллером FDC, подключил образ кассеты.
- первый
insmod
— kernel oops; Claude добавилBUG_ON(!request_region)
и проверку IRQ. - второй —
ftape
видит привод, но «unknown format»; Claude вставил распознаваниеQIC-80
поID_CRC
. - третий — успешный дамп 120 Мб за 40 мин.
- первый
- Акт 5: «очисти и оформи». Удалил весь
#ifdef LINUX_2_0
, добавилREADME.md
,Kconfig
,Makefile
дляin-tree
сборки.
Результат
- 2 500 строк C → 1 100; 45 файлов → 12; минус 4 архаичных под-драйвера.
- Собирается как
out-of-tree
(6.6–6.12) и какin-tree
(патч 30 Кб). - Скорость 470 Кбит/с — предел FDC, но стабильно.
- Поддержаны только QIC-80; QIC-40/3010/3020 выкинуты (никто не просил).
Вывод
Claude Code способен переварить древний драйвер за вечер: сам генерит патчи, тестирует в QEMU и оставляет человеку только катать ленту.