Я первый раз с этим сталкиваюсь. Просто возникла необходимость написания драйвера для диплома.
Когда я пробую собрать модулю по примерам то че то у меня не получается!
Пожайлуста направте на путь истинный.
_________________________
Файл mydrv.c
#include
#include
MODULE_LICENSE(«GPL»);
static int __init my_init(void)
{
printk(«<1>Da\n»);
return 0;
};
static void __exit my_cleanup(void)
{
printk(«<1>Net\n»);
return;
};
module_init(my_init);
module_exit(my_cleanup);
Makefile и mydrv.c расположены в одной папке /home/Nikolai. Компилирую тоже из этой папки.
ОС ASP Linux 2.6.9-1.667
______________________
makefile на:
obj-m := mydrv.c
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $#(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
Командная строка (из директории с makefile):
make -f makefile
Теперь выдает следующее:
[root@localhost Nikolai]# make -f makefile
make -C /lib/modules/2.6.9-1.667asp/build SUBDIRS= modules
make[1]: Entering directory `/lib/modules/2.6.9-1.667asp/build'
CHK include/linux/version.h
SPLIT include/linux/autoconf.h -> include/config/*
CHK include/asm-i386/asm_offsets.h
HOSTCC scripts/genksyms/genksyms.o
HOSTCC scripts/genksyms/lex.o
HOSTCC scripts/genksyms/parse.o
HOSTLD scripts/genksyms/genksyms
CC scripts/mod/empty.o
MKELF scripts/mod/elfconfig.h
HOSTCC scripts/mod/file2alias.o
HOSTCC scripts/mod/modpost.o
HOSTCC scripts/mod/sumversion.o
HOSTLD scripts/mod/modpost
make[2]: * Нет правила для сборки цели `arch/i386/kernel/msr.c’, требуемой для `arch/i386/kernel/msr.o’. Останов.
make[1]: * [arch/i386/kernel] Ошибка 2
make[1]: Leaving directory `/lib/modules/2.6.9-1.667asp/build'
make: * [default] Ошибка 2
___________
В чем проблема?
_______________________________
Заранее благодарен!!!
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
думаю проблема в сорцах ядра. файлик msr.c там должен лежать.
А где его взять-то…?
что делать то надо…?
Ну у меня в дистрибутиве ядра он есть, /usr/src/linux-2.6.14-ck6/arch/i386/kernel/msr.c
Слей с kernel.org нормальный дистр ядра :)
После компиляции модуля образовался файл mydrv.ko
Но при его инсталяции появляется ошибка:
[root@localhost Nikolai]# insmod ./mydrv.ko
insmod: error inserting './mydrv.ko’: -1 Invalid module format
Что это значит?
1) obj-m := mydrv.c
Попробуй obj-m += mydrv.c
2)#include
#include
Желательно включить еще linux/kernel.h
3) MODULE_LICENSE(«GPL»);
Этот макрос лучше вызывать сразу после module_init и module_exit
4) Если не получится, попробуй другую версию ядра.
Да это ни чего не помогло!!!
А с этой версией ядра можно еще что нибудь попробовать?
Может я исходники ядра не так установил (Потомучто их не было и мне пришлось ставить их самому. Поэтому если вас не затруднит напишите по шагам как правильно их ставить), поэтому так откомпилировалось?
Я конечно понимаю что здесь отвечают шаристые люди… но пожайлуста объясните все как младенцу :) … без вашего сленга… А то я уже запутался.
Zlodei а зачем ты начал писать едрёный модуль, не разобравшись хотя бы в компиляции ядра? :)
По компиляции почитай статьи на nixp.ru и форум unix faq, уже обсуждалось. А если уж начал kernel programmingом заниматься — то купи Linux Kernel Development от Robert Love, бери третье издание, там про ветку 2.6.
В этой книге разобрано в том числе и как компилировать ядро, не только с юзерской, но и с программерской точки зрения.
Ёк-макарек! А теперь быстренько сравни совпадает ли вывод команды uname -r с версией исходников. Дело в том, что ядра многих дистрибутивов (кроме slackware debian и еще некоторых) модифицированные. И недостаточно, чтобы совпадали только цифры версий. Короче сначала откомпилируй ядро с kernel.org, а потом пиши модули. Или найди оригинальные исходники для текущего ядра.
И правильно сказал LONGBOARD: рано ты занялся модулями.
Совпадает один в один…..
Необходимость у меня просто возникла с этим. Дали тему диплома… в котором нужно разработать программу взаимодействующую с платой АЦП PCI или ISA. Сома приложение пишу в Kylix3, просто по необходимости уже разработал эту прогу под win98 в Delphi. А вот с устройствами и портами естественно на прямую работать под Linux нельзя…. Вот и возникла необходимость писать драйвер к устройству…
Обратного пути нет… Деваться не куда, такая уж тема…. Увы….
Вот и приходиться не разобравшись с базовыми понятиями лесть в глубь.. время то поджимает.
Whatfuck? С устройствами и портами в линухе можно работать без всяких дополнительных модулей.
Хотя на тему PCI или ISA нужно погуглить.
А что тебе объяснить? Как поставить/скомпилировать ядро в ASP? Так форум вовсе не пестрит пользователями ASP. Я могу тебе пошагово расписать процесс установки в gentoo или в slackware, но всё равно не буду этого делать, ибо в гугле гораздо понятнее и подробнее написано.
в slackware, и gentoo спокойно собирается ядро, и компилируется/подгружается модуль hello-world. Без какого-либо геморроя с несовпадающими версиями компиляторов, и тп. Что за грабли вылезают в asp — не знаю, но очень советую поставить что-нибудь подружелюбнее к модулеписцам. Или перевести свой asp на ванильное ядро. Не asp, не ck, а именно ванильное, тк тебе вряд ли для диплома нужно какое-то специфическое ядро, а если не специфическое, то надо ванильное — логика проста. Да и туторы по написанию модулей, всё-таки ориентируются на ванильное. (если тебя смущает слово «ванильное» — то это просто значит что с kernel.org взятое — основная ветка).
я не понял, так как же ты его скомпилировал без файлика msr.c? Отключил поддержку MSR, или поставил сорцы?
Каким то макаром установил исходники ядра….
после чего все скомпильнулось…
Вот только меня терзают смутные сомнения что я чтото не так их устновил…
Потомучто при установке src.rpm были также какието файлы с расширениями
.patch и .config А что делать с ними не знаю. Может просто не допатчил?
надо было порыться в `man rpm' и выяснить как его заставить пропатчить сорцы файлами .patch, и установить дефолтовый для asp config.
а так, надо втыкать в `man patch' на тему как его применять. а .config достаточно просто скопировать в корень сорцов.