Как собрать старый драйвер qla2xxx из ядра 4.10.17 на Debian 12 с ядром 6.1?

Вопрос или проблема

Я использую старую материнскую плату Intel Atom “D945GCLF2” с интегрированным Intel Atom 330. На нее установлен Debian 12 (минимальный; только CLI), и она работает без проблем.

Сейчас я хочу использовать эту систему для подключения ленточного привода IBM LTO Ultrium 5 через волоконно-оптический канал. Для этого я вставил QLogic QLA200 HBA в один слот PCI-X (на материнской плате нет PCIe). Карта распознается:

lspci -vvv

Fibre Channel: QLogic Corp. SP202-based 2Gb Fibre Channel to PCI-X HBA (rev 03)
Subsystem: QLogic Corp. SP202-based 2Gb Fibre Channel to PCI-X HBA
Flags: 66MHz, medium devsel, IRQ 21
I/O ports at 1000 [size=256]
Memory at 88100000 (32-bit, non-prefetchable) [size=4K]
Expansion ROM at 88120000 [disabled] [size=128K]
Capabilities: [44] Power Management version 2
Capabilities: [4c] PCI-X non-bridge device
Capabilities: [54] MSI: Enable- Count=1/8 Maskable- 64bit+
Capabilities: [64] CompactPCI hot-swap <?>
Kernel modules: qla2xxx

Теперь подключенный ленточный привод не отображается в системе, он должен появляться как /dev/st0. Я пробовал менять компоненты с другими машинами (с более новыми FC HBA, они видят привод), пока не наткнулся на то, что драйвер qlx2xxx, поставляемый с ядром, не может правильно использовать старый PCI-X HBA.

При более глубоком изучении я нашел эту ветку, описывающую аналогичную проблему, с которой я столкнулся, появившуюся с ядром 4.11, поэтому последняя рабочая версия должна быть 4.10.17. Загрузка с live-версии Ubuntu 16.04 (ядро 4.4) (у меня был ISO) делает /dev/st0 видимым, также lsscsi показывает привод как устройство (дальнейшие тесты функциональности не проводились).

Поэтому я ищу инструкции или обходные пути для этой проблемы. Моя первая попытка будет скомпилировать старый драйвер из 4.10 с новым ядром, но я боюсь, что мне понадобятся навыки программирования, чтобы заставить старый драйвер работать, которых у меня нет. Может кто-нибудь предложить, что я мог бы сделать?

Для полноты:

dmesg | grep -I qla

[    5.648014] qla2xxx [0000:00:00.0]-0005: : QLogic Fibre Channel HBA Driver: 10.02.07.900-k.
[    5.648629] qla2xxx [0000:04:00.0]-001d: : Найден ISP6312 irq 21 iobase 0x(____ptrval____).
[    5.746162] qla2xxx [0000:04:00.0]-ffff:4: FC4 priority set to FCP
[    5.762927] qla2xxx 0000:04:00.0: firmware: не удалось загрузить ql2300_fw.bin (-2)
[    5.763086] qla2xxx 0000:04:00.0: firmware: не удалось загрузить ql2300_fw.bin (-2)
[    5.763131] qla2xxx 0000:04:00.0: Прямая загрузка прошивки для ql2300_fw.bin не удалась с ошибкой -2
[    5.763151] qla2xxx [0000:04:00.0]-00cf:4: Установка чипа ****НЕ УДАЛАСЬ****.
[    5.763197] qla2xxx [0000:04:00.0]-00d6:4: Не удалось инициализировать адаптер - Флаги адаптера 2.

Ответ или решение

Проблема, описанная вами, заключается в несовместимости старого драйвера qla2xxx с более новой версией ядра Linux. Для решения этой задачи вам понадобится собрать драйвер qla2xxx версии ядра 4.10.17 и интегрировать его в вашу текущую систему Debian 12 с ядром 6.1. Приведу шаги по выполнению этого процесса.

Шаг 1: Подготовка системы

Прежде всего, установите необходимые инструменты для компиляции ядра. Откройте терминал и выполните следующие команды:

sudo apt update
sudo apt install build-essential linux-headers-$(uname -r) git dkms

Шаг 2: Загрузка исходных кодов ядра

Чтобы получить старую версию драйвера qla2xxx, необходимо загрузить исходники ядра версии 4.10.17:

wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.10.17.tar.xz
tar -xf linux-4.10.17.tar.xz
cd linux-4.10.17

Шаг 3: Извлечение драйвера qla2xxx

Перейдите в директорию с драйвером qla2xxx, который находится в исходниках ядра:

cd drivers/scsi/qla2xxx

Шаг 4: Подготовка к компиляции

Скопируйте код драйвера в отдельную директорию для последующей компиляции:

mkdir -p ~/qla2xxx-driver
cp * ~/qla2xxx-driver/
cd ~/qla2xxx-driver

Шаг 5: Адаптация к новому ядру

Здесь может потребоваться внесение изменений в код, чтобы обеспечить совместимость с ядром 6.1. Это включает изменения в API и другие возможные отличия. Вам потребуется помощь программиста или исследование изменений в соответствующих версиях ядра в случае нехватки кодировочных навыков.

Шаг 6: Компиляция драйвера

Создайте Makefile, если его нет, либо используйте существующий. Основные команды для компиляции:

make -C /lib/modules/$(uname -r)/build M=$(pwd) modules

Если компиляция прошла успешно, у вас появится файл модуля с расширением .ko.

Шаг 7: Установка модуля

Установите драйвер в систему:

sudo cp qla2xxx.ko /lib/modules/$(uname -r)/kernel/drivers/scsi/
sudo depmod -a
sudo modprobe qla2xxx

Шаг 8: Проверка

Теперь проверьте вывод dmesg или используйте команду lsscsi, чтобы подтвердить успешное обнаружение ленты:

dmesg | grep qla
lsscsi

Если лента не была обнаружена, возможно, потребуется дополнительно исследовать логи или обратиться к изменениям, вносимым в ядро между версиями.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...