реклама на сайте
подробности

 
 
> Вопросы по написанию драйвера под Linux
shtunder
сообщение Aug 8 2018, 20:24
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 14-07-14
Пользователь №: 82 243



Добрый день.

Начал переходить с Bare metal на Linux.
Пытаюсь разобраться как написать простенький драйвер для моей ip core. Пока это просто 8 лампочек.
Борда: zedboard.

Сейчас читаю литературу, т.к. до этого не было опыта написания драйверов.

1) Не рекомендуется писать драйвер под файловую систему /dev. Раньше конечно так делали. Сейчас, якобы актуально писать под файловую систему /proc или /sys.
Верно ли это? Хочется сразу научиться праивльным вещам. maniac.gif Т.е. может при написании драйвера под какую-нибудь фс скрываются ккаие-то подводные камни. И есть резон писать под другую фс.

2) Почитал https://linuxseekernel.blogspot.com/2014/05...-practical.html и, честно говоря, так и не понял какое различие между:
Platform Driver
Platform Device

Т.е. это два независимых варианта? Или есть определенные случаи когда стоит что-то конкретное из этого использовать?

3) Как я понял. Написание дравера состоит из двух больших шагов.
а) Создать виртуальный файл в файловой системе. Чтобы в него можно было писать/читать и т.д.
б) Связать этот виртуальный файл с физическим устройством.

Верно?


4) Пока нашел такой код. Все нормально работает. Прикрепленный файл  myled.txt ( 6.88 килобайт ) Кол-во скачиваний: 19

Как можно реализовать чтение и запись в регистры с определенным сдвигом? Действовать через base_addr (он определен в коде)?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Tarbal
сообщение Aug 17 2018, 01:26
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Случайно увидел ваш вопрос. Пишите про Линукс в теме Линукс.

1) Не рекомендуется писать драйвер под файловую систему /dev. Раньше конечно так делали. Сейчас, якобы актуально писать под файловую систему /proc или /sys.
Верно ли это? Хочется сразу научиться праивльным вещам. maniac.gif Т.е. может при написании драйвера под какую-нибудь фс скрываются ккаие-то подводные камни. И есть резон писать под другую фс.

В этом вопросе каша.
На самом деле все происходит таким образом:
Вы регистрируете драйвер, ядро записывает информацию о нем в соответствующие структуры и драйвер появляется в /sys/.
В дереве устройств вы описываете устройство для этого драйвера (в /sys появятся записи об устройстве) и если они (драйвер и устройство) соответствуют друг другу, то вызовется функция драйвера probe. Если probe не вернет ошибку, то устройство встало и подключилось к драйверу. Если у вас написано правило для этого устройства в правилах udev, то в /dev появится псевдофайл для доступа к вашему устройству. Если нет, то его можно создать при помощи команды mknod.

platform device:
Вы наверняка за обилием информации не заметили важнейшего момента, что драйвер и устройство должны СООТВЕТСТВОВАТЬ друг другу. На самом деле драйверы (о блоковых драйверах мы вообще не говорим) подразделяются на несколько групп. Список этих групп вы найдете в разделе шин: /sys/bus/ Оказалось, что есть такая группа, которую ни к одной шине отнести нельзя. Ее назвали platform.

Внутри каждой группы свои правила по которым проверяется соответствие драйвера и устройства. Для PCI и USB это Vendor ID и Product ID, для platform это просто текстовое имя. Это должно совпасть в драйвере и устройстве.

На самом деле есть еще нюансы, но в целом картина выглядит таким образом.

Цитата(shtunder @ Aug 15 2018, 17:49) *
Спасибо!

От себя только добавлю, что тема про Platform device и Platform driver хорошо раскрыта здесь.


В этом тексте все описано для ядер до 2.6.Х включительно. С 3.Х.Х вместо структуры устройства в тексте программы начали описывать устройства в дереве устройств.


Можно на все положить и сделать нестандартно, но так профессионалы не будут делать. Сделать доступ к программе (не могу назвать это драйвером) через интерфейс /proc. Но так сделать легко. Как это делать подробно изложено здесь:
https://www.iitg.ac.in/asahu/cs421/books/LKM2.6.pdf

Это навскидку нашел. есть и более свежие версии этого документа.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 19:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01367 секунд с 7
ELECTRONIX ©2004-2016