The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Linux core driver with ioctl"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (C/C++)
Изначальное сообщение [ Отслеживать ]

"Linux core driver with ioctl"  +/
Сообщение от BatFox email(ok) on 20-Дек-13, 15:52 
Добрый день! Имеется такой пример драйвера http://tldp.org/LDP/lkmpg/2.6/html/x892.html
Задача-реализовать драйвер, поддерживающий функции открытия, закрытия, записи, чтения и имеющий документацию. При записи в драйвер могут передаваться команды. Для этого нужно проводить общий анализ передаваемых в него строк, чтобы определять какие команды передаются. Одна из них direction [forward/back] – направление дальнейшего чтения из драйвера. Например последовательность команд с драйвером
echo “direction back” > /dev/chardev cp /dev/chardev text
приведёт к чтению строки или буфера драйвера в обратном порядке, если драйвер поддерживает работу со строками. То же для файлов.

Драйвер поддерживает чтение и запись файла в него через пользовательский процесс: ioctl_write_file(file_desc, file_write_desc). Поддерживает функцию удаления сообщения: ioctl_file_delete.

Помогите, пожалуйста, всё это проделать. Ваша цена мне в пм

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Linux core driver with ioctl"  +/
Сообщение от pavlinux (ok) on 21-Дек-13, 01:15 
>[оверквотинг удален]

Ваша цена ...

500$

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Linux core driver with ioctl"  +/
Сообщение от BatFox email(ok) on 21-Дек-13, 01:35 
oh come on!(
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Linux core driver with ioctl"  +/
Сообщение от pavlinux (ok) on 21-Дек-13, 04:12 
> oh come on!(

ну тоды ждите skb7 - он расскажет вам теорию. :)

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Linux core driver with ioctl"  +/
Сообщение от skb7 (ok) on 21-Дек-13, 18:27 
>> oh come on!(
> ну тоды ждите skb7 - он расскажет вам теорию. :)

А зачем? Автор не просил "помочь сделать", он просто перепутал opennet с фрилансом.
К тому же, зря вы так насчет теории (я вроде нередко и готовые вещи даю). Просто такие вопросы типа "сделайте за меня всю работу" не особо мотивируют отвечать.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Linux core driver with ioctl"  +/
Сообщение от pavlinux (ok) on 23-Дек-13, 02:22 
>  Автор не просил

Это всё та же Машка Гагарина  http://www.opennet.me/~BatFox

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Linux core driver with ioctl"  +/
Сообщение от BatFox email(ok) on 23-Дек-13, 10:52 
Окей, давайте на чистоту.
Я отличница.
И я, как никто другой, привыкла жопу рвать на ровном месте, чтобы добиться результата.
Но я попала в непростую ситуацию. Мне дали всего НЕДЕЛЮ на это задание, объявив его курсовой работой и выдав его за неделю до НГ и за 2 для до зачетной недели.
Мне, черт подери, нужно сдавать зачеты. И я совершенно не имею понятия о том, КАК это написать.
Будь у меня побольше времени, я писала бы здесь конкретные небольшие вопросики, как тот, с драйвером, который вы зачем-то просто написали за меня (вопрос-то был в том,чтобы просто подтолкнуть к пути решения, а не переписывать его за меня,толку-то ноль в итоге). Но за неимением возможности сидеть и разбираться самой, я решила просто взять готовый. Потому что у меня физически не хватит времени написать это самой, даже с вашей теоретической поддержкой.
Поэтому я и написала, что готова выложить вам немного материальной за готовую прогу.
Извините, если это задевает ваше самолюбие, и подумайте над тем, КАК это задевает самолюбие отличницы, которая узнала, где ее деканат, на третьем курсе и до сих пор не знает, что такое допсессия или четвёрка в зачетке.
Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "Linux core driver with ioctl"  +1 +/
Сообщение от skb7 (ok) on 24-Дек-13, 00:44 
ZOMG TEH DRAMA! :)

> Я отличница.
> Но я попала в непростую ситуацию. Мне дали всего НЕДЕЛЮ на это
> задание, объявив его курсовой работой и выдав его за неделю до
> НГ и за 2 для до зачетной недели.

Без паники :) Тут на 1 вечер работы максимум, вы справитесь. 90% работы делается через "копировать-вставить" из книг/учебных примеров/других драйверов (в первую очередь из кода по той ссылке, что вы вначале приводили).


> Мне, черт подери, нужно сдавать зачеты. И я совершенно не имею понятия
> о том, КАК это написать.

Вам преподаватель дал уже готовый код, вам просто надо его спортировать, это элементарно делается.

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

1. Написать код пустого модуля.
   Проверить, что он нормально собирается, загружается и выгружается.
2. Написать создание и выгрузку драйвера символьного устройства.
   Проверить, что в /proc/devices появляется ваше устройство.
3. Добавить заглушки файловых операций для этого символьного устройства (например, когда пользователь будет писать в файл вашего устройство, оно будет сохранять эти символы в буфер, а при чтении из файла вашего устройства -- пользователь просто получит обратно сохраненные в буфере символы).
   Проверить, что запись и чтение работает (типа echo -n "123 456" > /dev/masha; cat /dev/masha).
