Компиляция модуля ядра, проблемы с заголовками, проблемы с makefile - PullRequest
1 голос
/ 15 сентября 2010

хорошо, я пытаюсь скомпилировать простой модуль ядра, когда я указываю на любое из нижеперечисленного, которое включает в себя, оно жалуется на все виды вещей.

linux-headers-2.6.31-21              linux-headers-2.6.31-22              
linux-headers-2.6.31-21-generic      linux-headers-2.6.31-22-generic      
linux-headers-2.6.31-21-generic-pae  linux-headers-2.6.31-22-generic-pae

Я пытаюсь следоватьинструкции на следующем сайте: http://www.faqs.org/docs/kernel/x145.html

Я обновил файл make, чтобы он выглядел так:

TARGET  := hello_world
WARN    := -W -Wall -Wstrict-prototypes -Wmissing-prototypes
INCLUDE := -isystem /usr/src/linux-headers-2.6.31-22-generic/include
CFLAGS  := -O2 -DMODULE -D__KERNEL__ ${WARN} ${INCLUDE}
CC      := gcc

${TARGET}.o: ${TARGET}.c

.PHONY: clean

clean:
    rm -rf ${TARGET}.o

Например, когда я набираю команду make, я получаю следующую ошибку, а такжегораздо больше, исследуя папки, я вижу, что файлы процессора и кэша являются asm-generic, как в мире я должен скомпилировать это, если он не указывает на правильные местоположения файлов?

/usr/src/linux-headers-2.6.31-22-generic/include/linux/prefetch.h:14:27: error: asm/processor.h: No such file or directory
/usr/src/linux-headers-2.6.31-22-generic/include/linux/prefetch.h:15:23: error: asm/cache.h: No such file or directory

Конечной целью (страшно) является создание виртуальной файловой системы к четвергу .... (да, я знаю, что это довольно маловероятно) Я понимаю некоторые из файлов make, но, как ни странно, я ожидал, что у меня должно появиться что-то вроде $ {CC} $ {INCLUDE}, и тому подобное, но я этого совсем не вижу,

Может кто-нибудь объяснить и / / все следующие вопросы?

  1. Чтомне нужно обновить свой яnclude to, чтобы он знал правильный каталог (и если это что-то вроде того, какое ядро ​​я использую и т. д., пожалуйста, объясните, как я могу это выяснить).

  2. Может кто-нибудь объяснить, как make-файл знает, как вызывать gcc и компилировать?

  3. Есть ли еще что-то, что мне нужно знать, чтобы собрать эту вещь?

- Бонусный вопрос

Кто-нибудь знает ДЕЙСТВИТЕЛЬНО подробные учебные пособия о том, как построить VFS, у меня есть проект, которому мы были назначены, что сделал другая школа, http://oslab.info/index.php/Labs/HW4,, и на основании ограниченного программирования, которое мы делали до этого, он появляетсябыть монументальным заданием.

Ответы [ 3 ]

4 голосов
/ 15 сентября 2010

С ядром 2.6 вы должны использовать систему сборки ядра. Вот пример для модуля, построенного вне дерева ядра:

ifneq ($(KERNELRELEASE),)
# We were called by kbuild

obj-m += target.o

else  # We were called from command line

KDIR := /lib/modules/$(shell uname -r)/build
#KDIR := /home/cynove/src/kernel/linux-source-2.6.31
PWD  := $(shell pwd)

default:
    @echo '    Building target module 2.6 kernel.'
    @echo '    PLEASE IGNORE THE "Overriding SUBDIRS" WARNING'
    $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

install:
    ./do_install.sh *.ko

endif  # End kbuild check
######################### Version independent targets ##########################

clean:
    rm -f -r *.o *.ko .*cmd .tmp* core *.i

Вызывая make -C ($ KDIR) и т. Д. ..., система сборки ядра включается и выполняет эту работу за вас.

1 голос
/ 15 сентября 2010

Пример 2.2 вашей ссылки имеет следующую строку вместо той, которую вы перечислили:

INCLUDE := -isystem /lib/modules/`uname -r`/build/include

Это похоже на вероятную причину ваших проблем с компиляцией. По какой-то конкретной причине ты изменил это?

0 голосов
/ 15 сентября 2010

Глядя на пару исходных деревьев (2.6.32 - самое старое, что у меня есть), нет экземпляров processor.h, которые находятся в общем каталоге, все они зависят от архитектуры. Например

/usr/src/linux-headers-2.6.32-24/arch/x86/include/asm/processor.h

Так что я предполагаю, что в вашем Makefile отсутствует каталог include.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...