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


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Пишу драйвер.  (Прочитано 2564 раз)

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

Оффлайн lin-user

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Пишу драйвер.
« : 19 Октября 2012, 09:24:31 »
Здравствуйте!
Есть такая проблема: не могу скомпилировать файл драйвера на Ubuntu.
Небольшой опыт в разработке есть, но там была другая ОС и версия ядра 2.4.

hello.c
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>

MODULE_LICENSE("GPL");

static int hello_init(void) {
printk("<1> Hello world!\n");
return 0;
}

static void hello_exit(void) {
printk("<1> Bye, world\n");
}

module_init(hello_init);
module_exit(hello_exit);

Далее варианты Makefile-ов и реакция системы на них.
1.
obj-m := hello.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
user@user:~/Рабочий стол/hello$ make
make: Цель `all' не требует выполнения команд.


2.
CC:= gcc
NAME:= hello
CFLAGS:= -O2 -Wall
MODFLAGS:= -D__KERNEL__ -DMODULE -I/lib/modules/$(shell uname -r)/build/include

$(NAME).o: $(NAME).c
   $(CC) $(CFLAGS) $(MODFLAGS) -c $(NAME).c
user@user:~/Рабочий стол/hello$ make
gcc -O2 -Wall -D__KERNEL__ -DMODULE -I/lib/modules/2.6.35-32-generic/build/include -c hello.c
In file included from /lib/modules/2.6.35-32-generic/build/include/linux/list.h:6,
                 from /lib/modules/2.6.35-32-generic/build/include/linux/module.h:9,
                 from hello.c:2:
/lib/modules/2.6.35-32-generic/build/include/linux/prefetch.h:14: fatal error: asm/processor.h: Нет такого файла или каталога
compilation terminated.
make: *** [hello.o] Ошибка 1

Здесь проблема в том, что если пройти по этим путям, то в них нет каталога asm, а есть asm-generic хотя в хедерах в инклюдах указываются пути в файлам типа - asm/processor.h.
Что написать в Makefile, чтобы всё компилировалось???

Оффлайн Señor_Gaga

  • Забанен
  • Активист
  • *
  • Сообщений: 878
  • Ubuntu 12.04LTS & Linux Mint 13LTS "Maya"
    • Просмотр профиля
Re: Пишу драйвер.
« Ответ #1 : 19 Октября 2012, 11:25:11 »
Читал-читал код. Так и не понял, при чем тут копирование файла драйвера?? (откуда-куда?)

Оффлайн lin-user

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: Пишу драйвер.
« Ответ #2 : 19 Октября 2012, 18:50:53 »
Вы не могли бы более развёрнуто сказать, где нашли копирование файла драйвера?!?! Я писал о сборке драйвера - ком-пи-ли-ро-ва-ние (наверно слово это не совсем удачное)! :'(
« Последнее редактирование: 19 Октября 2012, 18:53:14 от lin-user »

Оффлайн Protopopulus

  • Старожил
  • *
  • Сообщений: 1695
  • А чего вы так смотрите?..
    • Просмотр профиля
Re: Пишу драйвер.
« Ответ #3 : 19 Октября 2012, 19:00:09 »
Цитировать
/lib/modules/2.6.35-32-generic/build/include/linux/prefetch.h:14: fatal error: asm/processor.h: Нет такого файла или каталога
compilation terminated.
make: *** [hello.o] Ошибка 1
Кагбэ намекает...
protopopulus@sofocl:~$ locate prefetch.h
/usr/src/linux-headers-3.2.0-23/arch/mips/include/asm/prefetch.h
/usr/src/linux-headers-3.2.0-23/arch/parisc/include/asm/prefetch.h
/usr/src/linux-headers-3.2.0-23/include/linux/prefetch.h
/usr/src/linux-headers-3.2.0-23-generic/include/linux/prefetch.h
/usr/src/linux-headers-3.2.0-29/arch/mips/include/asm/prefetch.h
/usr/src/linux-headers-3.2.0-29/arch/parisc/include/asm/prefetch.h
/usr/src/linux-headers-3.2.0-29/include/linux/prefetch.h
/usr/src/linux-headers-3.2.0-29-generic/include/linux/prefetch.h
Может не там заголовок ищешь? Попробуй экспорт флага
export cppflags="-I/usr/src/linux-headers-........"
Если ты владеешь знаниями, то и знания владеют тобой. (с) Protopopulus

Оффлайн lin-user

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: Пишу драйвер.
« Ответ #4 : 22 Октября 2012, 14:09:47 »
Всем спасибо за реакцию! К счастью нашёл подробные статейки, пока работает всё!
Если кому поможет:
1. http://www.opennet.ru/base/dev/dev_linux_modules.txt.html
2. http://dmilvdv.narod.ru/Translate/LDD3/index.html?ldd_compiling_loading.html
3. http://rus-linux.net/MyLDP/BOOKS/ldd2/ldd2_ch2/ldd2_ch2.html
4. http://citforum.ru/operating_systems/linux/lkmpg/
Все статейки об одном и том же, но несколько разными словами. Особенно понравилась первая.  :P

 

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