4. Реализовать логику работы, т.е. обработку полученных команд.
   - Запись в файл: надо парсить команды, записанные пользователем в файл вашего устройства, и менять какие-то флаги (напр., переменная "направление вывода")
   - Чтение из файла: в зависимости от установленного пользователем направления вывода (коммандой direction), -- выводить буфер вашего драйвера требуемым образом (слева-направо или справа-налево).
   Проверить: в коде драйвера инициализировать ваш буфер какой-то строкой, дальше менять направление вывода командой direction, и выводить буфер (через /dev/masha опять же).
5. Реализовать функционал ioctl. С помощью них пользователь через userspace приложение сможет манипулировать буфером вашего драйвера -- устанавливать в него какие-то символы или очищать буфер.
6. Драйвер готов. Теперь нужно написать userspace приложение, чтобы протестировать работу ioctl. Можно получать параметры командной строки через argc/argv и если пользователь запустил программу с параметром "clear" -- через ioctl очищать буфер драйвера, а если с "write" -- записывать какую-то строку в буфер драйвера через ioctl.
   Проверить: используя совместно вашу userspace программу и запись/чтение в файл вашего символьного устройства (/dev/masha) убедиться, что всё работает как задумано.


Как портировать код под новое ядро? Я дам вам "серебрянную пулю":
- берете старый код
- пытаетесь его собрать под новое ядро
- читаете сообщения об ошибках при сборке
- находите участок кода (напр. функцию или структуру), который к этим ошибкам привел
- ищите, как это делается в новом ядре (напр, как выглядит сигнатура функции)
- сравниваете, как это делалось в старом ядре (какие были параметры функции)
- исправляете соответствующим образом, чтобы всё компилировалось
- если возникают сложности -- гуглить; чаще всего на LWN есть статьи о том, как изменилось какое-то API в новом ядре. Например:
  - измененная операция ioctl: https://lwn.net/Articles/119652/
  - новый механизм threaded irq: https://lwn.net/Articles/302043/


Сопутствующие материалы для вас:

1. По драйверам символьных устройств:

[1] http://lwn.net/images/pdf/LDD3/ch03.pdf
[2] http://www.linuxforu.com/2011/02/linux-character-drivers/
[3] http://www.linuxforu.com/2011/04/character-device-files-crea.../
[4] http://www.linuxforu.com/2011/05/decoding-character-device-f.../


2. По ioctl:

[5] http://lwn.net/images/pdf/LDD3/ch06.pdf
[6] https://lwn.net/Articles/119652/
[7] http://www.linuxforu.com/2011/08/io-control-in-linux/


Если что неясно -- спрашивайте.


> Будь у меня побольше времени, я писала бы здесь конкретные небольшие вопросики,
> как тот, с драйвером, который вы зачем-то просто написали за меня
> (вопрос-то был в том,чтобы просто подтолкнуть к пути решения, а не
> переписывать его за меня,толку-то ноль в итоге).

Если есть интерес -- по готовому коду, что мы прислали, можете попробовать разобраться: что было изменено, как этот код работает. Если возникают вопросы -- не стесняйтесь задавать :) Если есть желание -- можете воспользоваться моим планом, что я приводил в той ветке, и портировать тот драйвер самостоятельно.


> Но за неимением возможности
> сидеть и разбираться самой, я решила просто взять готовый. Потому что
> у меня физически не хватит времени написать это самой, даже с
> вашей теоретической поддержкой.

"Приходит студентка в церковь и, смиренно потупив глаза, обращается к священнику:
- Скажите, пожалуйста, какому святому нужно свечку поставить, чтобы сессию не завалить?
- А ты учить не пробовала, дочь моя?".

Самой разбираться не надо. Всё что неясно -- спрашивайте. Но делать такие вещи нужно самой. Есть же student honor code. Чего будет стоить ваша пятерка, если она не заработана? Точно так же можете заплатить деньги преподавателю за оценку.


> Поэтому я и написала, что готова выложить вам немного материальной за готовую
> прогу.

Если кратко -- это был неудачный ход :) Люди, которые могут сделать такую работу, обычно получают значительно больше $1000, так что подумайте еще раз, достаточно ли у вас денег, чтобы их заинтересовать? (Из этой информации, кстати, можете сделать для себя и другие интересные выводы). К тому же, тут не принято искать фрилансеров.

Возможно вам стоит почитать эту статью: http://www.segfault.kiev.ua/smart-questions-ru.html
особенно этот раздел: http://www.segfault.kiev.ua/smart-questions-ru.html#homework


> Извините, если это задевает ваше самолюбие, и подумайте над тем, КАК это
> задевает самолюбие отличницы, которая узнала, где ее деканат, на третьем курсе
> и до сих пор не знает, что такое допсессия или четвёрка
> в зачетке.

