Цель
Я пытаюсь написать простой драйвер устройства на Ubuntu. Я хочу сделать это с помощью Eclipse (или лучшей IDE, которая подходит для программирования драйверов). Вот код:
#include <linux/module.h>
static int __init hello_world( void )
{
printk( "hello world!\n" );
return 0;
}
static void __exit goodbye_world( void )
{
printk( "goodbye world!\n" );
}
module_init( hello_world );
module_exit( goodbye_world );
Мои усилия
После некоторых исследований я решил использовать Eclipse CTD для разработки драйвера (хотя я все еще не уверен, поддерживает ли он многопоточные инструменты отладки). Так что я:
- Установил Ubuntu 11.04 desktop x86 на виртуальную машину VMWare,
- Установил
eclipse-cdt
и linux-headers-2.6.38-8 с помощью Synaptic Package Manager, - Создал
C Project
именованныйTestDriver1
и скопированный выше код в него, - Изменена команда сборки по умолчанию
make
на следующую настраиваемую команду сборки:
make -C /lib/modules/2.6.38-8-generic/build M=/home/isaac/workspace/TestDriver1
Проблема
Я получаю сообщение об ошибке при попытке построить этот проект с использованием Eclipse. Вот журнал для сборки:
**** Сборка конфигурации Debug для проекта TestDriver1 ****
make -C /lib/modules/2.6.38-8-generic/build M = / home / isaac / workspace / TestDriver1 all
make: вход в каталог '/usr/src/linux-headers-2.6.38-8-generic'
make: *** Нет правила, чтобы сделать цель
vmlinux', needed by
всем ». Стоп.make: выход из каталога '/usr/src/linux-headers-2.6.38-8-generic'
Интересно, что я не получаю ошибку, когда я использую shell
вместо того, eclipse
чтобы построить этот проект. Чтобы использовать shell
, я просто создаю Makefile
содержимое obj-m += TestDriver1.o
и использую вышеупомянутую make
команду для сборки.
Итак, что-то должно быть не так с затмением Makefile
. Может быть, он ищет vmlinux
архитектуру (?) Или что-то в то время как текущая архитектура x86. Может это из-за VMWare?
Как я понял, eclipse
автоматическое создание make-файлов и их изменение вручную может привести к ошибкам в будущем ИЛИ усложнить управление makefile
.
Итак, как я могу скомпилировать этот проект на Eclipse?
источник
autotools
плагин. Знаете ли вы лучше IDE для программирования драйверов? Как вы думаете, я (ленивый пользователь VS, не имеющий опыта в Linux), могу управлятьmakefile
? Действительно лиmakefile
это возможно в больших проектах?Я тоже новичок в программировании драйверов Linux, я обнаружил, что появился новый способ развертывания модулей ядра (которых нет в официальном дереве Linux), называемый DKMS. Модуль будет установлен как исходный код, и DKMS позаботится о его компиляции для каждого ядра. Это означает, что Makefile для модуля будет написан вручную, а его источник не будет включен для автоинструментов.
http://linux.dell.com/dkms/
обновлен ...
DKMS переехал на http://en.community.dell.com/techcenter/os-applications/w/wiki/2463.linux-projects.aspx
Это учебники / быстрое введение в DKMS (ссылки от Dell страницы проекта): статья Linux Journal , Power Solutions бумаги , Ottawa симпозиум Linux бумаги
DKMS используется для быстрого развертывания драйвера. Например, модули ядра, использующие DKMS на моей машине с Ubuntu:
Это код, который я написал ранее, он может быть полезен как DKMS Hello World. https://github.com/sneetsher/RTD-DM5408-Driver-Port-for-Linux
источник
1> вы можете попробовать с этой командой
"make" -> "/ usr / bin / make"
2> в каталоге сохраните свой приветственный код слова, создайте имя файла «Makefile»
источник