Вопрос или проблема
Я использую старую материнскую плату 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
Если лента не была обнаружена, возможно, потребуется дополнительно исследовать логи или обратиться к изменениям, вносимым в ядро между версиями.
Заключение
Изменения в драйверах ядра часто требуют детальной проработки и тестирования. Учитывайте, что поддержка старого оборудования на новых системах может повлечь дополнительную работу по адаптации. В случае сложностей, возможно, стоит рассмотреть приобретение более современной аппаратной платформы или обратившись к специалистам для помощи.