Я вам одну умную вещь скажу, только вы не обижайтесь :) Пятерки -- не главное.
Пробуйте делать

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "Linux core driver with ioctl"  +/
Сообщение от skb7 (ok) on 24-Дек-13, 01:35 
>[оверквотинг удален]
> 5. Реализовать функционал ioctl. С помощью них пользователь через userspace приложение
> сможет манипулировать буфером вашего драйвера -- устанавливать в него какие-то символы
> или очищать буфер.
> 6. Драйвер готов. Теперь нужно написать userspace приложение, чтобы протестировать работу
> ioctl. Можно получать параметры командной строки через argc/argv и если пользователь
> запустил программу с параметром "clear" -- через ioctl очищать буфер драйвера,
> а если с "write" -- записывать какую-то строку в буфер драйвера
> через ioctl.
>    Проверить: используя совместно вашу userspace программу и запись/чтение в
> файл вашего символьного устройства (/dev/masha) убедиться, что всё работает как задумано.

Единственное, что я забыл, -- нужно еще добавить добавить блокировки, чтобы не было race conditions при многопоточной работе с файлом устройства, т.е. мьютексы добавить. Но это можно сделать в конце, когда всё уже заработает.

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

9. "Linux core driver with ioctl"  +/
Сообщение от pavlinux (ok) on 24-Дек-13, 13:52 
> Без паники :) Тут на 1 вечер работы максимум, вы справитесь.

:popcorn:

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

10. "Linux core driver with ioctl"  +/
Сообщение от skb7 (ok) on 26-Дек-13, 06:27 
>> Без паники :) Тут на 1 вечер работы максимум, вы справитесь.
> :popcorn:

Поскольку никогда раньше с ioctl не работал, стало интересно самому разобраться. Сделал набегами по 5 минут за 3 вечера, в сумме за вечер, при чем весь код писал с нуля. Если копипастить готовые куски -- сделал бы примерно за час. Осталось только мьютексы прикрутить и потестить многопоточность. Ничего сложного не обнаружил, на курсач явно не тянет. Если интересно -- могу продемонстрировать код, как допилю мьютексы.

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

11. "Linux core driver with ioctl"  +/
Сообщение от skb7 (ok) on 26-Дек-13, 06:36 
Правда, парсинг команд я уже писал когда-то: http://review.omapzoom.org/#/c/32958/
(и там же использование мьютексов можно глянуть).

Код символьного устройства переписал отсюда по сути: http://www.linuxforu.com/2011/04/character-device-files-crea...

Код ioctl с userspace тулзовиной подсмотрел тут: http://www.linuxforu.com/2011/08/io-control-in-linux

Так что да, если никогда такого не делал, то выходит работы вечера на 3.

Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

13. "Linux core driver with ioctl"  +/
Сообщение от skb7 (ok) on 28-Дек-13, 03:48 
>> Без паники :) Тут на 1 вечер работы максимум, вы справитесь.
> :popcorn:

Можете выкидывать попкорн, никогда не узнаем. Я сделал: http://www.opennet.me/openforum/vsluhforumID9/9800.html#12

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

14. "Linux core driver with ioctl"  +/
Сообщение от pavlinux (ok) on 28-Дек-13, 07:14 
> Я сделал

Угу, зоопарк из kmalloc_оф и блокировок.


Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

15. "Linux core driver with ioctl"  +/
Сообщение от skb7 (ok) on 28-Дек-13, 16:02 
>> Я сделал
> Угу, зоопарк из kmalloc_оф

Т.е. лучше на стеке всё хранить? Но ведь стек в ядре 4KB. Или вы про devm_*() функции?


> и блокировок.

Т.е. лучше чтобы были race conditions при работе с драйвером из разных потоков? Или городить свой велосипед со счетчиком ссылок, как в примере, который приводился в самом начале? К тому же, если не нравятся блокировки, -- они сделаны отдельным коммитом и никто не мешает его заревертить.

И вообще, как говорит Торвальдс: болтовня ничего не стоит, покажите мне код.

Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

16. "Linux core driver with ioctl"  +/
Сообщение от pavlinux (ok) on 28-Дек-13, 16:16 
> И вообще, как говорит Торвальдс: болтовня ничего не стоит, покажите мне код.

Делать мне больше нефиг.


Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

17. "Linux core driver with ioctl"  +/
Сообщение от pavlinux (ok) on 29-Дек-13, 21:53 
Где же Машка Гагарина?! :)
Ответить | Правка | ^ к родителю #16 | Наверх | Cообщить модератору

12. "Linux core driver with ioctl"  +/
Сообщение от skb7 (ok) on 27-Дек-13, 05:38 
Раз уж я сделал, выложу тут, может кому пригодится в плане обучения:
https://gitorious.org/kernel-study/ioctl

Считайте, что это подарок на НГ :) Хотя вам оно наверное не поможет: с одной стороны, препод не поверит, что это вы написали и завалит вопросами по коду. С другой стороны он легко нагуглит по коду, и увидит, что это не вы сделали. Оба варианта -- это "двойка". Так что максимум чем оно вам поможет -- это разобраться как оно работает и написать с нуля своё.

Ну и стоит заметить, что весь код, кроме парсинга команды, можно скопипастить из тех источников что я приводил или из любого готового char драйвера, который использует ioctl. Так что на курсач никак не тянет, парсинг одной команды -- это максимум лаба.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру