Всем привет! Возникла задача - пересобрать из исходников отдельно взятый драйвер SD-кардридера на системе Ubuntu 11.10. Однако, насколько я понимаю, отдельно его скомпилировать и загрузить нельзя (только пересобирать ядро). Вопрос - что нужно сделать, чтобы драйвер воспринимался как внешний отключаемый и перекомпилируемый модуль? Где об этом можно прочитать?
Скорее всего можно modprobe поможет загрузить Вам модуль. В убунте модули редко вкомпиливаются в ядро вроде как.
Я могу выгрузить и подгрузить модуль через modprobe. Все отрабатывает корректно. Главная проблема заключается в том, что я не могу его перекомпилировать. Код (Text): root@sd-ThinkPad-X220:/usr/src/linux-source-2.6.38/drivers/mmc# make make: *** No targets. Stop. root@sd-ThinkPad-X220:/usr/src/linux-source-2.6.38/drivers/mmc# ./configure bash: ./configure: No such file or directory Команда make выполняется только из папки /usr/src/linux-source-2.6.38/, что подразумевает компиляцию всего ядра...
Вот тут нашел вроде как способ скомпилировать: http://www.symantec.com/connect/articles/compiling-drivers-linux-and-adding-them-your-linux-automation-image Код (Text): root@sd-ThinkPad-X220:/usr/src/linux-source-2.6.38/drivers/mmc# sudo make -C /usr/src/linux-source-2.6.38 SUBDIRS=$PWD modules make: Entering directory `/usr/src/linux-source-2.6.38' WARNING: Symbol version dump /usr/src/linux-source-2.6.38/Module.symvers is missing; modules will have no dependencies and modversions. CC [M] /usr/src/linux-source-2.6.38/drivers/mmc/card/block.o /bin/sh: /usr/src/linux-source-2.6.38/scripts/recordmcount: not found make[2]: *** [/usr/src/linux-source-2.6.38/drivers/mmc/card/block.o] Error 127 make[1]: *** [/usr/src/linux-source-2.6.38/drivers/mmc/card] Error 2 make: *** [_module_/usr/src/linux-source-2.6.38/drivers/mmc] Error 2 make: Leaving directory `/usr/src/linux-source-2.6.38' При этом файл recordmcount (даже не один) в каталоге присутствует: Код (Text): root@sd-ThinkPad-X220:/usr/src/linux-source-2.6.38/drivers/mmc# ls -al /usr/src/linux-source-2.6.38/scripts | grep recordmcount -rw-r--r-- 1 root root 10992 2012-01-24 10:29 recordmcount.c -rw-r--r-- 1 root root 13576 2012-01-24 10:29 recordmcount.h -rwxr-xr-x 1 root root 17742 2012-01-24 10:29 recordmcount.pl Что я делаю глобально не так?
а ну так бы и написали) тогда так: cd /usr/src/linux make menuconfig там выбираете нужный драйвер как модуль. а потом make && make modules_install && make install reboot) P.S. перед глумлением над ядром советую сделать его копию бекапную)
При ребуте после компиляции и установки ядра получилась такая штука Код (Text): VFS: Cannot open root device "sda6" or unknown block(0,0) Please append a correct "root=" boot options: here are the available partitions: Kernel panic: - not syncing: VFS: Unable to mount root fs on unknown block(0,0) По совету гугля вписал в .config следующие строчки (на ноутбуке SATA-винт): Код (Text): CONFIG_SCSI_SATA=y CONFIG_SCSI_SATA_AHCI=y Не помогло. что во время билда было сделано не так?
стандартная история, вы ядро сохранили свое, которое работало? Если да то вытащите от туда .config переместите в \usr\src\linux и пересобирите ядро заново (только драйвер необходимый Вам не забудьте включить). Возможно Вы забил включить поддержку файловой системы, проверьте это
2 h0t Спасибо! Ядро скомпилировать и запустить удалось! Правда, я по-прежнему не понимаю, как скомпилировать отдельно драйвер. Гугл выдает только уже скомпилированные бинарные патчи, или инструкции по подключению/отключению через modprobe. А при компиляции из папки драйвера выдает такое: Код (Text): sd@sd-ThinkPad-X220:/usr/src/linux-source-2.6.38/drivers/mmc$ sudo make [sudo] password for sd: make: *** No targets. Stop. sd@sd-ThinkPad-X220:/usr/src/linux-source-2.6.38/drivers/mmc$ ./configure bash: ./configure: No such file or directory При этом драйвер обозначен был как подгружаемый модуль. Как его скомпилить?
Просто у вас нет правила для сборки вот поэтому и не собирается по медетируйте над make и configure. А вообще если есть желание понять как жить с этим то ставьте Gentoo)))
Lecko Насколько я помню, configure не вызывается из подкаталогов. Сначала запускается configure из основного каталога и он там есть. Он вам сформирует "правильные" Makefile или скажет, что в вашей системе неверно. А потом уже можно делать make. Естественно если правильно задали параметры для configure. Поэтому уже в который раз отошлю на opennet.ru Там вы достаточно быстро найдете или получите нужную инфу. Опять же насколько я помню, для сборки драйверов исходники ядра не нужны. Достаточно инклюдов и еще чего-то там, но именно для вашего ядра.