LINUX.ORG.RU

Драйвера на C

 , , , ,


1

3

Всех приветсвую! Хотел бы узнать с чего стоит начать, чтобы писать дрова для каких нибудь микроконтроллеров или микроплат (возможно даже какие-нибудь модули ядра). Для меня 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 ★★★★★
()
Ответ на: комментарий от MKuznetsov

Ну да, грабаем данные с девайсов, кодируем, шлём в MQ, декодируем, шлем в SCADA/LIMS/ML клиент. То что не клиент - Industrial IoT сейчас.

https://learn.microsoft.com/en-us/azure/iot-edge/about-iot-edge

Вот например (не рекомендую, индусы умудрились написать сегфолтящийся tokio)

Или вот например:

Ignition by Inductive Automation is a powerful, server-based industrial application platform (SCADA, IIoT, MES) that connects devices, processes data, and creates custom applications.

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