Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.06.2010, 19:58   #1
Negent
Студент
Пользователь
 
Аватар для Negent
 
Регистрация: 11.06.2010
Сообщений: 39
Радость Написание драйверов на С++ реально?

Добрый вечер, товарищи-программисты!
У меня возник вот такой вопрос, который в общем смысле звучит так: "Как написать драйвер под Linux на C++?".
Если более подробно обрисовать ситуацию, скажу: я программирую на плюсах (С++), ну ещё знаю Pascal и вот, в университете мне дали тему "Написание драйверов под Linux для нестандартных устройств" (датчика температуры, например). До сих пор, никогда я раньше, не занимался написанием драйверов, но вся проблема состоит в том, что как будто бы, есть книга Алессандро Рубини (Alessandro Rubini) по написанию драйверов. Но примеры даны на С (!). Хотя языки и похожи, но судя по началу книги различаются. И теперь стоит дилемма: "Что мне, С изучать что-ли?!". Или может быть есть другое исчерпывающее руководство для начинающих писать драйвера для UNIX/Linux, на С++?
P. S. Прошу "гуглить" не посылать.
"...Попытайся ухватить звёзды с небес, чем переживай, что до них не дотянуться..."
Negent вне форума Ответить с цитированием
Старый 23.06.2010, 20:21   #2
alex_alpha
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 43
По умолчанию

Знаете, я тоже только учу С++, так что подсказать Вам не могу. Но, фраза "Что мне, С изучать, что-ли?" показалась смешной, уж извините. Как вообще можно учить С++, не изучив С? Это же основы.
Поправьте меня, если я ошибаюсь.
alex_alpha вне форума Ответить с цитированием
Старый 23.06.2010, 20:27   #3
Negent
Студент
Пользователь
 
Аватар для Negent
 
Регистрация: 11.06.2010
Сообщений: 39
По умолчанию

Цитата:
Сообщение от alex_alpha Посмотреть сообщение
Знаете, я тоже только учу С++, так что подсказать Вам не могу. Но, фраза "Что мне, С изучать, что-ли?" показалась смешной, уж извините. Как вообще можно учить С++, не изучив С? Это же основы.
Поправьте меня, если я ошибаюсь.
Хорошо. Я приведу код, который ранее не встречал в С++ в таком виде. Устраивает?
Цитата:
include $(KERNELDIR)/.config

CFLAGS = -D_ _KERNEL_ _ -DMODULE -I$(KERNELDIR)/include -O -Wall

ifdef CONFIG_SMP
CFLAGS += -D_ _SMP_ _ -DSMP
endif

all: skull.o

skull.o: skull_init.o skull_clean.o
$(LD) -r $^ -o $@

clean:
rm -f *.o *~ core
Книга Алессандро Рубини
P. S. С++ - это, по идее, тот же С, только с объектами. Возможно, Вы не поняли вопрос: подойдут ли знания в области С++ для написания программ на С, или они имеют какие-то отличия, которые как раз-таки, и проявляются на уровне написания драйверов для устройств. Так понятно?
"...Попытайся ухватить звёзды с небес, чем переживай, что до них не дотянуться..."

Последний раз редактировалось Negent; 23.06.2010 в 20:30.
Negent вне форума Ответить с цитированием
Старый 23.06.2010, 20:29   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Negent Посмотреть сообщение
Хорошо. Я приведу код, который ранее не встречал в С++ в таком виде. Устраивает?
Код:
include $(KERNELDIR)/.config 

CFLAGS = -D_ _KERNEL_ _ -DMODULE -I$(KERNELDIR)/include -O -Wall 

ifdef CONFIG_SMP 
CFLAGS += -D_ _SMP_ _ -DSMP 
endif 

all: skull.o 

skull.o: skull_init.o skull_clean.o 
$(LD) -r $^ -o $@ 

clean: 
rm -f *.o *~ core
КнигаКнига Алессандро Рубини
Ну так а это и не C...
Цитата:
Сообщение от Negent Посмотреть сообщение
P. S. С++ - это, по идее, тот же С, только с объектами. Возможно, Вы не поняли вопрос: подойдут ли знания в области С++ для написания программ на С, или они имеют какие-то отличия, которые как раз-таки, и проявляются на уровне написания драйверов для устройств. Так понятно?
С++ на самом деле немного дальше ушёл от С на данный момент, особенно ввиду последних стандартов. Но на С++ можно писать драйверы, почему нет?

Последний раз редактировалось netrino; 23.06.2010 в 20:32.
netrino вне форума Ответить с цитированием
Старый 23.06.2010, 20:30   #5
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Цитата:
Код:
include $(KERNELDIR)/.config

CFLAGS = -D_ _KERNEL_ _ -DMODULE -I$(KERNELDIR)/include -O -Wall

ifdef CONFIG_SMP
CFLAGS += -D_ _SMP_ _ -DSMP
endif

all: skull.o

skull.o: skull_init.o skull_clean.o
$(LD) -r $^ -o $@

clean:
rm -f *.o *~ core
Что-то мне кажется, что это shell, а не C.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс

Последний раз редактировалось ROD; 23.06.2010 в 20:33.
ROD вне форума Ответить с цитированием
Старый 23.06.2010, 20:38   #6
Indian
Форумчанин
 
Регистрация: 23.02.2010
Сообщений: 107
По умолчанию

Цитата:
Что-то мне кажется, что это shell, а не C.
Отчасти верно. Похоже на Makefile.

http://ru.wikipedia.org/wiki/Make

Последний раз редактировалось Indian; 23.06.2010 в 20:44.
Indian вне форума Ответить с цитированием
Старый 23.06.2010, 21:22   #7
TGrey[WoLf]
Пользователь
 
Регистрация: 21.06.2010
Сообщений: 27
По умолчанию

Та как бы в любом случае начнете вы учить С++, то открыв книгу, там вы прочтете, почти все то, что нужно знать и для С. Я сам сильно с С не знаком, точнее с его отличиями от С++, но несколько это, что переменные должны быть объявлены в начале программы, по видимому по типу Паскаля, ну и разные способы выделения динамической память, возможно внутри они и сотрудничают, но наверно не зря же добавили новый в С++.

Сам не занимался драйверами, но частенько читал, упоминания про WDK специально созданный для этих целей. А дальше, что-то мне подсказывает(лично мне кажется), что для драйверов есть своя структура программы и свои фичи, язык то остается С\С++, но уклон все равно будет на их функции и структуры. Потому наверно не важно с чего начать, синтаксис то одинаковый.
TGrey[WoLf] вне форума Ответить с цитированием
Старый 23.06.2010, 23:36   #8
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

Реально же, читайте исходники, пишите модуль ядра, удачи. И таки да, если в плюсах можно от многого избавиться и общаться с битиками и байтиками посредством абстракций, то в С у вас такое получится, но с кучей костылей, а таки при написании драйвера без этого никак, и да, кто сказал что его нужно на C писать ?
И да, это Makefile :\
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Старый 25.06.2010, 09:29   #9
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

их можно на любом языке писать) Только надо, чтобы этот язык имел функции для работы с железом). А вообще обычно их пишут на ассемблере и си) Раз можно писать на си, то почему на с++ нет?) Расширение файла поменял с .c на .cpp и готово xD
NiCola999 вне форума Ответить с цитированием
Старый 25.06.2010, 13:40   #10
Negent
Студент
Пользователь
 
Аватар для Negent
 
Регистрация: 11.06.2010
Сообщений: 39
По умолчанию

Спасибо всем за ответы
"...Попытайся ухватить звёзды с небес, чем переживай, что до них не дотянуться..."
Negent вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
БД без драйверов Шульц БД в Delphi 5 20.08.2009 22:31
Программирование драйверов Linux IIePeKoII Qt и кроссплатформенное программирование С/С++ 0 19.02.2009 14:13
порядок установки драйверов photozaz Компьютерное железо 3 21.11.2008 16:46
Установка драйверов AlexandrSid Общие вопросы Delphi 0 14.08.2008 07:43