Автор Тема: Как правильно собрать драйвер ( модуль ) ?  (Прочитано 7378 раз)

Оффлайн stpavel

  • Начинающий
  • *
  • Сообщений: 15
Добрый день.
Подскажите пожалуйста как правильно собрать драйвер под Altlinux Server 4.0.1
Имеется USB сетевуха delock usb 2.0 ethernet adapter: MCS7830 ( http://www.nslu2-linux.org/wiki/Peripherals/EthernetAdapter )
Ядро 2.6.18-ovz-smp-alt26.M40.2
Установил kernel-headers и kernel-source
Распаковал драйвера сетевухи, делаю make
в ответ
make -C /usr/src/kernel/sources/kernel-source-2.6.18 SUBDIRS=/tmp/Linux_7830 modules;
make[1]: Entering directory `/usr/src/kernel/sources/kernel-source-2.6.18'

  ERROR: Kernel configuration is invalid.
         include/linux/autoconf.h or include/config/auto.conf are missing.
         Run 'make oldconfig && make prepare' on kernel src to fix it.

Хорошо, захожу в исходники ядра , делаю
make oldconfig && make prepare
затем опять make в исходниках драйвера
make -C /lib/modules/2.6.18-ovz-smp-alt26.M40.2/build SUBDIRS=/tmp/Linux_2.6_src modules;
make[1]: Entering directory `/usr/src/kernel/sources/kernel-source-2.6.18'

  WARNING: Symbol version dump /usr/src/kernel/sources/kernel-source-2.6.18/Module.symvers
           is missing; modules will have no dependencies and modversions.

  Building modules, stage 2.
  MODPOST
/bin/sh: scripts/mod/modpost: No such file or directory
make[2]: *** [__modpost] Error 127
make[1]: *** [modules] Error 2
make[1]: Leaving directory `/usr/src/kernel/sources/kernel-source-2.6.18'
make: *** [default] Error 2

Хорошо , захожу опять в исходники ядра, делаю
 make scripts/mod/modpost
[root@mygate kernel-source-2.6.18]# make scripts/mod/modpost
gcc -m32 -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Os -pipe -msoft-float -mpreferred-stack-boundary=2  -march=i586 -mtune=generic -mregparm=3 -ffreestanding -Iinclude/asm-i386/mach-default -fomit-frame-pointer -fasynchronous-unwind-tables  -fno-stack-protector -Wdeclaration-after-statement -Wno-pointer-sign -D__KERNEL__ -Iinclude  -include include/linux/autoconf.h -m elf_i386  scripts/mod/modpost.c   -o scripts/mod/modpost
cc1: error: unrecognized command line option "-m"
make: *** [scripts/mod/modpost] Error 1
не сомневаюсь, что я делаю "что то " не так. :)
 Как все таки правильно собирать драйвера .. Отстал я от жизни, раньше было все намного проще...


Оффлайн Const

  • Глобальный модератор
  • *****
  • Сообщений: 2 653
  • Даже у плохого модератора есть свои плюсы…
1. kernel-source не нужен.
2. kernel-headerнужен в точности от вашего ядра.
3. скорее всего до make надо вызвать ./configure

Оффлайн stpavel

  • Начинающий
  • *
  • Сообщений: 15
1. kernel-source не нужен.
2. kernel-headerнужен в точности от вашего ядра.
3. скорее всего до make надо вызвать ./configure
kernel-headers-ovz-smp-2.6.18-alt26.M40.2 стоит
./configure нет, вот все что есть в исходниках драйвера
INSTALL  Makefile  ReleaseNotes  mcs7830.c  mcs7830.h  mcs7830.o  mosinst.c  mosuninst.cв INSTALL  написано :
1. "make " to compile the source.
2. ./mosinst to install the driver
3. ifconfig usbx xxx.xxx.xxx.xxx to configure the device
4. ./mosuinst to uninstall the driver
Makefile:
obj-m    := mcs7830.o

KDIR    := /lib/modules/$(shell uname -r)/build
PWD    := $(shell pwd)

default:
        $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules;
install:
        insmod mcs7830.ko
remove:
        rmmod mcs7830

clean:
        rm -rf *.*o
        rm -rf *.cmd
        rm -rf *.mod.c
        rm -rf .tmp_version*
Без исходников , к сожалению, он совсем не хочет собираться :

make -C /lib/modules/2.6.18-ovz-smp-alt26.M40.2/build SUBDIRS=/tmp/Linux_2.6_src modules;
make[1]: Entering directory `/lib/modules/2.6.18-ovz-smp-alt26.M40.2/build'
make[1]: *** No rule to make target `modules'.  Stop.
make[1]: Leaving directory `/lib/modules/2.6.18-ovz-smp-alt26.M40.2/build'
make: *** [default] Error 2
Когда подсовываю ему симлинк build на исходники, начинает сборку, но вываливается с вышеприведенными ошибками...



Оффлайн stpavel

  • Начинающий
  • *
  • Сообщений: 15
Собрал драйвер так,
Установил kernel-image-ovz-smp-2.6.18-alt26.M40.2.src.rpm
Установил kernel-source-2.6.18-1.0.0-alt1
Собрал ( пересобрал ) ядро  rpm -bb --target i586 ./kernel-image.spec
Натравил Makefile драйвера  на каталог build
После этого все собралось на ура.
Предполагаю , разумно иметь какой нибудь kernel-devel для того что бы можно было собрать драйвер без пересборки ядра , либо ( в чем я уверен ) я собрал модуль не по правильной схеме :) Но как говориться главное результат.



Оффлайн Const

  • Глобальный модератор
  • *****
  • Сообщений: 2 653
  • Даже у плохого модератора есть свои плюсы…
Понятно: у вас драйвер, написанный через жёппу.
Похоже, он пытается организовать пересборку всех модулей, включая себя.