683 / 232 / 16
Регистрация: 15.10.2007
Сообщений: 1,247
|
|
1 | |
Модули ядра28.02.2009, 17:04. Показов 6350. Ответов 14
Метки нет Все метки)
(
пытаюсь написать простейший модуль ядра
не находит файл linux/module.h linux/init.h Стоит убунту 8.10
0
|
|
28.02.2009, 17:04 | |
Ответы с готовыми решениями:
14
Модули ядра и процессы Как поднять Wi-Fi на Dell 5720, используя модули ядра? нетбук с каким процом лучше n550(2 ядра )или C-50(2 ядра )? Помогайте выбрать: видюха 640М и проц i7 2.4Гц (4 ядра) или 750M и i7 2Гц (2 ядра) ? |
683 / 232 / 16
Регистрация: 15.10.2007
Сообщений: 1,247
|
|
28.02.2009, 17:22 [ТС] | 3 |
можно пример?
0
|
683 / 232 / 16
Регистрация: 15.10.2007
Сообщений: 1,247
|
|
28.02.2009, 17:27 [ТС] | 5 |
ну как мне скомпилить? пытаюсь
gcc module.c -o module.o
0
|
683 / 232 / 16
Регистрация: 15.10.2007
Сообщений: 1,247
|
|
28.02.2009, 17:37 [ТС] | 7 |
Ок попробую
0
|
Почетный модератор
7388 / 2634 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
28.02.2009, 18:18 | 8 |
Чтобы было проще, найди у себя на системе файл modules.txt, там будет написано, как билдить модули.
Добавлено через 24 минуты 1 секунду Вот так я собрал модуль на своей машине: ![]()
1
|
1 / 1 / 0
Регистрация: 12.02.2009
Сообщений: 11
|
|
04.03.2009, 18:36 | 9 |
Эпиграф:
"Перед тем, как ты напишешь драйвер, тебе необходимо будет иметь правильный удар головы..." ("before you write a driver, accent you will need to have right header (files...)") (автоперевод) >:-) Процесс компиляции модулей ядра - вещь довольно непростая :-) Чтоб написать хороший модуль надо хорошо знать ядро и систему. В частности, методы компиляции и компилятор :-) Первая сложность - задание нужных заголовочных файлов, которая проявилась у Mecid :-) Ядро имеет собственные заголовочные файлы, часто одноимённые с файлами библиотеки Си. Однако при компиляции ядра должны использоваться файлы ядра. В общем, процесс компиляции ядра зависит от многих обстоятельств и в высокой степени варьируется (в зависимости от целевой архитектуры, под действием настроек, изменениях версий...). В целом, там есть так называемая система KBuild, Kernel Build. Построение ядра (и модулей, они - часть ядра) делается (компиляция и т. д.) специальной программой make (эта утилита - часть системы UNIX, не ядра (надо, чтобы она была в системе, иначе ничего не получится)), которая берёт инструкции к действию из специальных файлов (makefiles, мэйкфайлы), располагающихся в директориях с исходниками ядра. Так строятся на деле весьма многие программы, не только ядро :-) Компиляция отдельно написанного кем-нибудь модуля может быть сделана под управлением всё тех же мэйкфайлов ядра. Надо чтобы были заданы все необходимые параметры конфигурации ядра (make config). Модуль, который будет построен, будет строится по правилам, направляющим построение модулей для данного ядра при данной общей конфигурации, с некоторыми вытекающими последствиями (возможной неработоспособностью с другим ядром, с другой конфигурацией, при изменении ещё чего-нибудь существенного). В общем, образ действий примерно такой. Для нового модуля создаётся отдельная директория (обычно где-нибудь вне исходников ядра, хотя...) :-), где располагаются его исходные файлы и Makefile. В мэйкфайле задаётся переменная obj-m, значение которой - имя компилируемого модуля (это может быть сделано в мэйкфайле примерно такой строкой: obj-m += my_module.o). Затем, если в директории нового модуля есть файл my_module.c, то он и будет использован при компиляции (без дополнительных указаний). С другой стороны, может быть много исходных C-файлов, которые надо скомпилировать и объединить в модуль. Это задаётся примерно такой строкой в мэйкфайле модуля: my_module-objs := my_source1.o my_source2.o my_source3.o some_source_other.o . Тогда при построении модуля будут построены объектные файлы my_source1.o my_source2.o my_source3.o some_source_other.o. Они будут строится путём компиляции файлов my_source1.c my_source2.c my_source3.c some_source_other.c . В общем, этого уже почти достаточно для построения модуля (таким образом, Makefile может содержать одну-две строки) :-) Чтобы всё фактически заработало надо вызвать make примерно такой командой: make -C /path/to/kernel/sources/linux-2.6.20/ SUBDIRS=/path/to/my/new/module/directory/ modules . Данная команда инструктирует make во-первых перейти в директорию с исходниками ядра (/path/to/kernel/sources/linux-2.6.20/), и, следовательно, будет прочитан находящийся там Makefile, который и управляет построением ядра. Будет использована переменная SUBDIRS, которая содержит поддиректории, которые должны быть просмотрены и мэйкфайлы в которых должны быть прочитаны для определения того, что должно быть сделано. modules - это так называемая цель для make (без дополнительного объяснения) :-)
0
|
0 / 0 / 0
Регистрация: 16.05.2009
Сообщений: 3
|
||||||
16.05.2009, 17:30 | 10 | |||||
Занимаюсь написанием модуля для курсовой. столкнулся с проблемой. Я научился выводить в файл (хотя не совсем еще понимаю, как это происходит - нашел исходник и долго его курил). Но стоит вопрос в другом - создать модуль, который будет создавать log-файл и класть в него отчет о действиях пользователей. И именно с этим нужна конкретная помощь - я не могу найти, как вытаскивать сообщения о событиях из ядра и перенаправлять в свой файл.
Вот небольшой код того, что уже написано (комментарии по большей части мои - для понятности пишу их на английском):
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
16.05.2009, 17:52 | 11 |
вроде того
в Makefile: (и всего того что ты еще компилишь) obj-m+=module.o gcc -c module.c /usr/src/linux-?????? USRDIR=~/.../module
0
|
0 / 0 / 0
Регистрация: 16.05.2009
Сообщений: 3
|
|
17.05.2009, 06:45 | 12 |
alex_x_x, это кому было адресовано? У меня нет проблем с компиляцией. у меня с реализацией проблемы
Добавлено через 4 минуты 6 секунд Mecid, тебе советую почитать вот эту книгу: The Linux Kernel Programming Guide - для ядра 2.6.х. На английском. Если не знаешь - учи. Работа с Linux подразумевает знание английского.
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
17.05.2009, 20:31 | 13 |
Lonelind, как ни странно, но я это аффтору)
0
|
0 / 0 / 0
Регистрация: 16.05.2009
Сообщений: 3
|
|
23.05.2009, 05:58 | 14 |
Блин.. На мой вопрос кто-нибудь ответит? А то уже через неделю сдавать курсовую, а я не знаю,как разрешить проблему =(
0
|
Cupper
|
|
21.01.2010, 20:09 | 15 |
Извините что поднимаю тему, но просто по гуглу искал описание ядерной функции set_fs() и наткнулся тут на ее использование ну коли используется значит вы знаете что именно она делает. Не могли бы в краце объяснить.
|
21.01.2010, 20:09 | |
Помогаю со студенческими работами здесь
15
Что будет лучше i7 2630qm (2 Гц 4 ядра) vs i5 3230m (2,6 Гц 2 ядра) ? Что выбрать: Intel 2 ядра или AMD 4 ядра?
Ядра Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |