LINUX.ORG.RU

Драйвера на C

 , , , ,


1

4

Всех приветсвую! Хотел бы узнать с чего стоит начать, чтобы писать дрова для каких нибудь микроконтроллеров или микроплат (возможно даже какие-нибудь модули ядра). Для меня asm это уж слишком. Можно ли использовать только C? или asm это обязательное требование? Буду рад если вы мне дадите советов или каких нибудь источников для изучения.

Привет! Драйвера для микроконтроллеров начинают писать с мигания светодиодом - читаешь мануал к плате, устанавливаешь нужный бит и вуаля - он горит. Далее нужно какой-нибудь видимый обвес платы делать - либо UART/I2C и пр. Главное в этом деле - придумать как увидеть результат. Далее маленькое подмножество USB и т.д.

Вообще, для большинства стандартных плат все есть в виде библиотек. Можно с ними покопаться и повторять.

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

dmaj
()
Последнее исправление: dmaj (всего исправлений: 1)
Ответ на: комментарий от dmaj

Хотелось бы просто еще пробовать писать драйвера под какие-нибудь rpi или opi. А про микроконтроллеры, я собираюсь делать HID устройство, имитирующее клавиатуру. Спасибо за совет!

qoil_ghost
() автор топика

К asm скатываются, когда становятся важны такты. И от Си особо легче не становится, главное понять, как с железякой правильно работать, с этими битками/байтиками. С теми же МК всё просто, пока подёргать ногой, поморгать светодиодом. А как только что-то сложнее, нужно весь даташит по кругу перечитывать, чтобы понять, какие биты где установить, чтобы этот узел в МК был включен. Так как они внутри сложные и для экономии энергии умеют какие-то части отключать. В инете куча кривых примеров, где не выполняют всё, что предписано в даташите перед началом работы. Такой код как-то работает, но не гарантировано.

Непонятно какие дрова вы хотите писать, если к чему-нибудь есть дока/описание, то, обычно, драйвер уже написан, хотя, может и кривой :) А дампить и расковыривать протокол, блоб — уже другой уровень.

я собираюсь делать HID устройство, имитирующее клавиатуру.

ЕМНИП, полно примеров, на Arduino Leonardo / Arduino Pro Micro, на ATmega32u4, можете просто скачать примеры и посмотреть, есть ли там asm. А если вы захотите подешевле, на VUSB, то лучше туда не лезть.

mky ★★★★★
()

тогда лучше сразу пром-автоматику и научиться в низкий уровень SCADA. Взять CodeSys, китайский ПЛК и тренироваться.

Такое же «моргание лампочками», измерение и управление всяким, как с STM и программированием драйверов. Зато это стандарты и индустрия и через погода-год можно найти хлебное место.

MKuznetsov ★★★★★
()

с приобретения чего-то для чего нужно написать драйвер ядра, очевидно, писать можно на си, существуют ассемблерные вставки в код на си. Книга Advanced Linux Programming, глава 9, вряд ли они вам понадобятся

IvanRia
()

Хотел бы узнать с чего стоит начать … микроконтроллеров

STM32 + FreeRTOS

По обоим есть куча литературы.

микроплат (возможно даже какие-нибудь модули ядра).

Это немного другое. И намного большие абстракции.

AlexVR ★★★★★
()
Ответ на: комментарий от qoil_ghost

делать HID устройство, имитирующее клавиатуру.

там будет usb-контроллер и какой-нибудь простейший микроконтроллер, конечно же на языке ассемблера надо писать, туда Linux или другая операционная система не залезет.

писать драйвера под какие-нибудь rpi или opi.

Для Raspberry/Orange есть готовые дистрибутивы со всеми нужными драйверами и готовые SDK, писать свои драйверы для них не нужно, просто пользуйтесь SDK.

anonymous
()

с чего стоит начать, чтобы писать дрова для каких нибудь микроконтроллеров или микроплат

А цель-то какая? Спаять устройство и общаться с ним с компа? Тут проще прикинуться стандартным устройством. Лично у меня это обычно COM-порт и флешка. Преимущество в том, что не надо лезть в недра системы и давать сомнительному коду (пусть даже своему) ядерные привилегии. И если захотите похвастаться, не возникнет проблем, если у «жертвы» будет какая-нибудь винда или что пострашнее.

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

Кстати. Это я по умолчанию предполагаю, что устройство подключается по USB. А у вас-то как?

я собираюсь делать HID устройство, имитирующее клавиатуру.

Зачем для HID-клавиатуры писать драйвер?

COKPOWEHEU
()
Ответ на: комментарий от MKuznetsov

тогда лучше сразу пром-автоматику и научиться в низкий уровень SCADA

Это сейчас Industrial IoT называется. SCADA теперь называют только клиенты.

steemandlinux ★★★★★
()
Последнее исправление: steemandlinux (всего исправлений: 1)
Ответ на: комментарий от steemandlinux

Это сейчас Industrial IoT называется

IoT в массе называют сервисы сообщений, агрегаторы и подобное, всё что пробивается до уровня tcp и web ;-)

У ТС на уровне идей «а не сделать ли мне», наверное нужен самый низ - modbus/can, как работает контроллер и что с ним можно делать. Я так считаю что это перспективнее чем упороться в STM, которого через 3-4 года может и не будет. А промка останется.

На уровне личных вложений, примерно такое-же - нужен ПЛК, блок питания и чем управлять. Вместо горсти STM`ок, обвеса и паяльника

MKuznetsov ★★★★★
()
Ответ на: комментарий от dmaj

Драйвера для микроконтроллеров начинают писать с мигания светодиодом

Как правило на этом программирование микроконтроллеров и заканчивается.

Byers
()
Ответ на: комментарий от cdtemp

Что почитать по теме?

интернет :-) Любой доступный «курс программирования ПЛК» + желательно контроллер, лампочки, кнопочки..эмулятор это неспортивно

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

MKuznetsov ★★★★★
()
Ответ на: комментарий от qoil_ghost

я собираюсь делать HID устройство, имитирующее клавиатуру.

По поводу клавиатур и микроконтроллеров - сходите по ссылке из вот этого моего поста: https://radiokot.ru/forum/viewtopic.php?p=1915646&sid=ed8ffa823ea9a078048a50a9caeca7df#p1915646

По выбору контроллера - на Atmega проще делать, stm32 считают быстрее. Выбор зависит от задачи. Для имитации клавиатуры скорость особо не нужна.

watchcat382
()
Ответ на: комментарий от AlexVR

STM32 + FreeRTOS

Тяжко будет для начинающего. Я хотя и пописываю периодически для STM32F103CBT6 (точнее его китайского клона на вот таких платах https://www.ozon.ru/product/stm32f103c8t6-stm32-bluepill-plus-sinyaya-tabletka-stm32-originalnaya-1583836856/ но вот на FreeRTOS посмотрел и отложил в сторону - слишком навороченно и избыточно для домашне-любительских поделок.

А еще начинающему чтобы понять как работает контроллер - будет очень полезен визуальный программный симулятор. И тут вне конкуренции VMLAB, но для для AVR. Жаль нет такого же для STM32. За одно и сами AVR существенно попроще чем STM32. Там где задача не упирается в вычислительную производительность (а в домашних поделках это обычно так) - вполне неплохо их можно использовать. Тем более что там же на Озоне есть внешне очень похожие платы как вышеупомянутые на STM32 но только на Atmega328p, и программатор к ним: https://www.ozon.ru/product/programmator-usb-isp-usbasp-usbisp-dlya-51-avr-1290379709/ Такую плату можно впаять в основную плату своей самоделки как эдакую «микросборку».

watchcat382
()
Ответ на: комментарий от COKPOWEHEU

Лично у меня это обычно COM-порт

У меня тоже.

Это я по умолчанию предполагаю, что устройство подключается по USB

Проще всего через преобразователь интерфейса usb-com. Можно добыть из дата-кабеля от старого телефона или купить. У любого контроллера есть uart, так что средство общения получается очень универсальное. Кстати, для общения в режиме терминала со своим устройством есть очень удобная библиотека microrl https://habr.com/ru/articles/127890/ Давно и успешно ее использую.

watchcat382
()
Ответ на: комментарий от MKuznetsov

На уровне личных вложений, примерно такое-же - нужен ПЛК, блок питания и чем управлять.

Промышленные ПЛК - штука весьма не дешевая. И программируются они на экзотических глубоко проприетарных языках, а не на общеизвестном Си.

watchcat382
()
Ответ на: комментарий от watchcat382

Промышленные ПЛК - штука весьма не дешевая. И программируются они на экзотических глубоко проприетарных языках, а не на общеизвестном Си.

Если речь про ПЛК-реле, то да, там обычно проприетарные средства от производителя. Но сам по себе ПЛК это просто логический узел. Часто туда могут подсунуть что угодно, пока оно может в RT работать - хоть ПК.

Bfgeshka ★★★★★
()
Ответ на: комментарий от watchcat382

Промышленные ПЛК - штука весьма не дешевая. И программируются они на экзотических глубоко проприетарных языках, а не на общеизвестном Си.

вот именно что без хлеба не останешься.

и программируются они на известных,открытых,стандартизованных языках. У которых кстати не выходят новые версии каждые полгода.

Конечно немного взрывает мозг что объём памяти измеряется в словах, а программы это линии со стрелками :-)

MKuznetsov ★★★★★
()
Ответ на: комментарий от watchcat382

Лично у меня это обычно COM-порт

У меня тоже.

Я говорил про виртуальный COM-порт, CDC-ACM. В отличие от переходников, это позволяет реализовать несколько одновременно, да еще и имена осмысленные им назначить. Насколько я помню, теоретический предел это 5 портов в одном устройстве. Или 7 нестандартных.

С другой стороны, это надо USB осваивать, а он в разных МК организован очень по-разному. Что удивительно, наименее корявой мне показалась реализация USB-HS из ch32v307 - там взяли и тупо реализовали стандарт, без всяких извращений.

Кстати, для общения в режиме терминала со своим устройством есть очень удобная библиотека microrl https://habr.com/ru/articles/127890/

Это для интерактивного обмена? Не самая частая задача. С устройством обычно взаимодействует программа или скрипт, а не человек напрямую. А в таком случае логично организовать что-то вроде SCPI.

COKPOWEHEU
()
Ответ на: комментарий от Bfgeshka

сам по себе ПЛК это просто логический узел. Часто туда могут подсунуть что угодно, пока оно может в RT работать - хоть ПК.

периодически вспоминается icp das ipac-8000..они до сих пор где-то установлены на объектах и лежат на складах, возможно даже и выпускается. Так вот внутри у него i186 и DOS :-) Подозреваю что инженер владеющий Turbo-C (оф.средство разработки) в тех областях на вес золота.

Кстати это причина почему «автоматизаторы» не любят Linux/Windows/Other контроллеры с языками отличными от стандартных МЭК.

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

И опять же

The XP-9000-IoT Series are Windows-based Programmable Automation Controllers (PAC) designed for the Industrial Internet of Things (IIoT) and advanced automation control. This series perfectly integrates computing, I/O expansion, and Human-Machine Interface (HMI) into a single unit, providing the most stable core platform for factory automation, data acquisition, and remote monitoring.

A built-in VGA and HDMI port can be directly connected to a regular display. Users can operate the HMI or SCADA software (running on the XP-9000-IoT) with display, keyboard and mouse just as howthey usually did on regular PCs.

Вроде на бумаге SCADA это RT обвязка для железа, имеющая endpoints для клиента. А по факту всю эту конструкцию начали IIoT называть. Хотя на их более старых устройствах фразы IIoT не было.

steemandlinux ★★★★★
()
Последнее исправление: steemandlinux (всего исправлений: 1)
Ответ на: комментарий от watchcat382

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

И что там сложного? Минимальный набор интерфейсов и подходов к построению ОС.

А вот эти «домашне-любительских поделок» приводят к попытке сделать велосипед, без знаний что существует не то что рама, но и колесо.

FreeRTOS - это простейшая ОС. На базе которой можно посмотреть как реализовать и использовать основные элементы. Спокойно можно найти книгу по STM32 + FreeRTOS и это будет намного более полезней, чем Arduino или «голый бареметал».

З.Ы.: Я же не предлагаю Zephyr к которому только после опыта с FreeRTOS, Yocto, Buildroot и прочего, можно хоть как-то прикоснуться.

AlexVR ★★★★★
()
Ответ на: комментарий от AlexVR

И что там сложного?

Для вас, как специалиста, ничего естественно. А начинать лучше всего с «бареметалл» как раз. Чтобы вообще понять как микроконтроллер работает.

«домашне-любительских поделок» приводят к попытке сделать велосипед

Да. Именно для этого ими и занимаются - чтобы основы понять. Тогда уже проще будет разобраться куда дальше двигаться.

Кстати, вопрос к вам как специалисту с явно большим чем у меня-радиолюбителя кругозором: существует ли визуальный симулятор-отладчик для STM32, типа такого как VMLAB для AVR? Очень удобен для отладки правильности обращения с периферийными устройствами - многие ошибки прямо сразу показывает, а что не покажет - позволяет обнаружить.

Уточню что интересуют STM32F103C8T6, вот такие китайские платы: https://www.ozon.ru/product/stm32f103c8t6-stm32-bluepill-plus-sinyaya-tabletka-stm32-originalnaya-1583836856/

watchcat382
()
Последнее исправление: watchcat382 (всего исправлений: 1)
Ответ на: комментарий от watchcat382

Да. Именно для этого ими и занимаются - чтобы основы понять

Это популярное заблуждение. Основы изучают на нормальных учебных курсах и/или по хорошим книгам.

Уточню что интересуют STM32F103C8T6

Посмотри к примеру: Гей У. Основы STM32

AlexVR ★★★★★
()