Страница 17 из 19
Re: проект книги: "Модули ядра Linux"
Добавлено: 15 фев 2013, 14:20
Olej
Re: проект книги: "Модули ядра Linux"
Добавлено: 16 фев 2013, 11:49
User@
Добрый день. В Ubuntu 12.04.1 не компилируются модули:
----------make -C /lib/modules/$(uname -r)/build M=/home/user/linux-3.2.0/drivers/usb/serial-------
kim@HP:~$ sudo make -C /lib/modules/$(uname -r)/build M=/home/kim/linux-3.2.0/drivers/usb/serial
[sudo] password for kim:
make: Entering directory `/usr/src/linux-headers-3.2.0-29-generic'
CC [M] /home/kim/linux-3.2.0/drivers/usb/serial/option.o
/home/kim/linux-3.2.0/drivers/usb/serial/option.c:565:2: error: implicit declaration of function ‘USB_VENDOR_AND_INTERFACE_INFO’ [-Werror=implicit-function-declaration]
/home/kim/linux-3.2.0/drivers/usb/serial/option.c:565:2: error: initializer element is not constant
/home/kim/linux-3.2.0/drivers/usb/serial/option.c:565:2: error: (near initialization for ‘option_ids[33].match_flags’)
/home/kim/linux-3.2.0/drivers/usb/serial/option.c:566:2: error: initializer element is not constant
/home/kim/linux-3.2.0/drivers/usb/serial/option.c:566:2: error: (near initialization for ‘option_ids[34].match_flags’)
........
........
make[1]: *** [/home/kim/linux-3.2.0/drivers/usb/serial/option.o] Error 1
make: *** [_module_/home/kim/linux-3.2.0/drivers/usb/serial] Error 2
make: Leaving directory `/usr/src/linux-headers-3.2.0-29-generic'
На 3 страницы темы нашел что-то похожее но какие манипуляции делать не знаю. Не знаю где находится Makefile, чтобы закомментировать -Werror; из терминала поиск слова Werror в файлах результатов не дает.
Re: проект книги: "Модули ядра Linux"
Добавлено: 16 фев 2013, 18:06
Olej
User@ писал(а):Добрый день. В Ubuntu 12.04.1 не компилируются модули:
Прежде всего, убедитесь, что у вас установлены
пакеты из репозитария, необходимые для компиляции модулей; в первую очередь, заголовочные .h файлы. Во многих дистрибутивах Linux они не установлены по умолчанию. Например, в Fedora 17 :
Код: Выделить всё
Установленные пакеты
kernel.i686 3.5.2-1.fc17 installed
kernel-PAE.i686 3.5.2-1.fc17 installed
kernel-PAE-devel.i686 3.5.2-1.fc17 installed
kernel-PAE-modules-extra.i686 3.5.2-1.fc17 installed
kernel-doc.noarch 3.5.2-1.fc17 installed
kernel-headers.i686 3.5.2-1.fc17 installed
kernel-tools.i686 3.5.2-1.fc17 installed
kernel-tools-devel.i686 3.5.2-1.fc17 installed
Здесь kernel-headers.i686 и kernel-PAE-devel.i686 - нужны (как минимум), но по умолчанию не установлены, и устанавливались дополнительно.
Покажите ваш вывод:
Код: Выделить всё
bash-4.2$ ls -w80 /lib/modules/`uname -r`
build modules.builtin modules.modesetting source
extra modules.builtin.bin modules.networking updates
kernel modules.dep modules.order vdso
modules.alias modules.dep.bin modules.softdep
modules.alias.bin modules.devname modules.symbols
modules.block modules.drm modules.symbols.bin
bash-4.2$ ls -w80 /lib/modules/`uname -r`/build/include
acpi crypto Kbuild math-emu misc pcmcia scsi trace
asm-generic drm keys media mtd rdma sound video
config generated linux memory net rxrpc target xen
Очень вызывает сомнения:
User@ писал(а):
/home/kim/linux-3.2.0/drivers/usb/serial/option.c:565:2: error: implicit declaration of function ‘USB_VENDOR_AND_INTERFACE_INFO’ [-Werror=implicit-function-declaration]
Во-первых, вы если о каком-то коде пишете, о его разборке - вы
архив с кодом прикрепляйте к сообщению вместо рассказов "на пальцах".
А, во-вторых, такое имя как USB_VENDOR_AND_INTERFACE_INFO присутствует в ядре начиная с версии 3.6:
http://lxr.free-electrons.com/ident?v=3 ... RFACE_INFO
include/linux/usb.h, line 877
А у вас, как я вижу, версия 3.2, где такое имя начисто отсутствует:
http://lxr.free-electrons.com/ident?v=3 ... RFACE_INFO
USB_VENDOR_AND_INTERFACE_INFO
Not used
Что полностью соответствует состоянию дел ... так что всё ОК
Re: проект книги: "Модули ядра Linux"
Добавлено: 17 фев 2013, 23:04
User@
Прежде всего, убедитесь, что у вас установлены пакеты из репозитария, необходимые для компиляции модулей; в первую очередь, заголовочные .h файлы. Во многих дистрибутивах Linux они не установлены по умолчанию.
Заголовочные файлы есть:
Код: Выделить всё
root@HP:~# locate linux/kernel.h && locate linux/jiffies.h && locate linux/errno.h && locate linux/tty.h && locate linux/tty_flip.h && locate linux/slab.h && locate linux/module.h && locate linux/bitops.h && locate linux/usb.h && locate linux/usb/serial.h && locate usb-wwan.h
/usr/include/linux/kernel.h
/usr/src/linux-headers-3.2.0-29/include/linux/kernel.h
/usr/src/linux-headers-3.2.0-29-generic/include/linux/kernel.h
/usr/src/linux-headers-3.2.0-29/include/linux/jiffies.h
/usr/src/linux-headers-3.2.0-29-generic/include/linux/jiffies.h
/usr/include/linux/errno.h
/usr/src/linux-headers-3.2.0-29/include/linux/errno.h
/usr/src/linux-headers-3.2.0-29-generic/include/linux/errno.h
/usr/include/linux/tty.h
/usr/src/linux-headers-3.2.0-29/include/linux/tty.h
/usr/src/linux-headers-3.2.0-29-generic/include/linux/tty.h
/usr/src/linux-headers-3.2.0-29/include/linux/tty_flip.h
/usr/src/linux-headers-3.2.0-29-generic/include/linux/tty_flip.h
/usr/src/linux-headers-3.2.0-29/include/linux/slab.h
/usr/src/linux-headers-3.2.0-29-generic/include/linux/slab.h
/usr/src/linux-headers-3.2.0-29/include/linux/module.h
/usr/src/linux-headers-3.2.0-29-generic/include/linux/module.h
/usr/src/linux-headers-3.2.0-29/include/linux/bitops.h
/usr/src/linux-headers-3.2.0-29-generic/include/linux/bitops.h
/usr/src/linux-headers-3.2.0-29/include/linux/usb.h
/usr/src/linux-headers-3.2.0-29-generic/include/linux/usb.h
/usr/src/linux-headers-3.2.0-29/include/linux/usb/serial.h
/home/kim/linux-3.2.0/drivers/usb/serial/usb-wwan.h # этот файл только в home папке (остальные заголовочные home папки убрал из из этого перечня)
Покажите ваш вывод:
Код: Выделить всё
root@HP:~# ls -w80 /lib/modules/`uname -r`
build modules.builtin.bin modules.inputmap modules.softdep
initrd modules.ccwmap modules.isapnpmap modules.symbols
kernel modules.dep modules.ofmap modules.symbols.bin
modules.alias modules.dep.bin modules.order modules.usbmap
modules.alias.bin modules.devname modules.pcimap updates
modules.builtin modules.ieee1394map modules.seriomap
root@HP:~# ls -w80 /lib/modules/`uname -r`/build/include
acpi crypto Kbuild math-emu mtd rdma sound video
asm-generic drm keys media net rxrpc target xen
config generated linux misc pcmcia scsi trace
Изменения для модуля usbserial.
Попробовал иначе:
Код: Выделить всё
root@HP:~# mkdir /home/folder; cp /home/kim/linux-3.2.0/drivers/usb/serial/option.c /home/folder/option.c; touch /home/folder/Makefile; gedit /home/folder/Makefile
obj-m := option.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
Код: Выделить всё
root@HP:~# cd /home/folder && make
make -C /lib/modules/3.2.0-29-generic/build SUBDIRS=/home/folder modules
make[1]: Entering directory `/usr/src/linux-headers-3.2.0-29-generic'
CC [M] /home/folder/option.o
/home/folder/option.c:45:22: fatal error: usb-wwan.h: No such file or directory
compilation terminated.
make[2]: *** [/home/folder/option.o] Error 1
make[1]: *** [_module_/home/folder] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-3.2.0-29-generic'
make: *** [default] Error 2
Re: проект книги: "Модули ядра Linux"
Добавлено: 18 фев 2013, 02:51
Olej
User@ писал(а):
Попробовал иначе:
obj-m := option.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
А так? :
Код: Выделить всё
CURRENT = $(shell uname -r)
KDIR = /lib/modules/$(CURRENT)/build
PWD = $(shell pwd)
TARGET = option
obj-m := $(TARGET).o
module:
$(MAKE) -C $(KDIR) M=$(PWD) modules
Re: проект книги: "Модули ядра Linux"
Добавлено: 18 фев 2013, 09:56
User@
А так? :
CURRENT = $(shell uname -r)
KDIR = /lib/modules/$(
CURRENT)/build
PWD = $(shell pwd)
TARGET = option
obj-m := $(
TARGET).o
module:
$(
MAKE) -C $(
KDIR) SUBDIRS=$(
PWD) modules
Код: Выделить всё
root@HP:~# cd /home/folder && make
make -C /lib/modules/3.2.0-29-generic/build SUBDIRS=/home/folder modules
make[1]: Entering directory `/usr/src/linux-headers-3.2.0-29-generic'
CC [M] /home/folder/option.o
/home/folder/option.c:45:22: fatal error: usb-wwan.h: No such file or directory
compilation terminated.
make[2]: *** [/home/folder/option.o] Error 1
make[1]: *** [_module_/home/folder] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-3.2.0-29-generic'
make: *** [module] Error 2
*жирным подсветка синтаксиса.
здесь строка $(MAKE)... смещается (в файле располагается правильно).
Re: проект книги: "Модули ядра Linux"
Добавлено: 19 фев 2013, 01:51
Olej
Я вам написал строку вот так:
А вы всё-равно упорно лепите вот так:
Разница видна в написании?
Re: проект книги: "Модули ядра Linux"
Добавлено: 20 фев 2013, 08:24
User@
Код: Выделить всё
CURRENT = $(shell uname -r)
KDIR = /lib/modules/$(CURRENT)/build
PWD = $(shell pwd)
TARGET = option
obj-m := $(TARGET).o
module:
$(MAKE) -C $(KDIR) M=$(PWD) modules
Код: Выделить всё
~# cd /home/folder && make
make -C /lib/modules/3.2.0-29-generic/build M=/home/folder modules
make[1]: Entering directory `/usr/src/linux-headers-3.2.0-29-generic'
CC [M] /home/folder/option.o
/home/folder/option.c:45:22: fatal error: usb-wwan.h: No such file or directory
compilation terminated.
make[2]: *** [/home/folder/option.o] Error 1
make[1]: *** [_module_/home/folder] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-3.2.0-29-generic'
make: *** [module] Error 2
Код: Выделить всё
~$ dpkg --list | grep linux-image
ii linux-image-3.2.0-29-generic 3.2.0-29.46 Linux kernel image for version 3.2.0 on 64 bit x86 SMP
ii linux-image-generic 3.2.0.29.31 Generic Linux kernel image
~$ dpkg --list | grep linux-headers
ii linux-headers-3.2.0-29 3.2.0-29.46 Header files related to Linux kernel version 3.2.0
ii linux-headers-3.2.0-29-generic 3.2.0-29.46 Linux kernel headers for version 3.2.0 on 64 bit x86 SMP
ii linux-headers-generic 3.2.0.29.31 Generic Linux kernel headers
Код: Выделить всё
dpkg --list | grep gcc
ii gcc 4:4.6.3-1ubuntu5 GNU C compiler
ii gcc-4.6 4.6.3-1ubuntu5 GNU C compiler
ii gcc-4.6-base 4.6.3-1ubuntu5 GCC, the GNU Compiler Collection (base package)
ii libgcc1 1:4.6.3-1ubuntu5 GCC support library
Re: проект книги: "Модули ядра Linux"
Добавлено: 20 фев 2013, 12:54
Olej
User@ писал(а):
/home/folder/option.c:45:22: fatal error: usb-wwan.h: No such file or directory
А теперь отправляется в исходные коды ядра, вот сюда для вашей версии (3.2), я уже давал вам эти ссылки -
http://lxr.free-electrons.com/source/dr ... on.c?v=3.2:
Я надеюсь, что вы помните, что означает такая запись #include, с такими ограничителями "..." в отличие от <...>? Правильно, что это файл из
текущей, а не из системной директории. Смотрим -
http://lxr.free-electrons.com/source/dr ... ial/?v=3.2:
Код: Выделить всё
...
option.c 74067 bytes
...
usb-wwan.h 2228 bytes
usb_debug.c 2428 bytes
usb_wwan.c 19278 bytes
...
И без usb-wwan.h в текущем каталоге ваш модуль, естественно, не соберётся.
Но и с ним, возможно, не соберётся
- нужно будет и usb-wwan.c прикомпилировать, а тогда ваш Makefile не годится ... а может и соберётся.
Re: проект книги: "Модули ядра Linux"
Добавлено: 21 фев 2013, 12:39
User@
Был бы признателен за наводку "в двух словах", cделать то-то , то-то..... Eсть устройство (usb-modem), видится как cd-rom; нужно скомпилировать option.c -> option.ko, все..... Есть ли варианты проще? Впрочем и без того занял ваше внимание. C Уважением.