nixp.ru v3.0

25 апреля 2024,
четверг,
22:49:00 MSK

anonymous написал 7 апреля 2006 года в 12:41 (852 просмотра) Ведет себя неопределенно; открыл 1814 темы в форуме, оставил 5575 комментариев на сайте.

Я первый раз с этим сталкиваюсь. Просто возникла необходимость написания драйвера для диплома.

Когда я пробую собрать модулю по примерам то че то у меня не получается!

Пожайлуста направте на путь истинный.

_________________________

Файл 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

___________

В чем проблема?

_______________________________

Заранее благодарен!!!

rgo

думаю проблема в сорцах ядра. файлик msr.c там должен лежать.

anonymous

А где его взять-то…?

что делать то надо…?

Longobard

Ну у меня в дистрибутиве ядра он есть, /usr/src/linux-2.6.14-ck6/arch/i386/kernel/msr.c

Слей с kernel.org нормальный дистр ядра :)

anonymous

После компиляции модуля образовался файл mydrv.ko

Но при его инсталяции появляется ошибка:

[root@localhost Nikolai]# insmod ./mydrv.ko

insmod: error inserting './mydrv.ko’: -1 Invalid module format

Что это значит?

anonymous

1) obj-m := mydrv.c

Попробуй obj-m += mydrv.c

2)#include

#include

Желательно включить еще linux/kernel.h

3) MODULE_LICENSE(«GPL»);

Этот макрос лучше вызывать сразу после module_init и module_exit

4) Если не получится, попробуй другую версию ядра.

anonymous

Да это ни чего не помогло!!!

А с этой версией ядра можно еще что нибудь попробовать?

Может я исходники ядра не так установил (Потомучто их не было и мне пришлось ставить их самому. Поэтому если вас не затруднит напишите по шагам как правильно их ставить), поэтому так откомпилировалось?

Я конечно понимаю что здесь отвечают шаристые люди… но пожайлуста объясните все как младенцу :) … без вашего сленга… А то я уже запутался.

Longobard

Zlodei а зачем ты начал писать едрёный модуль, не разобравшись хотя бы в компиляции ядра? :)

По компиляции почитай статьи на nixp.ru и форум unix faq, уже обсуждалось. А если уж начал kernel programmingом заниматься — то купи Linux Kernel Development от Robert Love, бери третье издание, там про ветку 2.6.

В этой книге разобрано в том числе и как компилировать ядро, не только с юзерской, но и с программерской точки зрения.

anonymous

Ёк-макарек! А теперь быстренько сравни совпадает ли вывод команды uname -r с версией исходников. Дело в том, что ядра многих дистрибутивов (кроме slackware debian и еще некоторых) модифицированные. И недостаточно, чтобы совпадали только цифры версий. Короче сначала откомпилируй ядро с kernel.org, а потом пиши модули. Или найди оригинальные исходники для текущего ядра.

И правильно сказал LONGBOARD: рано ты занялся модулями.

anonymous
nnivanov
Ёк-макарек! А теперь быстренько сравни совпадает ли вывод команды uname -r с версией исходников..

Совпадает один в один…..

Необходимость у меня просто возникла с этим. Дали тему диплома… в котором нужно разработать программу взаимодействующую с платой АЦП PCI или ISA. Сома приложение пишу в Kylix3, просто по необходимости уже разработал эту прогу под win98 в Delphi. А вот с устройствами и портами естественно на прямую работать под Linux нельзя…. Вот и возникла необходимость писать драйвер к устройству…

Обратного пути нет… Деваться не куда, такая уж тема…. Увы….

Вот и приходиться не разобравшись с базовыми понятиями лесть в глубь.. время то поджимает.

Longobard
Zlodei
А вот с устройствами и портами естественно на прямую работать под Linux нельзя….

Whatfuck? С устройствами и портами в линухе можно работать без всяких дополнительных модулей.

Хотя на тему PCI или ISA нужно погуглить.

rgo
Вот и приходиться не разобравшись с базовыми понятиями лесть в глубь.. время то поджимает.


Я конечно понимаю что здесь отвечают шаристые люди… но пожайлуста объясните все как младенцу :) … без вашего сленга… А то я уже запутался.

А что тебе объяснить? Как поставить/скомпилировать ядро в ASP? Так форум вовсе не пестрит пользователями ASP. Я могу тебе пошагово расписать процесс установки в gentoo или в slackware, но всё равно не буду этого делать, ибо в гугле гораздо понятнее и подробнее написано.

в slackware, и gentoo спокойно собирается ядро, и компилируется/подгружается модуль hello-world. Без какого-либо геморроя с несовпадающими версиями компиляторов, и тп. Что за грабли вылезают в asp — не знаю, но очень советую поставить что-нибудь подружелюбнее к модулеписцам. Или перевести свой asp на ванильное ядро. Не asp, не ck, а именно ванильное, тк тебе вряд ли для диплома нужно какое-то специфическое ядро, а если не специфическое, то надо ванильное — логика проста. Да и туторы по написанию модулей, всё-таки ориентируются на ванильное. (если тебя смущает слово «ванильное» — то это просто значит что с kernel.org взятое — основная ветка).

После компиляции модуля образовался файл mydrv.ko

я не понял, так как же ты его скомпилировал без файлика msr.c? Отключил поддержку MSR, или поставил сорцы?

anonymous

Каким то макаром установил исходники ядра….

после чего все скомпильнулось…

Вот только меня терзают смутные сомнения что я чтото не так их устновил…

Потомучто при установке src.rpm были также какието файлы с расширениями

.patch и .config А что делать с ними не знаю. Может просто не допатчил?

rgo

надо было порыться в `man rpm' и выяснить как его заставить пропатчить сорцы файлами .patch, и установить дефолтовый для asp config.

а так, надо втыкать в `man patch' на тему как его применять. а .config достаточно просто скопировать в корень сорцов.

Последние комментарии

ecobeingecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.