Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Не могу скомпилировать модуль ядра  (Прочитано 1100 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн misplaced

  • Автор темы
  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Доброго времени суток!

Никак не могу разобраться почему компилятор упорно отказывается компилировать файл следующего содержания:
include <kernel.h>
include <module.h>

// end of file
Тело исходника было вырезано для того, чтобы убедиться, что затык именно в подключенном linux/module.h

$ gcc -g -D__KERNEL__ -DMODULE -O2 -I/usr/src/linux-headers-2.6.32-122/include -I/usr/src/linux-headers-2.6.32-122-rtai/include -I/usr/src/linux-headers-2.6.32-122/arch/x86/include -o ttt.o ttt.c
 ...

 In file included from /usr/src/linux-headers-2.6.32-122/include/linux/prefetch.h:14,
                  from /usr/src/linux-headers-2.6.32-122/include/linux/list.h:6,
                  from /usr/src/linux-headers-2.6.32-122/include/linux/module.h:9,
                  from ttt.c:5:
 /usr/src/linux-headers-2.6.32-122/arch/x86/include/asm/processor.h:116: error: ‘CONFIG_X86_L1_CACHE_SHIFT’ undeclared here (not in a function)
 /usr/src/linux-headers-2.6.32-122/arch/x86/include/asm/processor.h:116: error: requested alignment is not a constant

 ...

 /usr/src/linux-headers-2.6.32-122/arch/x86/include/asm/processor.h: In function ‘load_cr3’:
 /usr/src/linux-headers-2.6.32-122/arch/x86/include/asm/processor.h:193: error: ‘CONFIG_PAGE_OFFSETUL’ undeclared (first use in this function)
 /usr/src/linux-headers-2.6.32-122/arch/x86/include/asm/processor.h:193: error: (Each undeclared identifier is reported only once
 /usr/src/linux-headers-2.6.32-122/arch/x86/include/asm/processor.h:193: error: for each function it appears in.)
 /usr/src/linux-headers-2.6.32-122/arch/x86/include/asm/processor.h: At top level:
 /usr/src/linux-headers-2.6.32-122/arch/x86/include/asm/processor.h:242: error: requested alignment is not a constant
 /usr/src/linux-headers-2.6.32-122/arch/x86/include/asm/processor.h:273: error: requested alignment is not a constant
...
Что за CONFIG_X86_L1_CACHE_SHIFT ? Где он определяется?
Прочитал кучу статей про сборку модулей ядра. Все приведённые в статьях примеры начинаются с #include <linux/kernel.h> and <linux/module.h> . Что собственно я и сделал и тут же упёрся в не определённое определение/макрос.
Что я неправильно делаю?

Спасибо.

Оффлайн S_F_H

  • Участник
  • *
  • Сообщений: 129
  • Да будет crossplatform!
    • Просмотр профиля
Re: Не могу скомпилировать модуль ядра
« Ответ #1 : 25 Апреля 2012, 23:43:25 »
#include <linux/kernel.h>

а Makefile лучше используйте следующего вида:
CURRENT = $(shell uname -r)
KDIR = /lib/modules/$(CURRENT)/build
PWD = $(shell pwd)
DEST = /lib/modules/$(CURRENT)/misc

TARGET1 = test #имя файла с исходником без расширения

obj-m := $(TARGET1).o

default:
$(MAKE) -C $(KDIR) M=$(PWD) modules

clean:
@rm -f *.o .*.cmd .*.flags *.mod.c *.order
@rm -f .*.*.cmd *.symvers *~ *.*~
@rm -fR .tmp*
@rm -rf .tmp_versions

Пользователь решил продолжить мысль 25 Апреля 2012, 23:46:13:
Если ядро собрано по-умолчанию, то возможно, что версии исходников, применяемые в примере отличаются от имеющихся в вашем ядре. Это частая проблема, учитывая, что исходники API ядра довольно часто координально меняются  :(
« Последнее редактирование: 25 Апреля 2012, 23:46:13 от S_F_H »

 

Страница сгенерирована за 0.016 секунд. Запросов: 22.