Форум программистов, компьютерный форум, киберфорум
Программирование драйверов
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 28.05.2025
Сообщений: 1

Как сделать драйвер диска на языке C и ассемблере?

28.05.2025, 04:41. Показов 1325. Ответов 2

Студворк — интернет-сервис помощи студентам
Я не нашёл информацию в интернете, я делаю свою ос и мне нужно код этого драйвера или хотя бы как драйвер диска работает полное объяснение
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.05.2025, 04:41
Ответы с готовыми решениями:

Зачем нужен драйвер и как написать простейший драйвер
Хотя в интернете и есть на русском языке некоторые обяснения что такое драйвер для его...

Ассемблер в паскале: как загрузить массив во встроенный ассемблер и произвести над любым из его чисел сложение(вычитание).
хочу написать программу в паскале с использованием встроенного ассемблера, но прежде чем начать...

Драйвер чтения данных из СОМ-порта(Ассемблер)
Доброго времени суток,может завалялся у кого драйвер DOS на ассемблере под COM-порт(без разницы на...

2
Эксперт .NET
 Аватар для Usaga
14315 / 9401 / 1355
Регистрация: 21.01.2016
Сообщений: 35,455
28.05.2025, 05:26
Artem_infOS, устройство драйвера определяется не только железом, которым он драйвит, но и архитектурой ОС. А поскольку ты сам свою ОС пишешь, то ты единственный и должен знать как этот драйвер должен выглядеть.

Ну и "диски" разные бывают. Очень разные. Полное объяснение ты нигде не найдёшь потому, что это нафиг никому не надо расписывать.

Можешь посмотреть исходники ядра Linux или FreeBSD. Там модули (драйверы) входят в состав ядра и их можно взять за основу.
1
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6213 / 2447 / 403
Регистрация: 29.07.2014
Сообщений: 3,178
Записей в блоге: 4
28.05.2025, 08:03
Цитата Сообщение от Artem_infOS Посмотреть сообщение
или хотя бы как драйвер диска работает полное объяснение
Вот последовательность действий на начальном этапе:

1. Поиск контроллеров накопителей на мат.плате
Искать в "PCI-Config-Space" или вручную чз порты 0x0CF8 (CONFIG_ADDRESS) + 0x0CFC (CONFIG_DATA), или-же удобно использовать функцию прерывания int-1Ah. AX=B103h. Девайсам "MassStorage" назначен класс(01), подкласс(08:01) задаёт тип контроллера, а последний байт(PI) указывает на "Programming Interface", т.е. метод программирования:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
     mov    ax, 0xB103
     xor    si,si
 
     mov    ecx,0x010802      ;<--- NVMe M.2
;    mov    ecx,0x010801      ;<--- SATA NVM
;    mov    ecx,0x010601      ;<--- SATA AHCI
;    mov    ecx,0x010600      ;<--- SATA IDE
;    mov    ecx,0x01018F/8A   ;<---  ATA IDE
;    mov    ecx,0x010100      ;<---  ATA Native
 
     int    0x1a
     or     ah,ah
     jnz    @NotFound
.....
2. Идентификация устройства
Если на любой из подклассов int-1Ah вернёт нуль, значит есть контроллер и устройство на его шине, и это определит дальнейший фронт работы в зависимости от интерфейса. Можно начать с идентификации накопителя, для чего необходимо получить доступ к физ.портам в/в, или их отображением в памяти MMIO. Эта информация хранится в регистрах BAR[5:0] там-же в "PCI-Config-Space" - прочитать их можно функцией int-1Ah. AX=B10Ah (read dword). Определившись с базовым портом/регистром накопителя, отправляешь в него АТА-команду "Identify Device" с кодом 0xEC, чтобы получить размер в секторах, поддержку DMA, и всё остальное.

3. Обработчики запросов
Доступ к накопителям на RW осуществляется исключительно через физ.порты или регистры MMIO, т.к. других способов просто не существует в природе. Можно найти готовые высокоуровневые программные решения, но всё это будет лишь обёрткой для чтения/записи портов.

Здесь в зависимости от интерфейса качаешь спеки с сайта t13 или pcisig, где оговариваются все нюансы. Так-же много полезной инфы есть в доках на чипсет (пусть будет) PCH9. В части(13) найдёшь базовые сведения о портах и регистрах перечисленных выше подклассов. Проблема в том, что буквально все интерфейсы программируются по разному, поэтому однозначного ответа тут быть не может. Что-то общее есть между IDE, а вот AHCI вообще из другой оперы.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.05.2025, 08:03
Помогаю со студенческими работами здесь

Драйвер на ассемблере
Поставили цель написать курсовую. В качестве работы выступает драйвер для ОС Windows под ноутбук с...

Ввод числа ассемблерной вставкой (вызов scanf из ассемблерной вставки)
Здравствуйте! Задача: Напишите программу, в которой создается и заполняется натуральными числами...

Подскажите как перевести на язык ассемблер
Помогите перевести на язык ассемблер эту строчку k = ( k &gt;&gt;1 ) &amp; 0x70

Как создать процесс Windows на языке ассемблера?
вот недоделанный мой пример: TITLE (.asm) ;386 Include Irvine32.inc .data

Как сложить 2 числа на языке Ассемблера?
Напишите пожалуйста как сложить 2 числа в Ассемблере, допустим 2+3, и вывести на экран. И если не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru