Сборка модуля ядра (Ubuntu/Debian)

Вопросы программного кода и архитектуры Linux

Модератор: Olej

xaker1
Активист
Сообщения: 10
Зарегистрирован: 28 июн 2013, 11:45
Контактная информация:

Re: Сборка модуля ядра

Непрочитанное сообщение xaker1 » 29 июн 2013, 14:04

Olej писал(а):
xaker1 писал(а):Использован первый пример из книгиРазработка модулей ядра Linux: Часть 1. Первые шаги.

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

$ uname -a
Linux ubuntu 3.2.0-41-generic-pae #66-Ubuntu SMP Thu Apr 25 03:50:20 UTC 2013 i686 athlon i386 GNU/Linux
Вообще довольно странно... сборкой вы занимаетесь в Ubuntu... Ubuntu под ARM? ;-)
Ну да) Только вот на arm никакой ubuntu нет) чистое ядро (2.6 вроде), да окружение. FriendlyARM :)

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

Re: Сборка модуля ядра

Непрочитанное сообщение Olej » 29 июн 2013, 16:59

xaker1 писал(а): - ничего не удается.
Проверяем...

Система Ubuntu 10.04 (почти то ;-) )

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

olej@atom:~$ cat /etc/debian_version 
squeeze/sid

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

olej@atom:~$ u_n_a_m_e -r
2.6.32-45-generic
Сборка в точности того же примера модулей ядра:

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

olej@atom:~/2013-WORK/tools/export-data$ make
make -C /lib/modules/2.6.32-45-generic/build M=/home/olej/2013-WORK/tools/export-data modules
make[1]: Вход в каталог `/usr/src/linux-headers-2.6.32-45-generic'
  CC [M]  /home/olej/2013-WORK/tools/export-data/md1.o
/home/olej/2013-WORK/tools/export-data/md1.c:14: warning: ‘md1_local’ defined but not used
  CC [M]  /home/olej/2013-WORK/tools/export-data/md2.o
  CC [M]  /home/olej/2013-WORK/tools/export-data/md3.o
  Building modules, stage 2.
  MODPOST 3 modules
  CC      /home/olej/2013-WORK/tools/export-data/md1.mod.o
  LD [M]  /home/olej/2013-WORK/tools/export-data/md1.ko
  CC      /home/olej/2013-WORK/tools/export-data/md2.mod.o
  LD [M]  /home/olej/2013-WORK/tools/export-data/md2.ko
  CC      /home/olej/2013-WORK/tools/export-data/md3.mod.o
  LD [M]  /home/olej/2013-WORK/tools/export-data/md3.ko
make[1]: Выход из каталога `/usr/src/linux-headers-2.6.32-45-generic'

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

olej@atom:~/2013-WORK/tools/export-data$ ls -l *.ko
-rw-r--r-- 1 olej olej 3753 2013-06-29 16:30 md1.ko
-rw-r--r-- 1 olej olej 3060 2013-06-29 16:30 md2.ko
-rw-r--r-- 1 olej olej 2714 2013-06-29 16:30 md3.ko
А вот установленные заголовочный файлы ядра для этой версии ядра (в точности той же, что даёт uname):
Synaptic .png
(89.44 КБ) 4856 скачиваний
У вас их (подверсий хэдеров) может стоять после обновлений несколько, как и у меня ;-) (это всё следы обновлений):

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

olej@atom:~$ ls /lib/modules
2.6.32-33-generic  2.6.32-35-generic  2.6.32-37-generic  2.6.32-41-generic  2.6.32-45-generic
2.6.32-34-generic  2.6.32-36-generic  2.6.32-39-generic  2.6.32-42-generic
И в пакетной системе их может быть довольно много:

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

olej@atom:~$ dpkg -l | grep linux-headers | wc -l
19
Но должна стоять та версия, которая до последней буквы-цифры совпадает с текущей версией ядра (то, что даёт uname), если вы обновите ядра до изменения одной только буквы в его написании - ваш собранный модуль ядра будет уже не годиться для такого ядра, и просто он не загрузится по проверке сигнатуры ядра.

