Верно ли что python идеально подходит для написания драйверов устройств
Хорошо известно, что Python это модульный язык, в котором импортируется множество полезных операций из его стандартной библиотеки. Очевидно, что без этого программировать на Python совершенно невозможно. Во многом популярность этого языка основана на открытом коде и том, что вся разработка ведется под лицензией OSI (Open Software License). Вы можете совершенно бесплатно скачать и установить на любом компьютере все инструменты Python. Это все доступно в различных сборках, при этом поддерживается 21 операционная система, что делает язык Python поистине универсальным.
Пакеты драйверов для баз данных на языке Python
Ниже приведен список Python-библиотек драйверов для различных баз данных, полезный любому программисту, который интересуется этим языком.
redis-py — клиент базы данных Redis на Python
redis-py 3.5.x — это последняя версия, которая поддерживала Python 2. Обновления безопасности, совместимые с Python 2, выходили вплоть до 20 августа 2020 года. Для redis-py 4.0, следующей основной версии, уже требуется Python не ниже версии 3.5.
PyMySQL — драйвер Pure Python MySQL, совместимый с mysql-python
Этот пакет содержит клиентскую библиотеку Python MySQL, основанную на стандарте PEP 249.
Большинство открытых API-интерфейсов совместимы с mysqlclient и MySQLdb.
ЗАМЕЧАНИЕ: PyMySQL не поддерживает низкоуровневые API-запросы, которые есть в _mysql, а именно data_seek, store_result и use_result . Вы должны использовать высокоуровневые API-запросы, определенные в стандарте PEP 249. Но некоторые API-запросы, такие как autocommit и ping , все же поддерживаются, поскольку PEP 249 никак не регламентирует их применение.
asyncpg — быстрая клиентская библиотека Python / asyncio для базы данных PostgreSQL
Это библиотека интерфейса базы данных, разработанная специально для PostgreSQL и Python / asyncio.
asyncpg — это эффективная и чистая реализация бинарного протокола сервера баз данных PostgreSQL для использования с асинхронным фреймворком Python asyncio. Вы можете узнать больше об asyncpg вот здесь.
asyncpg требует Python версии 3.5 или новее и поддерживается для PostgreSQL начиная с версии 9.2 и заканчивая версией 12.
psycopg2 — самый популярный адаптер PostgreSQL для Python
Psycopg — самый популярный адаптер базы данных PostgreSQL для языка программирования Python. Его основными особенностями являются полная реализация спецификации Python DB API 2.0 и безопасность потоков (несколько потоков могут использовать одно и то же соединение). Он был разработан для многопоточных приложений, которые создают и уничтожают множество связей и выполняют большое количество одновременных операций INSERT или UPDATE.
mysqlclient — поддерживающий Python 3 форк библиотеки mysql-python
В этом проекте добавлена поддержка Python 3 и исправлен ряд ошибок. Мы надеемся, что этот форк будет снова объединен со своей родительской библиотекой. Это было бы так же логично, как объединение дистрибутива и программы для его установки.
cassandra-python-driver — драйвер Python для Cassandra
Современная, многофункциональная и гибконастраиваемая клиентская библиотека Python для Apache Cassandra (1.2+) и DataStax Enterprise (3.1+). Она использует исключительно бинарный протокол Cassandra и язык запросов Cassandra Query Language v3.
motor — аснхронный драйвер Python для MongoDB
Motor — это полнофункциональный драйвер MongoDB для Python Tornado и других асинхронных приложений.
pymssql — простой интерфейс для Microsoft SQL Server
Простой интерфейс баз данных на языке Python, который строится поверх FreeTDS и предоставляет интерфейс Python DB-API (PEP-249) для Microsoft SQL Server.
HappyBase — удобная библиотека для Apache HBase
PyMongo — официальный клиент Python для MongoDB
SuperSQLite — улучшенная библиотека SQLite
Это многофункциональная библиотека Python, предназначенная для использования SQLite в Python компанией Plasticity. Построена она на основе apsw.
SuperSQLite также содержит предварительно скомпилированные собственные бинарные файлы для SQLite и всех его расширений (практически для любой платформы). Это сделано чтобы избежать возможных ошибок компилятора C / C ++ во время установки.
Английский для программистов
Наш телеграм канал с тестами по английскому языку для программистов. Английский это часть карьеры программиста. Поэтому полезно заняться им уже сейчас
Да. Вы не можете создавать «классические» драйверы режима ядра. Однако, начиная с XP, Windows предлагает платформу драйверов пользовательского режима. Очевидно, что они не могут делать все - любой драйвер, используемый при загрузке ОС, должен быть в режиме ядра. Но с UMDF вам нужно только реализовать компоненты COM.
Помимо драйверов при загрузке, вы также не можете писать драйверы UMDF, которые:
- Обрабатывать прерывания
- Прямой доступ к оборудованию, например, прямой доступ к памяти (DMA)
- имеют строгие временные петли
- Используйте невыгружаемый пул или другие ресурсы, которые зарезервированы для режима ядра
Я не знаю ограничений на драйверы для окон (схемы выделения памяти, динамическая загрузка библиотек и все такое), но вы можете встроить интерпретатор python в ваш драйвер, после чего вы сможете делать все, что захотите. Не то чтобы я думаю, что это хорошая идея :)
Окончательный ответ не без встраивания интерпретатора в ваш драйвер C / Assembly. Если у кого-то нет доступной платформы, то ответ - нет. Если у вас есть интерпретатор и привязки, то остальная логика может быть реализована на Python.
Тем не менее, написание драйверов - это то, для чего C лучше всего подходит. Я полагаю, что полученный Python-код будет во многом похож на C-код и не будет использовать цель интерпретатора.
Никогда не говори никогда, но . нет
Возможно, вы сможете что-то взломать, чтобы запускать части драйверов в пользовательском режиме в python. Но вещи в режиме ядра могут быть сделаны только в C или сборке.
Хороший способ понять, почему это практически невозможно, - прочитать совет Microsoft об использовании C ++ в драйверах. Как производная от C, использование C ++ кажется простым. На практике это не так.
Например, вы должны решить для каждой функции (и в действительности для каждой инструкции по сборке), находится ли она в страничной или нестраничной памяти. Это требует расширения C, тщательного использования новых функций C ++ или, в этом случае, специального расширения языка Python и VM. Кроме того, вашей совместимой с драйвером виртуальной машине также придется иметь дело с различными IRQL - существует иерархия «уровней», которые ограничивают то, что вы можете и не можете делать.
Нет, они не могут. Драйверы Windows должны быть написаны на языке, который может
- Интерфейс с C API
- Компилировать до машинного кода
Опять же, ничто не мешает вам написать компилятор, который переводит python в машинный код;)
Python работает на виртуальной машине, поэтому нет.
Вы можете написать компилятор, который переводит код Python на машинный язык. Как только вы это сделали, вы можете сделать это.
могут ли драйверы Windows быть написаны на Python?
да. Вы не можете создать "классические" драйверы режима ядра. Однако, начиная с XP, Windows предлагает Пользовательский Режим Driver Framework. Очевидно, они не могут делать все - любой драйвер, используемый при загрузке ОС, очевидно, должен быть в режиме ядра. Но с UMDF вам нужно только реализовать com-компоненты.
помимо драйверов времени загрузки, вы также не можете писать драйверы UMDF, которые:
- обрабатывать прерывания
- сразу оборудование доступа, как прямой доступ к памяти (DMA)
- имеют строгие временные циклы
- используйте невыгружаемый пул или другие ресурсы, зарезервированные для режима ядра
окончательный ответ не без встраивания интерпретатора в ваш в противном случае драйвер c/assembly. Если у кого-то есть рамки, то ответ нет. Как только у вас есть интерпретатор и привязки на месте, остальная часть логики может быть выполнена в Python.
однако написание драйверов является одной из вещей, для которых C лучше всего подходит. Я предполагаю, что полученный код Python будет выглядеть очень похоже на код C и победит цель интерпретатора накладные расходы.
хороший способ получить представление о том, почему это практически невозможно, - это прочитать совет Microsoft об использовании C++ в драйверах. Как производная от C, использование C++ кажется простым. На практике это не так.
например, вы должны решить для каждой функции (и действительно для каждой инструкции по сборке), находится ли она в подкачиваемой или не подкачиваемой памяти. Это требует расширения до C, тщательного использования новых функций C++ или в этом случае специального расширения для язык Python и виртуальная машина. Кроме того, ваша совместимая с драйверами виртуальная машина также должна иметь дело с различными IRQLs-существует иерархия "уровней", которые ограничивают то, что вы можете и не можете сделать.
Python работает на виртуальной машине, поэтому нет.
вы можете написать компилятор, который переводит код Python на машинный язык. Как только вы это сделаете, вы сможете это сделать.
Я не знаю ограничений на драйверы в windows (схемы выделения памяти, динамическая загрузка библиотек и все), но вы можете встроить интерпретатор python в свой драйвер, и в этот момент Вы можете делать все, что захотите. Не думаю, что это хорошая идея :)
никогда не говори никогда, Но да.. нет!--1-->
вы можете взломать что-то вместе, чтобы запустить пользовательские части драйверов в python. Но материал в режиме ядра может быть выполнен только в C или сборке.
нет они не могут. Драйверы Windows должны быть написаны на языке, который может
- интерфейс с API на основе C
- компиляции в машинный код
опять же, ничто не мешает вам написать компилятор, который переводит python в машинный код;)
Да. Вы не можете создавать "классические" драйверы режима ядра. Однако, начиная с XP, Windows предлагает "Рамка драйверов пользовательского режима" . Они не могут делать все, очевидно - любой драйвер, используемый при загрузке ОС, должен быть в ядре. Но с UMDF вам нужно только реализовать COM-компоненты.
Помимо драйверов загрузки, вы также не можете записывать драйверы UMDF, которые:
- Обработка прерываний
- Непосредственный доступ к оборудованию, например, прямой доступ к памяти (DMA)
- имеют строгие циклы синхронизации.
- Использовать невыгружаемый пул или другие ресурсы, зарезервированные для режима ядра.
Я собирался написать стандартный ответ «Writing driver in Python = Crazy» на этот вопрос, но я действительно думаю, что драйвер UMDF будет работать. Интересно!
Я разработчик драйверов для Linux для своей компании, и сейчас мы изучаем python, чтобы сделать нашу платформу драйверов независимой. Предложенный высшим руководством и делающий это RND в эти дни.
@sandundhammika: Этого не произойдет, если говорить в разговорной речи. Драйверы не являются независимыми от платформы, потому что ядро диктует, что они должны делать, а разные платформы имеют совершенно разные ожидания. Поэтому Windows ожидает, что драйверы UMDF будут взаимодействовать через COM, тогда как в Linux даже нет COM.
@MSalters Первоначальная проблема - распространять один и тот же двоичный драйвер для разных дистрибутивов. Мы поставляем наш собственный двоичный выпуск C ++, но их имена библиотек зависят от платформы, поэтому даже тот же ABI нарушает имена библиотек.
@sandundhammika: Похоже, что лучшим решением будет установщик драйверов, написанный на Python, с фактическим драйвером, все еще на C ++. Этого может быть достаточно, чтобы проверить желание вашего менеджера.
Хороший способ получить представление о том, почему это практически невозможно, - это прочитать совет Microsoft по использованию С++ в драйверах. Как производная от C, использование С++ представляется простым. На практике это не так.
Например, вы должны решить для каждой функции (и действительно каждой инструкции сборки), будь то в доступной для страниц или нестранимой памяти. Для этого требуются расширения для C, тщательное использование новых возможностей С++ или в этом случае специальное расширение для языка Python и виртуальной машины. Кроме того, ваша совместимая с драйвером VM также должна иметь дело с разными IRQL - там есть иерархия уровней, которые ограничивают то, что вы можете и чего не можете сделать.
Можно ли написать драйверы аппаратного обеспечения в Javascript? Какими будут шаги, необходимые для выполнения такой задачи?
Кроме того, я не знал, где разместить это, поэтому любые предложения по этому поводу также приветствуются. Надеюсь, это точное место для вопроса.
Нет. На самом деле, нет. Я имею в виду, вы могли бы, написав что-то, что компилирует Javascript в C, но это было бы довольно сумасшедшим. Бит как попытка использовать ложку в качестве бензопилы.
Узнать C. Это правильный инструмент для работы.
Как насчет многих платформ драйверов пользовательского режима, которые существуют на различных платформах? :-)
Теперь я испытываю желание написать драйвер файловой системы поверх FUSE только потому, что могу! Закон Этвуда FTW!
Насколько я знаю, вы все равно не будете использовать Javascript с UMDF. Лично мне нравится JS, но это тот случай, когда лучше найти правильный инструмент, чтобы попробовать и использовать другой инструмент вместо него.
Как ни глупо, как это звучит, сейчас это делается для различных устройств IOT. Но во всех случаях, которые я видел, само устройство включает модифицированную версию двигателя V8 JS. Телефон Mozilla предоставляет интерфейс доступа HW, но опять же это не настоящий "драйвер" устройства, а API скелета, который подвергается JS.
Я бы попросил вас изучить Object Pascal или C/С++, поскольку они являются единственными истинными "настоящими" языками, подходящими для этого типа работы. Традиционно C является наиболее часто используемым языком, но C и Pascal по сути являются одним и тем же с другим синтаксисом. С++ builder и Object Pascal даже используют один и тот же код, с другим синтаксическим анализатором/лексером.
Сказав это, нет никакой реальной причины, по которой некоторые пользовательские драйверы могут быть закодированы в NodeJS. В Linux большое количество промежуточного программного обеспечения HW сначала написано на Python, только для того, чтобы быть завершенным на C. Таким образом, все возможно, если кто-то адаптировал среду выполнения для доступа к оборудованию. FreePascal и Python обеспечивают доступ GPIO к малине PI 1-2. Но не может быть никаких сомнений в том, что лучшие языки, такие как C/С++ и Object Pascal, имеют верх.
С "реальным" значением, скомпилированным для машинного кода для платформы, и нереальным ссылкой на script, такие как python и javascript.
Я хотел бы знать, откуда взялась идея о том, что материал для Linux впервые написан на Python и завершен на C. Я сам занимался разработкой ядра и знаю многих людей, которые делают это ежедневно. Я думаю, им было бы трудно перестать смеяться, если бы представили эту идею.
И я не хочу вам этого говорить, но одно из самых популярных встроенных ядер написано на объектном паскале. Вы серьезно не думаете, что Linux - единственная игра в городе? Прямо сейчас у меня есть куча друзей, работающих во встроенной области, которым было бы трудно перестать смеяться над вашим ограниченным представлением о работе низкого уровня. Типично, люди видят только свой маленький мир. Но при переполнении стека вы должны хотя бы быть готовы узнать что-то новое
Хммм, вы знаете, что можно атаковать идеи, но не следует распространять это на людей, верно? Ну, теперь вы делаете. Я надеюсь, что вы будете иметь это в виду, и, пожалуйста, постарайтесь не быть таким эмоциональным. Это не заставляет тебя выглядеть особенно хорошо. Вы, кажется, путаете «использование» GPIO через существующий API ядра с написанием реального драйвера устройства. Да, вы можете поиграть с каким-то простым API, но в конце вы будете подвергаться ненужному переключению контекста, иметь дело с вытеснением и многими другими проблемами, возникающими из-за этой яркой идеи.
WRT FPC, если вы думаете, что у вас есть точка зрения, просьба привести объективные данные. «одно из самых популярных встроенных ядер». С каких пор популярность - это показатель качества? Вдовы для POS, вероятно, гораздо более популярны, если мы пойдем по этим критериям.
Игорь, популярность - это не показатель качества, а показатель гибкости и удобства использования. Что касается оскорблений на личном уровне, перечитайте свой первоначальный ответ еще раз и посмотрите, сможете ли вы определить, откуда появилось это семя. Моя точка зрения такова: есть много способов решить проблему, и в некоторых случаях это может быть использование инструмента, к которому вы не привыкли. Это касается меня, тебя и всех. У меня нет проблем с использованием Python в качестве решения, когда это явно лучший вариант, ни nodeJs в этом отношении. На что я отреагировал, так это отсутствие открытости по отношению к другим языкам и т. Д.
Ничего себе, эта идея не имеет смысла, ИМХО вы выбираете язык программирования для решения проблемы или задачи, а не наоборот. Я работаю с драйверами устройств и файлами, связанными с ОС, но только потому, что я могу программировать на C. Я не использую C для выполнения других задач, таких как администрирование Linux для моего встроенного устройства; вместо этого я использую что-то высокое, например, Bash, Perl или Python (в зависимости от моего настроения:)).
Почему вас интересует js? Фактически, вы должны понимать внутренности языка программирования, чтобы знать, чего вы пытаетесь достичь, а также вам нужно знать, как вы будете взаимодействовать с вашей ОС, чтобы обмениваться данными с регистрами устройств и прерываниями между прочим.
Читайте также: