На каком языке пишутся драйвера?
Драйвера пишутся на компилируемых языках, поддерживающих бинарные интерфейсы соостветствующих ОС. Это C, C++, assembler, кое-где psacal.
Python этим требованиям не соответствует.
Встречный вопрос: драйвером какого устройства хотите нас порадовать?
Ответ написан более трёх лет назад
Комментировать
Нравится 6 Комментировать
Влад Животнев @inkvizitor68sl
Linux-сисадмин с 8 летним стажем.
Драйвера чего к чему) ?
Если драйвера устройств к винде — то да, C/C++
Если драйвера стораджа к openstack — то они бывают и на python.
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
Frontend developer
Нельзя, нужен низкоуровневый язык.
Ответ написан более трёх лет назад
> Если нет, то почему ?
Прям вот только низкоуровневый? То есть на C++ писать уже нельзя, только на ассемблере?
Ваш ответ на вопрос
Войдите, чтобы написать ответ
- Python
- +3 ещё
Почему aiogram выводит пустой объект?
- 1 подписчик
- 10 минут назад
- 7 просмотров
Драйвер — это просто
Многие считают что самому создать драйвер для Windows это что-то на грани фантастики. Но на самом деле это не так. Конечно, разработка драйвера для какого-то навороченного девайса бывает не простой задачей. Но ведь тоже самое можно сказать про создание сложных программ или игр. В разработке простого драйвера нет ничего сложного и я попытаюсь на примерах это показать.
Сперва нам нужно определится в чем мы же будем создавать наш первый драйвер. Поскольку материал ориентирован на новичков, то язык программирования был выбран один из простых, и это не Си или ассемблер, а бейсик. Будем использовать один из диалектов бейсика — PureBasic. Из коробки он не обучен создавать драйверы, но у него удачный набор файлов, используемых для компиляции и небольшое шаманство позволяет добавить эту возможность. Процесс компиляции состоит из нескольких этапов. Если кратко, то он происходит следующим образом: Сначала транслятор «перегоняет» basic-код в ассемблер, который отдается FASM’у (компилятор ассемблера), который создает объектный файл. Далее в дело вступает линкер polink, создающий исполняемый файл. Как компилятор ассемблера, так и линкер могут создавать драйверы и если немного изменить опции компиляции, то получим не исполняемый файл, типа EXE или DLL, а драйвер режима ядра (SYS).
Скачать немного модифицированную бесплатную демо версию PureBasic 4.61 x86 можно на файлопомойке, зеркало.
Если нужно создать драйвер для x64 системы, качайте эту версию, зеркало.
Дистрибутивы имеют небольшие размеры, около 3 МБ каждый. С помощью этой версии можно создавать только драйвера.
Скачиваем, распаковываем и запускаем, кликнув по файлу «PureBasic Portable». При этом запустится IDE и вылезет окошко с сообщением что это демо-версия и списком ограничений. Из него наиболее существенным является ограничение числа строк кода, равное 800, а для создания простых драйверов этого может хватить. Остальные ограничения в нашем случае, не существенны.
Окно IDE с загруженным кодом драйвера показано на скрине.
Компиляция драйвера выполняется через меню «Компилятор» (это если кто не понял).
Теперь определимся что будет делать наш первый драйвер. Обычно при изучении программирования начинают с простых вещей, скажем, выполнения математических операций и вывода результата. Вот пусть наш драйвер делает тоже самое, ведь банальная математика производимая в режиме ядра это очень круто!
Declare DriverEntry(*DriverObject, *RegistryPath) !public PureBasicStart !section '.code' code readable executable align 8 !PureBasicStart: *A=@DriverEntry() !jmp [p_A] ; Переход в процедуру DriverEntry(). #IOCTL_MyPlus = $200 !extrn PB_PokeL CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !extrn _IoCompleteRequest@8 ; Объявление импортируемых функций ядра. !extrn _RtlInitUnicodeString@8 !extrn _IoCreateDevice@28 !extrn _IoDeleteDevice@4 !extrn _IoCreateSymbolicLink@8 !extrn _IoDeleteSymbolicLink@4 !extrn _PB_PeekI@4 Import "ntoskrnl.lib" CompilerCase #PB_Processor_x64 !extrn IoCompleteRequest; Объявление импортируемых функций ядра. !extrn RtlInitUnicodeString !extrn IoCreateDevice !extrn IoDeleteDevice !extrn IoCreateSymbolicLink !extrn IoDeleteSymbolicLink !extrn PB_PeekI ImportC "ntoskrnl.lib" CompilerEndSelect ; Импорт функций ядра системы. IoCompleteRequest(*IRP, PriorityBoost) RtlInitUnicodeString(*UString, *String) IoCreateDevice(*DriverObject, DeviceExtensionSize, *UDeviceName, DeviceType, DeviceCharacteristics, Exclusive, *DeviceObject) IoDeleteDevice(*DeviceObject) IoCreateSymbolicLink(*SymbolicLinkName, *DeviceName) IoDeleteSymbolicLink(*SymbolicLinkName) EndImport Structure MyData ; Данные, передаваемые в драйвер. Plus_1.l Plus_2.l EndStructure ; Прцедура обмена данными с программой. Procedure DeviceIoControl(*DeviceObject.DEVICE_OBJECT, *pIrp.IRP) Protected *Stack.IO_STACK_LOCATION Protected *InpBuff, *OutBuff Protected InBuffSize, OutBuffSize Protected ntStatus, *MyData.MyData ntStatus = #STATUS_SUCCESS ; Все ОК. *Stack = *pIrp\Tail\Overlay\CurrentStackLocation ; Размеры буферов (см. WinAPI функцию DeviceIoControl()) InBuffSize = *Stack\Parameters\DeviceIoControl\InputBufferLength OutBuffSize = *Stack\Parameters\DeviceIoControl\OutputBufferLength If InBuffSize >= SizeOf(Integer) And OutBuffSize >= 4 Select *Stack\Parameters\DeviceIoControl\IoControlCode Case #IOCTL_MyPlus *Point = *pIrp\SystemBuffer If *Point *MyData = PeekI(*Point) If *MyData Result.l = *MyData\Plus_1 + *MyData\Plus_2 PokeL(*pIrp\SystemBuffer, Result) *pIrp\IoStatus\Information = 4 Else ntStatus = #STATUS_BUFFER_TOO_SMALL *pIrp\IoStatus\Information = 0 EndIf EndIf Default ntStatus = #STATUS_UNSUCCESSFUL *pIrp\IoStatus\Information = 0 EndSelect Else ntStatus = #STATUS_BUFFER_TOO_SMALL ; Размер буфера слишком мал. *pIrp\IoStatus\Information = 0 EndIf *pIrp\IoStatus\Status = ntStatus IoCompleteRequest(*pIrp, #IO_NO_INCREMENT) ProcedureReturn ntStatus EndProcedure ; Выгрузка драйвера. Вызывается при завершении работы драйвера. Procedure UnloadDriver(*DriverObject.DRIVER_OBJECT) Protected uniDOSString.UNICODE_STRING ; Инициализация объектов-строк. RtlInitUnicodeString(@uniDOSString, ?DosDevices) ; Удаление символьной связи. IoDeleteSymbolicLink (@uniDOSString) ; Удаление устройства. IoDeleteDevice(*DriverObject\DeviceObject) EndProcedure ; Вызывается при доступе к драйверу с помощью функци CreateFile(). Procedure CreateDispatch(*DeviceObject.DEVICE_OBJECT, *pIrp.IRP) *pIrp\IoStatus\Information = 0 *pIrp\IoStatus\Status = #STATUS_SUCCESS IoCompleteRequest(*pIrp, #IO_NO_INCREMENT) ProcedureReturn #STATUS_SUCCESS EndProcedure ; Вызывается при осовбождении драйвера функцией CloseHandle(). Procedure CloseDispatch(*DeviceObject.DEVICE_OBJECT, *pIrp.IRP) *pIrp\IoStatus\Information = 0 *pIrp\IoStatus\Status = #STATUS_SUCCESS IoCompleteRequest(*pIrp, #IO_NO_INCREMENT) ProcedureReturn #STATUS_SUCCESS EndProcedure ; Процедура загрузки драйвера. Вызывается однократно при его запуске. Procedure DriverEntry(*DriverObject.DRIVER_OBJECT, *RegistryPath.UNICODE_STRING) Protected deviceObject.DEVICE_OBJECT Protected uniNameString.UNICODE_STRING Protected uniDOSString.UNICODE_STRING ; Инициализация объектов-строк. RtlInitUnicodeString(@uniNameString, ?Device) RtlInitUnicodeString(@uniDOSString, ?DosDevices) ; Создание устройства. status = IoCreateDevice(*DriverObject, 0, @uniNameString, #FILE_DEVICE_UNKNOWN, 0, #False, @deviceObject) If status <> #STATUS_SUCCESS ProcedureReturn status EndIf ; Создане символьной связи между именем этого устройства и именем, ; находящимся в видимой области для user-mode, для того, чтобы ; приложение могло получить доступ к этому устройству. status = IoCreateSymbolicLink(@uniDOSString, @uniNameString) If status <> #STATUS_SUCCESS IoDeleteDevice(@deviceObject) ProcedureReturn status EndIf ; Указатель на функцию выгрузки драйвера. *DriverObject\DriverUnload = @UnloadDriver() *DriverObject\MajorFunction[#IRP_MJ_CREATE] = @CreateDispatch() *DriverObject\MajorFunction[#IRP_MJ_CLOSE] = @CloseDispatch() ; Указываем какая функция будет обрабатывать запросы WinAPI DeviceIoControl(). *DriverObject\MajorFunction[#IRP_MJ_DEVICE_CONTROL] = @DeviceIoControl() ProcedureReturn #STATUS_SUCCESS EndProcedure ; Имя драйвра (юникод). DataSection Device: !du '\Device\pbDrPlus', 0, 0 DosDevices: !du '\DosDevices\pbDrPlus', 0, 0 EndDataSection
Может показаться что это куча бессмысленного кода, но это не так.
У каждого драйвера должна быть точка входа, обычно у нее имя DriverEntry() и выполнена она в виде процедуры или функции. Как видите, в этом драйвере есть такая процедура. Если посмотрите на начало кода, то в первых строках увидите как ей передается управление. В этой процедуре происходит инициализация драйвера. Там же назначается процедура завершения работы драйвера, которая в нашем случае имеет имя UnloadDriver(). Процедуры CreateDispatch() и CloseDispatch() назначаются обработчиками соединения и отсоединения проги из юзермода.
Процедура DeviceIoControl() будет обрабатывать запросы WinAPI функции DeviceIoControl(), являющейся в данном драйвере связью с юзермодом. В конце кода расположена так называемая ДатаСекция (DataSection), в которой находятся имена драйвера, сохраненные в формате юникода (для этого использована одна из фишек ассемблера FASM).
Теперь рассмотрим как драйвер будет взаимодействовать с внешним миром. Это происходит в процедуре DeviceIoControl(). В ней отслеживается одно сообщение, а именно — #IOCTL_MyPlus, которое отправляет юзермодная прога, когда ей нужно сложить два числа в режиме ядра (круто звучит, правда?). Когда такое сообщение получено, то считываем из системного буфера, адрес указателя на структуру со слагаемыми, производим сложение и результат помещаем в системный буфер. Собственно это основная задача нашего первого драйвера.
Видите сколько понадобилось кода для выполнения простейшей математической операции — сложения двух чисел?
А теперь рассмотрим программу, работающую с этим драйвером. Она написана на том же PureBasic.
#DriverName = "pbDrPlus" #IOCTL_MyPlus = $200 XIncludeFile "..\DrUserModeFramework.pbi" Structure MyData ; Данные, передаваемые в драйвер. Plus_1.l Plus_2.l EndStructure ; Абсолютный путь к файлу-драйверу. DrFile.s = GetPathPart(ProgramFilename())+#DriverName+".sys" ; Загружает драйвер и если успешно, то порлучаем его хэндл. hDrv=OpenDriver(DrFile, #DriverName, #DriverName, #DriverName) If hDrv=0 ; Деинсталляция драйвера из системы. Driver_UnInstall(#DriverName) MessageRequester("", "Ошибка загрузки драйвера") End EndIf ; Обмен данными с драйвером. Procedure.q Plus(hDrv, x1, x2) Protected MyData.MyData, Result, *Point MyData\Plus_1=x1 MyData\Plus_2=x2 *Point = @MyData DeviceIoControl_(hDrv, #IOCTL_MyPlus, @*Point, SizeOf(MyData), @Result, 4, @BytesReturned, 0) ProcedureReturn Result EndProcedure OpenWindow(1,300,300,140,90,"Title",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) StringGadget(1,10,10,50,20,"") StringGadget(2,10,40,50,20,"") TextGadget(3,70,30,70,20,"") Repeat ev=WaitWindowEvent() If ev=#PB_Event_Gadget op1=Val(GetGadgetText(1)) op2=Val(GetGadgetText(2)) Result = Plus(hDrv, op1, op2) SetGadgetText(3,Str(Result)) EndIf Until ev=#PB_Event_CloseWindow ; Если драйвер загружен, то закрываем связь с ним. If hDrv CloseHandle_(hDrv) hDrv=0 EndIf ; Деинсталляция драйвера из системы. Driver_UnInstall(#DriverName)
При старте программы вызывается функция OpenDriver(), которая загружает драйвер. Для упрощения, имя драйвера, имя службы и описание службы заданы одинаковыми — «pbDrPlus». Если загрузка неудачная, то выводится соответствующее сообщение и программа завершает свою работу.
Процедура Plus() осуществляет связь с драйвером. Ей передаются хэндл, доступа к драйверу и слагаемые числа, которые помещаются в структуру и указатель на указатель которой, передается драйверу. Результат сложения чисел будет в переменной «Result».
Далее следует код простейшего GUI калькулятора, скопированного из википедии.
Когда закроют окно, то перед завершением работы программы, закрывается связь с драйвером и производится его деинсталляция из системы.
Результат сложения чисел 8 и 2 на скриншоте.
Исходные коды драйвера и программы, можно найти в папке «Examples», PureBasic на файлопомойке, ссылку на который давал в начале статьи. Там так же найдете примеры драйвера прямого доступа к порам компа и пример работы с памятью ядра.
PS.
Помните, работа в ядре чревата мелкими неожиданностями аля, BSOD (синий экран смерти), поэтому экспериментируйте осторожно и обязательно всё сохраняйте перед запуском драйвера.
За возможную потерю данных, я ответственности не несу!
Драйвер
Драйвер — это программа, которая помогает компьютеру распознать какое-нибудь подключенное устройство. Благодаря драйверам операционная система компьютера видит мышь, клавиатуру, монитор и другие девайсы.
Драйверы есть у всех устройств, которые подключаются к компьютеру. К ним относятся даже те, которые с первого взгляда кажутся неотъемлемой его частью: видеокарта или тачпад ноутбука. В любой операционной системе есть драйверы, просто для разных ОС они отличаются.
Вне IT слово driver означает «водитель», а иногда используется как синоним двигателя или ускорителя — например, драйвер роста экономики. Двигатель машины драйвером не называют, это более общее понятие.
«IT-специалист с нуля» наш лучший курс для старта в IT
IT-специалист с нуля
Наш лучший курс для старта в IT. За 2 месяца вы пробуете себя в девяти разных профессиях: мобильной и веб-разработке, тестировании, аналитике и даже Data Science — выберите подходящую и сразу освойте ее.
Профессия / 8 месяцев
IT-специалист с нуля
Попробуйте 9 профессий за 2 месяца и выберите подходящую вам
Что делают драйверы и зачем они нужны
Когда к компьютеру подключают какую-то аппаратуру, ее нужно как-то связать с программной частью — операционной системой. Именно это делает драйвер — дает компьютеру инструкцию, как общаться с новым «железом».
Без драйвера компьютер не сможет понять, что за устройство к нему подключили, и не сумеет с ним работать. Например, если ПК не распознаёт новую веб-камеру — возможно, дело в том, что для нее не скачался драйвер. Еще бывает ситуация, когда драйвер подходит устройству не до конца, поэтому частью его функций не получается пользоваться — система их не видит.
Кто создает драйверы
Обычно драйвер для какого-то устройства пишут разработчики из компании, которая выпустила это устройство. Например, компания производит компьютерные мыши, и она же будет разрабатывать для них драйверы. Самописные драйверы встречаются очень редко и в основном пишутся для какой-то нестандартной или даже самодельной техники.
Драйверы пишут на системных языках, близких к «железу», поэтому создать такую программу — сложная задача. Специалистов, которые умеют это делать, довольно мало.
Откуда берутся драйверы
Если купить в магазине новую мышь и подключить ее к компьютеру, она обычно начинает работать сразу. Никакие драйверы пользователь не скачивает. Но они все равно есть, просто их поиск и установку сейчас автоматизировали.
Существуют стандартные драйверы для простых устройств. Когда ОС устанавливают на компьютер, она первым делом автоматически подключает драйверы для всего базового оборудования: клавиатуры, мыши, монитора. Такие устройства обычно делают одни и те же вещи, поэтому стандартных драйверов для них хватает. Человеку ничего не приходится искать. То же самое происходит, когда к компьютеру подключают новое устройство, если оно простое и стандартное — как та же обычная мышка из магазина.
До появления автоматизации каждая переустановка ОС была сложным делом. Нужно было как-то скачать и установить драйвера на большую часть периферии — а во время поиска она не работала, и пользоваться компьютером было неудобно.
Курс для новичков «IT-специалист
с нуля» – разберемся, какая профессия вам подходит, и поможем вам ее освоить
Современные ОС могут искать и устанавливать драйверы. Если стандартный драйвер по какой-то причине не нашелся или не подошел, операционная система может поискать подходящий в интернете. Большая часть периферийных устройств простая, так что ОС, как правило, успешно находит нужные программы — проблем не возникает. Но некоторым системам нужно сначала дать на это разрешение.
Порой драйвер приходится искать самостоятельно. Такое бывает, если к компьютеру подключают нестандартную технику: умную клавиатуру, мышку с дополнительными кнопками или графический планшет для рисования. Для такой техники не подходят стандартные драйверы, и их нужно самостоятельно скачать и установить. Обычно драйверы можно найти на сайте производителя устройств. Сложности могут возникнуть, только если техника старая и уже не поддерживается.
Иногда драйверы поставляются вместе с устройством. Наверняка вы обращали внимание: при покупке техники к ней прилагают диск, который можно вставить в компьютер. На этом диске — драйверы и иногда другие вспомогательные программы. Правда, в современных компьютерах и тем более ноутбуках не всегда есть дисководы. Поэтому вместо дисков оставляют карточки со ссылками на скачивание драйвера.
Что случается, если драйвер не подходит
Если драйвер подошел не до конца, часть функций устройства оказывается «порезана». Например, система установила стандартный драйвер для мыши, а вы подключили геймерскую мышку, на которой есть десяток новых кнопок. Инструкций для этих кнопок нет в стандартном драйвере, так что компьютер просто не понимает, что с ними делать. То же самое касается сложной техники вроде принтера: распечатать лист, скорее всего, получится, а вот настроить фотопечать — уже нет.
Если драйвер совсем не подошел, устройство в принципе не работает при подключении к компьютеру. Система может говорить, что устройство не распознано, или вообще не видеть его, как будто ничего и не подключали. К счастью, такое бывает редко.
Решение в обоих случаях одно: самостоятельно найти и установить подходящий драйвер. Обычно это легко — достаточно погуглить драйвера для нужной модели техники.
Что означает «драйвер слетел»
Уже установленные драйвера могут повредиться из-за вируса, ошибок на жестком диске, при переустановке или обновлении системы. Тогда они перестают работать, и пользователю нужно скачать их заново либо обновить. Обычно это можно сделать в панели управления устройствами прямо из операционной системы: она сама найдет нужное. Если не получается — придется искать и скачивать вручную.
Почему система просит обновить драйверы
Бывает так, что техника обновляется, и драйверы для нее тоже. Но у пользователя на компьютере уже установлены старые драйверы, поэтому частью новых функций он пользоваться не может. Тогда система или само устройство будут просить человека обновить драйвер, чтобы техника могла работать корректно. Чаще всего так бывает с видеокартами.
Еще просьба может появляться, если человек неудачно обновил драйвер: скачал нестабильную или «битую» версию, установил драйвера не для той модели техники. Иногда обновить драйвер просят, если текущий по какой-то причине повредился.
Драйверы и режим совместимости
Обычно при работе с драйверами почти не возникает проблем. Но есть исключение: старая техника. Дело в том, что в какой-то момент старые устройства перестают поддерживать производители. А вот компьютеры развиваются, и операционные системы тоже. Старый драйвер, написанный для Windows XP, вряд ли подойдет для Windows 10, а новой версии драйвера просто не существует.
Решить эту проблему можно двумя способами.
- Режим совместимости — это функция операционной системы, которая позволяет установить программы для более старых ОС. Если установить драйвер в режиме совместимости, он может заработать.
- Использование старых версий системы — увы, если устройство сложное или специфическое, то даже режим совместимости может не помочь. Тогда пользователю остается установить версию ОС, которая поддерживает это устройство. Но этим способом пользуются в крайнем случае: работать со старыми ОС неудобно, на них «не идет» большая часть современных программ.
На каком языке пишут драйвера?
я знаком с языками программирования turbo pascal,c++ (GCC) (если честно то только начал). на каком языке пишутся драйвера? не думаю что на одном из этих. Может на ассамблере? И как они пишутся? ссылки приветствуются.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
На каком языке нужно писать драйвера?
У меня проблема.Старый принтер и сканер не работают с 8 и 10.Хочу сам написать для них.
На каком именно ассемблере пишут драйверы?
Всем доброго времени суток! Изучал с горем пополам ассемблер. В Linux, компилятор был nasm. Узнал.
На каком языке пишут программы под линукс
На каком языке пишут программы под линукс и в какой среде?
На каком языке пишут браузерные онлайн игры?
С помощью каких технологий? То, что один человек не может написать такую игру, это я понимаю.
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
Только это тебе не оконные прожки клепать!
Регистрация: 31.07.2010
Сообщений: 20
Драйвера можно писать на любом языке — был бы соответствующий компилятор, обычные средства не пойдут, например, для драйверов под Windows существует пакет DDK (сейчас переименовали в WDK), там используется Си.
Майкрософт не гарантирует корректную работу драйвера собранного другими инструментами.
К-стати насчет ассемблера — DDK позволяет полностью обойтись без него.
21275 / 8292 / 637
Регистрация: 30.03.2009
Сообщений: 22,656
Записей в блоге: 30
Сообщение от tig1818c
Драйвера можно писать на любом языке — был бы соответствующий компилятор
Интересно будет посмотреть на драйвер, написанный на коболе, алголе или фортране
Регистрация: 31.07.2010
Сообщений: 20
Ищущий да обрящет. Найди соответствующий компилятор, и смотри сколько влезет. Думаю, ничего нового не увидишь
Регистрация: 02.08.2010
Сообщений: 270
или на алмире и на каком-нибудь там «Ралира»
21275 / 8292 / 637
Регистрация: 30.03.2009
Сообщений: 22,656
Записей в блоге: 30
tig1818c, мне интересно было посмотреть на драйвер (на его исходники, написанные на одном из обозначенных языков). Сколько влезет смотреть на соответствующий компилятор у меня интереса нет
Регистрация: 31.07.2010
Сообщений: 20
Хоть на русском матерном, повторяю, вся проблема в отсутствии среды компиляции
21275 / 8292 / 637
Регистрация: 30.03.2009
Сообщений: 22,656
Записей в блоге: 30
Сообщение от tig1818c
Хоть на русском матерном, повторяю, вся проблема в отсутствии среды компиляции
Ого, уже и среда появилась. А мне казалось, что в предельном случае для написания драйвера достаточно шестнадцатиричного редактора. Слушай, будь другом, напиши мне драйвер на русском, а то жуть как посмотреть охота
Регистрация: 31.07.2010
Сообщений: 20
Могу и на русском, если Вы что-нибудь слышали про Эль-76, но повторяю, исходный текст никогда не превратится в машинный код
21275 / 8292 / 637
Регистрация: 30.03.2009
Сообщений: 22,656
Записей в блоге: 30
Сообщение от tig1818c
Могу и на русском
Давай, напиши. Драйвер мыши не сложно будет для начала?
Сообщение от tig1818c
если Вы что-нибудь слышали про Эль-76
Допустим, слышал, только не понимаю, как соотносится эль-76 и драйвер?
Сообщение от tig1818c
но повторяю, исходный текст никогда не превратится в машинный код
А на русский язык сию великую мысль можешь перевести? А то я так и не могу понять, напишешь ты мне драйвер на фортране или нет
Регистрация: 31.07.2010
Сообщений: 20
Немного странно звучит вопрос — причем, допустим Си и драйвер? Эль-76 (другое название Автокод Эльбрус) местами даст большую фору С++. Жаль что слишком машинноориентирован, очень сложный компилятор получается для арифмометров Intel-платформы
Добавлено через 4 минуты
Что касается перевода на русский: может, я мыслю древними понятиями, но они мне привычнее: исходный текст (неважно на каком языке) называется ТЕКСТОМ ПРОГРАММЫ, а результат работы транслятора — КОДОМ ПРОГРАММЫ
21275 / 8292 / 637
Регистрация: 30.03.2009
Сообщений: 22,656
Записей в блоге: 30
> причем, допустим Си и драйвер?
Допустим при том, что на Си, как уже говорилось выше, можно написать драйвер. Потом речь зашла о том, что драйвер вроде бы как можно написать на любом языке. Я высказал желание посмотреть на драйвер, написанный на алголе, коболе или фортране. Мне в ответ было сказано, что можно написать на русском или эль76. На предложение написать драйвер на русском опять конкретного ответа не последовало. Вопрос про «при чём тут эль76» касался впервую очередь того, что были обозначены три вполне конкретных языка и мне непонятно было зачем сюда приплетать ещё один язык, про который кроме дремучих советских академиков никто не знает. Но если ты так хочешь — давай приплетём
Не хотелось бы трогать эльбрусы и эль-76 (для которого, кстати, проще написать конвертор в си, чем компилятор), а хотелось бы услышать внятный ответ на вопрос: будешь ты мне приводить фрагменты драйвера на одном из трёх указанных выше языков (алгол, кобол, фортран), или не будешь? Под внятным ответом подразумевается что-то типа «да», «нет», «пошёл на . » и т.п., но никак не «в то время как космические корабли бороздят просторы вселенной»
Добавлено через 1 минуту
Сообщение от tig1818c
Что касается перевода на русский: может, я мыслю древними понятиями, но они мне привычнее: исходный текст (неважно на каком языке) называется ТЕКСТОМ ПРОГРАММЫ, а результат работы транслятора — КОДОМ ПРОГРАММЫ
Неприниципально. Ни у кого возражений по этому поводу не возникало.
Регистрация: 31.07.2010
Сообщений: 20
Не хотелось бы трогать эльбрусы и эль-76.
Ну спасибо, к академикам меня еще не подшивали, вроде не такой дремучий.
Теперь «про драйвер мыши на фортране». Писать его, естественно, никто не собирается. Вы это хотели от меня? Тем более что изначально я утверждал что это «в принципе возможно», и не более.
Вряд-ли кто-то станет добывать огонь трением, когда в кармане зажигалка.
21275 / 8292 / 637
Регистрация: 30.03.2009
Сообщений: 22,656
Записей в блоге: 30
Сообщение от tig1818c
Тем более что изначально я утверждал что это «в принципе возможно», и не более. Вряд-ли кто-то станет добывать огонь трением, когда в кармане зажигалка
ВОТ! Наконец-то услышал что-то конкретное. После чего все свои вопросы снимаю. А если честно, то я попросту подумал, что на форуме появился очередной залётный умник, который услыхал умных слов типа «драйвер» или «эль-76» и начал гнуть пальцы. Так что извиняй, обознался
А что касается изначального вопроса polimorf96, то ответить можно следующее. Драйвер — это точка состыковки между аппаратурой и прикладным софтом. Драйвер является частью операционной системы. Работа с аппаратурой как правило состоит в чтении-записи данных из портов ввода-вывода. Это некие специальные адреса памяти, которые ассоциируются с аппаратурой. А потому теоретически драйвер и вправду можно написать на любом языке. Но для нормальной и удобной работы с памятью крайне желательно, чтобы язык обладал такой вещью, как указатель, а потмоу большинство языков просто идут лесом. Язык должен иметь компилятор (а не интерпретатор), потому что драйвер всегда должен работать как native код, а не интерпретироваться, а следовательно другая часть языков так же идёт лесом. На большинстве современных архитектур при работе с аппаратурой требуются специфические операции, которые не выражаются в терминах языка программирования, а потому язык должен уметь работать с ассемблерными вставками. Итого в сухом остатке получается, что для написания драйверов используют либо Си, либо голый ассемблер. Си++ как таковой не подойдёт, потому как многие конструкции языка являются высокоуровневыми (new, exception, конструкторы статических объектов), а потому могут работать только под управлением ОС (а нам нужен код, который бы работал внутри ОС)