Так что ищите что у вас не доустановлено из пакетов.

xaker1
Активист
Сообщения: 10
Зарегистрирован: 28 июн 2013, 11:45
Контактная информация:

Re: Сборка модуля ядра

Непрочитанное сообщение xaker1 » 30 июн 2013, 13:47

Olej писал(а):Так что ищите что у вас не доустановлено из пакетов.
Установлено все, обновления практически не накатывались.
Модуль удалось собрать, после изменения Makefile, вручную прописали obj-m.
Да и с CURRENT был косяк, в KDIR попадал лишний проблел, перед /build, поэтому тоже прописано вручную

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

xaker1@ubuntu:~/pulse_counter/module$ cat Makefile
#CURRENT = $(shell uname -r)
CURRENT = 3.2.0-41-generic-pae
KDIR = /lib/modules/$(CURRENT)/build
PWD = $(shell pwd)
#TARGET1 = md1
#TARGET2 = md2
#TARGET3 = md3
obj-m := md1.o md2.o
default:
 $(MAKE) -C $(KDIR) M=$(PWD) modules
clean:
 @rm -f *.o .*.cmd .*.flags *.mod.c *.order
 @rm -f .*.*.cmd *~ *.*~ TODO.*
 @rm -fR .tmp*
 @rm -rf .tmp_versions
disclean: clean
 @rm *.ko *.symvers

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

Re: Сборка модуля ядра

Непрочитанное сообщение Olej » 30 июн 2013, 16:10

xaker1 писал(а): Да и с CURRENT был косяк, ...

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

#CURRENT = $(shell uname -r)
CURRENT = 3.2.0-41-generic-pae
Покажите сюда вывод в терминале команды "uname -r" в вашей системе.

xaker1
Активист
Сообщения: 10
Зарегистрирован: 28 июн 2013, 11:45
Контактная информация:

Re: Сборка модуля ядра

Непрочитанное сообщение xaker1 » 30 июн 2013, 17:13

Olej писал(а):
xaker1 писал(а): Да и с CURRENT был косяк, ...

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

#CURRENT = $(shell uname -r)
CURRENT = 3.2.0-41-generic-pae
Покажите сюда вывод в терминале команды "uname -r" в вашей системе.
xaker1@ubuntu:~$ uname -r
3.2.0-41-generic-pae
.

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

Re: Сборка модуля ядра

Непрочитанное сообщение Olej » 30 июн 2013, 18:09

xaker1 писал(а):
Olej писал(а):
xaker1 писал(а): Да и с CURRENT был косяк, ...

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

#CURRENT = $(shell uname -r)
CURRENT = 3.2.0-41-generic-pae
Покажите сюда вывод в терминале команды "uname -r" в вашей системе.
xaker1@ubuntu:~$ uname -r
3.2.0-41-generic-pae
.
Тогда мне совершенно непонятно почему у вас эта команда не срабатывает в Makefile :-o

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

Re: Сборка модуля ядра (Ubuntu/Debian)

Непрочитанное сообщение Olej » 01 ноя 2013, 14:46

Olej писал(а):
xaker1 писал(а): - ничего не удается.
Проверяем...
...
Так что ищите что у вас не доустановлено из пакетов.
Сейчас снова на это сам напоролся ... поэтому повторяю (для себя и других непонятливых ;-) ):

1. Система Debian ... - Экспериментальная сборка дистрибутива Debian Wheezy + MATE
olej@notebook:/etc$ cat /etc/debian_version
7.2
2. Естественно, при попытке сборки модуля:

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

olej@notebook:~/2013_WORK/OWN.BOOKS/BOOK.Kernel.org/Kexamples.BOOK/first_hello$ make
make -C /lib/modules/3.2.0-4-486/build M=/home/olej/2013_WORK/OWN.BOOKS/BOOK.Kernel.org/Kexamples.BOOK/first_hello modules
make: *** /lib/modules/3.2.0-4-486/build: Нет такого файла или каталога.  Останов.
make: *** [default] Ошибка 2
Нет никаких заголовочных файлов:

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

