|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Zahar Kiselev 2:5030/382.1 20 Dec 2004 22:07:18 To : Victor Wagner Subject : Re: драйвер -------------------------------------------------------------------------------- Dec 20 19:02 04, Victor Wagner wrote to Zahar Kiselev: ZK>>входных каналов там может быть от задействовано от 1 до 32, ZK>>это можно выбирать и выбор я "повесил" на отдельный ioctl. VW> Hу и сделай 32 символьных устройства. С общим major и разными minor. VW> И на каждое из них выдавай данные только из одного канала. Все равно VW> больше восьми таких карт одновременно у тебя вряд ли будет. Технически не вижу проблемы. Однако как такое монстрообразие соотносится с идеологией и стилем? Представь сначала драйвер с 32 устройствами, а потом еще и userlevel программу, которая открывает всю эту кучу устройств и их читает? Работать наверно будет, но что после этого про меня в этой эхе скажут? :-) VW> то ли вообще автоматически включать канал при VW> открытии соответствующего ему файла устройства. А вот эта идея мне понравилась в любом случае. Как-то я не подумал, что так можно сделать VW> Можно еще наряду с файлами в /dev завести вход в /proc и управлять VW> устройством посредством echo команда >/proc/моя-плата Учебный пример кода на этот случай я тоже написал, но решил что в моем случае это лишнее. Это если бы платой из скриптов на bash управлять - тогда да, а если из программы - то ioctl на файл устройства проще. ZK>>работает, а как собрать это в единую конструкцию - я пока ZK>>не решил. Hе потому что не умею собрать, а потому что не ZK>>знаю как это наиболее правильно сделать. VW> Архитектура - это вообще проблема. Это самое сложное, что бывает в VW> программировании. Вот тут-то я и сел в лужу - сказывается то, что программирование у нас в институте было не основным предметом, да и обучали нас максимум - алгоритмизации и кодировнию, а не архитектуре. Также у меня есть технический вопрос по написанию драйверов. В общем виде он звучит так "что я имею право делать из исполняемого в ядре кода, а что нет"? Более конкретно - могу ли я из кода драйвера открыть файл на диске и его прочитать(конфиг например)? Могу ли я запустить какую-нибудь программу на выполнение? Получить адрес точки входа любого системного вызова ядра, находясь в нем самом - не так уж и сложно, а вот можно ли его "дергать"? И когда можно, а когда нельзя? Если помнишь дос и его резидентные программы - то например чтение файла было вполне возможно - при условии соблюдения определенных соглашений о том, когда это можно делать. И писать в файл на диск тоже получалось. И на эту тему была довольно толковая документация. А вот в имеющейся у меня линуксовой документации я не нашел освещения вопросов "повторной входимости" кода ядра. Вообще если посмотреть в System.map - то там довольно много "интересных" для драйверописателя имен функций - вот только нигде не сказано чем из этого можно пользоваться и как. Hу кроме очевидностей типа pintk() и тех функций, которые предназначены для регистрации драйвера в системе. А так - там и sys_execve например есть, и sys_write и много чего другого. P.S. Можно послать в RTFM, только с точным указанием куда именно:) А то в книжке про написание драйверов просто сказано "эти функции доступны", без указания "правил пользования". Ту фразу можно понять и просто как указание на доступность адресов этих функций в коде ядра - что и так очевидно, потому что из кода драйвера куда угодно залезть можно. Zahar(@spbdept.rbc.ru) Остров Большой Березовый: http://birch-island.spb.ru --- Msged/LNX 6.1.1 * Origin: N:60.17'54" E:28.39'40" (2:5030/382.1) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/328841c73624.html, оценка из 5, голосов 10
|