LINUX.ORG.RU

linux/module.h Где искать?


0

1

По вот этому руководству: http://tldp.org/LDP/lkmpg/2.6/html/ пытаюсь скомпилить модуль ядра. Но компилятор пишет, что не может найти linux/module.h и ещё некоторые заголовочные файлы. Система Fedora 13. Установлены пакеты: kernel-headers, kernel-devel. Что не так? Как доустановить эти заголовочные файлы?

★★★

Последнее исправление: Dorif (всего исправлений: 1)

Ох, чую это старая книжка, даже на русском читал(издательства кудиц-образ), автор Ори Померанц. Увы, устарела, ищи более свежие статьи и примеры и смотри на существующие модули.

true_admin ★★★★★
()
Ответ на: комментарий от arsi

Ok. Но мне хотелось бы понимать, что делает команда make -c/usr/src/linux-2.6.8 M=pwd modules Не хочется делать «абы было».

Dorif ★★★
() автор топика
Ответ на: комментарий от edigaryev

Уй ё... Йа невнимательное тупицо.... (головой ап стенку)

Dorif ★★★
() автор топика
Ответ на: комментарий от Dorif

> Но мне хотелось бы понимать, что делает команда make -c/usr/src/linux-2.6.8 M=pwd modules

этой командой вы вежливо просите ядерный мейкфайл собрать для вас модуль, не входящий в дерево сорцов ядра, а расположенный в текущей директории. и собрать так, чтобы он работал именно с этим ядром (версия, конфиги etc).

arsi ★★★★★
()
Ответ на: комментарий от edigaryev

Спасибо, всё получилось!

Dorif ★★★
() автор топика
Ответ на: комментарий от Dorif

> А M= Что определяет?

путь к модулю. pwd — текущая директория (по аналогии с консольной командой pwd).

arsi ★★★★★
()
Ответ на: комментарий от arsi

Так, вот сорцы Makefile:

obj-m += hellokernel.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
Интересно в нём разобраться. Первая строчка, насколько я понимаю, определяет что мы хотим скомпилить?

Dorif ★★★
() автор топика
Ответ на: комментарий от Dorif

первая строчка — для ядерного мейкфайла: ему от вас только несколько переменных нужны (в данном случае — одна, obj-m). а всё остальное — исключительно для вас. можете, например, сделать три файла:

Makefile (нужен ядерному мейкфайлу):

obj-m += hellokernel.o

build.sh:

#!/bin/sh
make -C /usr/src/linux M=`pwd` modules

clean.sh:

#!/bin/sh
make -C /usr/src/linux M=`pwd` clean

или, например, два файла:

Makefile (ну вы в курсе):

obj-m += hellokernel.o

hellokernel.mk:

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

(и запускать «make -f hellokernel.mk» или «make -f hellokernel.mk clean».)

или один, как в вашем посте.

arsi ★★★★★
()

кстати, можно вообще все запихнуть в мейкфайл, и запускать make без параметров

lazyklimm ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.