olej@notebook:/lib/modules/3.2.0-4-486/kernel$ pwd
/lib/modules/3.2.0-4-486/kernel
olej@notebook:/lib/modules/3.2.0-4-486/kernel$ ls -l
итого 36
drwxr-xr-x  3 root root  4096 Окт 13 19:38 arch
drwxr-xr-x  3 root root 12288 Окт 13 19:50 crypto
drwxr-xr-x 66 root root  4096 Окт 13 19:38 drivers
drwxr-xr-x 58 root root  4096 Окт 13 19:50 fs
drwxr-xr-x  5 root root  4096 Окт 13 19:50 lib
drwxr-xr-x 41 root root  4096 Окт 13 19:38 net
drwxr-xr-x 11 root root  4096 Окт 13 19:50 sound
Что (пакет?) нужно доустанавливать?...

3.

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

olej@notebook:/lib/modules$ aptitude show linux-headers
Нет в наличии или подходящей версии для linux-headers
Пакет: linux-headers
Состояние: не реальный пакет

Предоставляется: linux-headers-3.2.0-4-486, linux-headers-3.2.0-4-686-pae, linux-headers-3.2.0-4-amd64, linux-headers-3.2.0-4-rt-686-pae,
                                linux-headers-486, linux-headers-686-pae, linux-headers-amd64, linux-headers-rt-686-pae
Ну а дальше устанавливаем в соответствии с текущим работающим ядром:

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

olej@notebook:/lib/modules/3.2.0-4-486$ sudo aptitude install linux-headers-3.2.0-4-486
Следующие НОВЫЕ пакеты будут установлены:
  linux-headers-3.2.0-4-486 linux-headers-3.2.0-4-common{a} linux-kbuild-3.2{a}
0 пакетов обновлено, 3 установлено новых, 0 пакетов отмечено для удаления, и 5 пакетов не обновлено.
Необходимо получить 4.367 kB архивов. После распаковки 27,4 MB будет занято.
Хотите продолжить? [Y/n/?] y
Получить: 1 http://mirror.yandex.ru/debian/ wheezy/main linux-headers-3.2.0-4-common i386 3.2.51-1 [3.561 kB]
Получить: 2 http://mirror.yandex.ru/debian/ wheezy/main linux-kbuild-3.2 i386 3.2.17-1 [233 kB]
Получить: 3 http://mirror.yandex.ru/debian/ wheezy/main linux-headers-3.2.0-4-486 i386 3.2.51-1 [573 kB]
Получено 4.367 kБ в 9с (467 kБ/с)
Выбор ранее не выбранного пакета linux-headers-3.2.0-4-common.
(Чтение базы данных … на данный момент установлено 209655 файлов и каталогов.)
Распаковывается пакет linux-headers-3.2.0-4-common (из файла …/linux-headers-3.2.0-4-common_3.2.51-1_i386.deb) …
Выбор ранее не выбранного пакета linux-kbuild-3.2.
Распаковывается пакет linux-kbuild-3.2 (из файла …/linux-kbuild-3.2_3.2.17-1_i386.deb) …
Выбор ранее не выбранного пакета linux-headers-3.2.0-4-486.
Распаковывается пакет linux-headers-3.2.0-4-486 (из файла …/linux-headers-3.2.0-4-486_3.2.51-1_i386.deb) …
Настраивается пакет linux-headers-3.2.0-4-common (3.2.51-1) …
Настраивается пакет linux-kbuild-3.2 (3.2.17-1) …
Настраивается пакет linux-headers-3.2.0-4-486 (3.2.51-1) …
Этого для компиляции модулей по-минимуму - достаточно ...
Для этих целей этого достаточно ... не нужно никаких, массово описываемых по Интернет, специфических Debian/Ubuntu-задрочек, типа module-assistant, kernel-package и пр.

Ответить

Вернуться в «Linux изнутри»

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

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