проект книги: "Модули ядра Linux"

Здесь будут размещаться ссылки и отзывы на интересные публикации по Linux

Модераторы: Olej, vikos

Правила форума
Запрещается помещать сообщения, не имеющие отношения к обсуждаемой статье. Все такие сообщения будут удаляться непосредствено после обнаружения.
Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: проект книги: "Модули ядра Linux"

Непрочитанное сообщение Olej » 15 фев 2013, 14:20

Olej писал(а): И тут же начали ещё один цикл:
Дата: 11.02.2013
Обслуживание периферии в коде модулей ядра: Часть 48. Анализ оборудования
... похоже, что для начала цикла они выложили только одну статью.
Дата: 14.02.2013
Обслуживание периферии в коде модулей ядра: Часть 49. Подсистема udev

User@
Интересующийся
Сообщения: 8
Зарегистрирован: 16 фев 2013, 11:27
Контактная информация:

Re: проект книги: "Модули ядра Linux"

Непрочитанное сообщение User@ » 16 фев 2013, 11:49

Добрый день. В 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 в файлах результатов не дает.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: проект книги: "Модули ядра Linux"

Непрочитанное сообщение Olej » 16 фев 2013, 18:06

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
Что полностью соответствует состоянию дел ... так что всё ОК ;-)

User@
Интересующийся
Сообщения: 8
Зарегистрирован: 16 фев 2013, 11:27
Контактная информация:

Re: проект книги: "Модули ядра Linux"

Непрочитанное сообщение User@ » 17 фев 2013, 23:04

Прежде всего, убедитесь, что у вас установлены пакеты из репозитария, необходимые для компиляции модулей; в первую очередь, заголовочные .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
Вложения
option.c.tar.gz
Во-первых, вы если о каком-то коде пишете, о его разборке - вы архив с кодом прикрепляйте к сообщению вместо рассказов "на пальцах".
(10.99 КБ) 638 скачиваний

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: проект книги: "Модули ядра Linux"

Непрочитанное сообщение Olej » 18 фев 2013, 02:51

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

User@
Интересующийся
Сообщения: 8
Зарегистрирован: 16 фев 2013, 11:27
Контактная информация:

Re: проект книги: "Модули ядра Linux"

Непрочитанное сообщение User@ » 18 фев 2013, 09:56

А так? :
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)... смещается (в файле располагается правильно).

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: проект книги: "Модули ядра Linux"

Непрочитанное сообщение Olej » 19 фев 2013, 01:51

Я вам написал строку вот так:

Код: Выделить всё

$(MAKE) -C $(KDIR) M=$(PWD) modules
А вы всё-равно упорно лепите вот так:

Код: Выделить всё

$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
Разница видна в написании?

User@
Интересующийся
Сообщения: 8
Зарегистрирован: 16 фев 2013, 11:27
Контактная информация:

Re: проект книги: "Модули ядра Linux"

Непрочитанное сообщение User@ » 20 фев 2013, 08:24

Код: Выделить всё

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

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: проект книги: "Модули ядра Linux"

Непрочитанное сообщение Olej » 20 фев 2013, 12:54

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:

Код: Выделить всё

45 #include "usb-wwan.h"
Я надеюсь, что вы помните, что означает такая запись #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 не годится ... а может и соберётся.

User@
Интересующийся
Сообщения: 8
Зарегистрирован: 16 фев 2013, 11:27
Контактная информация:

Re: проект книги: "Модули ядра Linux"

Непрочитанное сообщение User@ » 21 фев 2013, 12:39

Был бы признателен за наводку "в двух словах", cделать то-то , то-то..... Eсть устройство (usb-modem), видится как cd-rom; нужно скомпилировать option.c -> option.ko, все..... Есть ли варианты проще? Впрочем и без того занял ваше внимание. C Уважением.

Ответить

Вернуться в «Публикации, книги и обсуждения»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя