LINUX.ORG.RU

/sys/class/scsi_host - как его интерпретировать?


0

0

Имеется задача создания диска, быстро устанавливающего Линукс (RHEL 4up4) + несколько сложных приложений на (почти)любой сервер. Надо для максимально быстрого восстановления системы на сервере в случае его физической смерти, клонирования сервера для тестов и т.д. В общем, нужно.

Сделано как развертывание tar-gzip'а рабочей системы с правкой конфиг-файлов. Всё замечательно работало, пока не столкнулся с контроллером SRCS28X, при создании initrd с его модулями (megaraid_mbox)

При загрузке с диска я подгружаю все модули, на которые показывает lspci+modules.pcimap+modules.dep - соответсвенно подгружаются всякие сетевые карты, звуковые и прочая фигня. После этого, для создания initrd под новую копию системы, читаю /sys/class/scsi_host/host*/proc_name, где, как я до сих пор считал, для каждого присутсвующего в системе scsi-контроллера указано название его модуля. Далее нехитрые комбинации с modules.dep приводят к вполне жизнеспособному initrd.

Но megaraid в /sys/class/scsi_host/host0/proc_name содержит не "megaraid_mbox", а просто "megaraid" (файла megaraid.ko в системе нет).... :( Выдернуть vendor-id + device-id для повторного просмотра pcimap тоже оттуда не получилось. Тупо скрещивать слово megaraid с результатами lsmod или find - нельзя, т.к. кроме megaraid_mbox есть еще файлики megaraid_mm и megaraid_sas

Господа! Научите корректно читать /sys, чтобы выдирать имена модулей для присутсвующих в системе устройств, или ткните носом в какой-нибудь man-howto, чтобы сделать это другим способом.

anonymous

я думаю это ошибка megaraid_mbox.c , в описании

static struct pci_driver megaraid_pci_driver_g = {
.name = "megaraid",
.id_table = pci_id_table_g,
.probe = megaraid_probe_one,
.remove = __devexit_p(megaraid_detach_one),
.shutdown = megaraid_mbox_shutdown,
};


думаю там должно быть .name = "megaraid_mbox" , запости в lkml или в bugzilla (можно redhat, можно kernel, быстрее всего обработают в lkml) данную ошибку.

mator ★★★★★
()
Ответ на: комментарий от mator

ааа, нет, вру... оно же proc_name :

$ grep -n proc_name *
megaraid_mbox.c:355: .proc_name = "megaraid",
megaraid_sas.c:1046: .proc_name = "megaraid_sas",

вот тут и ошибка.

mator ★★★★★
()
Ответ на: комментарий от mator

А вот ошибка ли? Факт ли, что /sys/class/scsi_host/host0/proc_name - это именно имя модуля, а не имя какой-нибудь процедуры, которую нужно искать в ядре? Скорее всего это я по незнанию пользуюсь чем-то, что дает мне нужную информацию чисто случайно...

Кроме того, инсталлятор, который на родном диске, его как-то находит, и правильно прописывает в initrd

Пока сделал тупым if'ом в коде ( if [ "$MODULE" = "megaraid" ]; then MODULE='megaraid_mbox'; fi; ), но это пока не нарвусь на железку с megaraid_sas, или еще какой-нибудь такой-же замороченный драйвер.

P.S. Кстати, в SuSE9 присутствует драйвер megaraid.ko, который SRCS28X не держит, а если хочется его использовать - нужно подсовывать дискету с megaraid_mbox...

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.