Поддержка Super Top SATA Bridge в Debian

2013.02.23

Купил внешний HDD и ящик к нему.  Диск SATA, ящик подключается к USB, внутри ящика находится плата с преобразователем.  Плата эта Линуксом распознаётся, но при попытке записи на диск вместо данных записывается мусор.  Выглядит это так: Disk Utility при операциях с разделами жалуется на таймауты, GParted жалуется на невозможность выполнения операции, а fdisk при запуске жалуется на отсутствие табицы разделов, предлагает её создать, но при повторном запуске всё начинается сначала.  Для решения этой проблемы можно было вручную собрать ядро или обменять ящик на другой.  Сборка ядра выглядела интереснее.

Ящик называется Agestar SUB207, системой распознаётся как Super Top M6116 SATA Bridge.  При подключении к порту USB в логах появляется жалоба на повреждённую таблицу разделов:

sdb: unknown partition table

В интернете есть несколько версий одного баг-репорта (на разных площадках), по результатам которого выяснилось, что вместо записи данных на диск записываются сами команды, которые говорят контроллеру что-то записать на диск.  Определили даже фрагмент кода, который за такое поведение фокус отвечает.  Установка последнего стабильного ядра не помогла — пришлось компилировать собственное, чтобы воспользоваться устройством по возможности быстрее, хотя в следующем ядре, похоже, ошибка должна быть исправлена.

Ядро собирается довольно просто, я воспользовался готовым руководством.  Поправил проблемный фрагмент кода, запустил компиляцию, через час перезагрузил машину и всё заработало.

Общая последовательность действий примерно такая:

$ sudo apt-get install build-essential fakeroot kernel-package
$ wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.2.39.tar.bz2
$ tar xfj linux-3.2.39.tar.bz2
$ cd linux-3.2.39
$ vim drivers/usb/storage/unusual_cypress.h
$ cp /boot/config-3.2.0-4-686-pae .config
$ fakeroot make-kpkg clean
$ time fakeroot make-kpkg --jobs=2 --initrd --append-to-version=-cypress \
  --revision=20130222 kernel_image kernel_headers modules_image
$ sudo dpkg -i ../linux-*deb

Моё первое ядро со времён где-то RedHat 5.2.  Сейчас всё несколько проще.

Ссылки

Следить за развитием событий можно через RSS ленту или почтовую рассылку.