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
> Извините, если это задевает ваше самолюбие, и подумайте над тем, КАК это
> задевает самолюбие отличницы, которая узнала, где ее деканат, на третьем курсе
> и до сих пор не знает, что такое допсессия или четвёрка
> в зачетке.
Я вам одну умную вещь скажу, только вы не обижайтесь :) Пятерки -- не главное.
Пробуйте делать