Как загрузить драйвер как внешний модуль?

Тема в разделе "WASM.UNIX", создана пользователем Lecko, 25 янв 2012.

  1. Lecko

    Lecko Андрей

    Публикаций:
    0
    Регистрация:
    20 дек 2010
    Сообщения:
    60
    Всем привет!

    Возникла задача - пересобрать из исходников отдельно взятый драйвер SD-кардридера на системе Ubuntu 11.10. Однако, насколько я понимаю, отдельно его скомпилировать и загрузить нельзя (только пересобирать ядро). Вопрос - что нужно сделать, чтобы драйвер воспринимался как внешний отключаемый и перекомпилируемый модуль? Где об этом можно прочитать?
     
  2. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    Скорее всего можно modprobe поможет загрузить Вам модуль. В убунте модули редко вкомпиливаются в ядро вроде как.
     
  3. Lecko

    Lecko Андрей

    Публикаций:
    0
    Регистрация:
    20 дек 2010
    Сообщения:
    60
    Я могу выгрузить и подгрузить модуль через modprobe. Все отрабатывает корректно.
    Главная проблема заключается в том, что я не могу его перекомпилировать.
    Код (Text):
    1. root@sd-ThinkPad-X220:/usr/src/linux-source-2.6.38/drivers/mmc# make
    2. make: *** No targets.  Stop.
    3. root@sd-ThinkPad-X220:/usr/src/linux-source-2.6.38/drivers/mmc# ./configure
    4. bash: ./configure: No such file or directory
    Команда make выполняется только из папки /usr/src/linux-source-2.6.38/, что подразумевает компиляцию всего ядра...
     
  4. Lecko

    Lecko Андрей

    Публикаций:
    0
    Регистрация:
    20 дек 2010
    Сообщения:
    60
    Вот тут нашел вроде как способ скомпилировать: http://www.symantec.com/connect/articles/compiling-drivers-linux-and-adding-them-your-linux-automation-image

    Код (Text):
    1. 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
    2. make: Entering directory `/usr/src/linux-source-2.6.38'
    3.  
    4.   WARNING: Symbol version dump /usr/src/linux-source-2.6.38/Module.symvers
    5.            is missing; modules will have no dependencies and modversions.
    6.  
    7.   CC [M]  /usr/src/linux-source-2.6.38/drivers/mmc/card/block.o
    8. /bin/sh: /usr/src/linux-source-2.6.38/scripts/recordmcount: not found
    9. make[2]: *** [/usr/src/linux-source-2.6.38/drivers/mmc/card/block.o] Error 127
    10. make[1]: *** [/usr/src/linux-source-2.6.38/drivers/mmc/card] Error 2
    11. make: *** [_module_/usr/src/linux-source-2.6.38/drivers/mmc] Error 2
    12. make: Leaving directory `/usr/src/linux-source-2.6.38'
    При этом файл recordmcount (даже не один) в каталоге присутствует:
    Код (Text):
    1. 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
    2. -rw-r--r--  1 root root 10992 2012-01-24 10:29 recordmcount.c
    3. -rw-r--r--  1 root root 13576 2012-01-24 10:29 recordmcount.h
    4. -rwxr-xr-x  1 root root 17742 2012-01-24 10:29 recordmcount.pl
    Что я делаю глобально не так?
     
  5. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    а ну так бы и написали)
    тогда так:
    cd /usr/src/linux
    make menuconfig
    там выбираете нужный драйвер как модуль. а потом
    make && make modules_install && make install
    reboot)

    P.S. перед глумлением над ядром советую сделать его копию бекапную)
     
  6. Lecko

    Lecko Андрей

    Публикаций:
    0
    Регистрация:
    20 дек 2010
    Сообщения:
    60
    Спасибо! Все сделал, запустил на компиляцию. Жду)
     
  7. Lecko

    Lecko Андрей

    Публикаций:
    0
    Регистрация:
    20 дек 2010
    Сообщения:
    60
    При ребуте после компиляции и установки ядра получилась такая штука
    Код (Text):
    1. VFS: Cannot open root device "sda6" or unknown block(0,0)
    2. Please append a correct "root=" boot options: here are the available partitions:
    3. Kernel panic: - not syncing: VFS: Unable to mount root fs on unknown block(0,0)
    По совету гугля вписал в .config следующие строчки (на ноутбуке SATA-винт):
    Код (Text):
    1. CONFIG_SCSI_SATA=y
    2. CONFIG_SCSI_SATA_AHCI=y
    Не помогло. что во время билда было сделано не так?
     
  8. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    стандартная история, вы ядро сохранили свое, которое работало? Если да то вытащите от туда .config переместите в \usr\src\linux
    и пересобирите ядро заново (только драйвер необходимый Вам не забудьте включить).


    Возможно Вы забил включить поддержку файловой системы, проверьте это
     
  9. Lecko

    Lecko Андрей

    Публикаций:
    0
    Регистрация:
    20 дек 2010
    Сообщения:
    60
    2 h0t
    Спасибо! Ядро скомпилировать и запустить удалось!
    Правда, я по-прежнему не понимаю, как скомпилировать отдельно драйвер. Гугл выдает только уже скомпилированные бинарные патчи, или инструкции по подключению/отключению через modprobe. А при компиляции из папки драйвера выдает такое:

    Код (Text):
    1. sd@sd-ThinkPad-X220:/usr/src/linux-source-2.6.38/drivers/mmc$ sudo make
    2. [sudo] password for sd:
    3. make: *** No targets.  Stop.
    4.  
    5. sd@sd-ThinkPad-X220:/usr/src/linux-source-2.6.38/drivers/mmc$ ./configure
    6. bash: ./configure: No such file or directory
    При этом драйвер обозначен был как подгружаемый модуль.

    Как его скомпилить?
     
  10. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    Просто у вас нет правила для сборки вот поэтому и не собирается по медетируйте над make и configure.
    А вообще если есть желание понять как жить с этим то ставьте Gentoo)))
     
  11. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Lecko
    Насколько я помню, configure не вызывается из подкаталогов. Сначала запускается configure из основного каталога и он там есть. Он вам сформирует "правильные" Makefile или скажет, что в вашей системе неверно. А потом уже можно делать make. Естественно если правильно задали параметры для configure. Поэтому уже в который раз отошлю на opennet.ru Там вы достаточно быстро найдете или получите нужную инфу.
    Опять же насколько я помню, для сборки драйверов исходники ядра не нужны. Достаточно инклюдов и еще чего-то там, но именно для вашего ядра.