добрй день. хотел бы написать загрузочную дискетку, которая бы заполняла жесткий диск нулями. подкиньте, пожалуйста литературы на эту тему. спасибо
Никакой конкретики. Итак, писать можно через BIOS - int 13h, причем можно через функции расширенной записи (много секторофф за раз). Плюсы: не нужно изучать спецификацию hdd/etc. Можно форматировать. Минусы - далее, но сразу: возможно специфичный драйвер лучше BIOS знает как работать с конкретным винтом - (возможно) быстрее (DMA?) и "наверняка". Если идти по пути "портов" то надо помнить что все резко усложняется - нужно знать специфичные для данного hdd команды - хотя ATA (если я правильно помню) команды поддерживаются многими винтами. Как узнать какие команды и в какие порты? Я предпочитаю не читать доков - просто снять лог обращения к портам и посмотреть в дизасме как драйвер hdd это делает вызвав запись в определенный сектор (win98 удобнее с Sice, но тут кому как нравиццо). Наверняка можно все это найти на специфичных форумах. В результате это будет набор in/out команд в регионе портов 170h..+0Fh (или 100h..). Не знаю но почти уверен что для чтения-записи идет работа через DMA - драйвер подготовит буфер и передаст через эти самые команды ввода-вывода контроллеру адрес физической памяти и размер для чтения или записи. Может быть прямое чтение или запись через ins/outs, но это скорее для старых винтов или в случае отсутсвия специфичного драйвера. Т.е. никаких принципиальных приемуществ у "портов" (кроме скорости) как бы нет... Однако если поговорить с людьми которые занимаюцца непосредственно винтами, то можно узнать такие вещи как форматирование стандартными командами через BIOS/ATA на самом деле никаких секторов не перетирает. Это баян, понятна. Далее винт имеет на самом деле резервные сектора - при выпуске на заводе винт на 1гиг на самом деле имеет емкость в несколько раз больше и по мере выщелачивания старых секторов модуль зашитый в винт делает ремаппинг и для пользователя ATA/etc команд винт выглядит по прежнему из тех же секторов. Тогда получаеццо что на самом деле на винте храниццо более одной копии одного сектора или как-то типа того. Кто сказал что при записи в сектор винтовый модуль делает то же самое у всех таких теневых копий? Встает вопрос о сырой работе непосредственно со всеми секторами винта. Тут уже надо знать так называемые заводские команды для каждого конкретного винта. Допустим какой-нить Segate Barracuda может иметь определенные команды на перезапись модулей которые гикнулись и в сервисе растерянно улыбаюццо. Такие команды не офишируюццо и они находяццо анализом технологических утилитов для каждого конкретного случая.
Низкоуровневого форматирования давно уже нет. Винчестер просто обнуляет все сектора и все. Команду я сейчас не помню, но можно посмотреть в стандарте. М.б. какие-то модели имеют возможность низкоуровневого форматирования, но такие команды будут специфичны для каждого устройства. А если нужно просто все обнулить -- int 0x13 легко справляется с задачей. Информацию по прерываниям можно прочитать в Ralf Brawn Interrupt List.
AJAJA 10 Лет назад в институте писал. Форматер через порты, правда, дискет. Форматировало все, на что ДОС овский format ругался track 0 invalid, а таких дискет дофига было в то время. Я бы прислал исходник Аквилле, но у меня он не сохранился. Разве что у кого из одногруппников, надо поспрашивать...
Друзья, откуда стока уверенности? Честно, удержаться не мог от смеха, когда читал, извините конечно :-' Вопще, работать с диском можно двумя способами. (лично я только два знаю 1. Самый простой, это BIOS(int 13h). Гугл в помощь! Если мало, любопытным советую поискать BIOS User’s Manual, производитель БИОСа не так важен, стандарты одинаковы для всех. 2. Не самый простой способ! Определенно для садомазо! %) Летим на http://www.t13.org/Documents/MinutesDefault.aspx?DocumentType=4&DocumentStage=2, выбираем любой понравившийся "AT Attachment", качаем, подробно изучаем и вперед и с песней писать свой драйвер на контролер харда! ) Естественно, появится необходимость узнать какой порт нам все-таки нужен и как же программно узнать где же в нашем железном ящике находится этот самый контролер. Птму придется снова лезть в Сеть и искать или просто описание конфигурационного пространства PCI, или, опять же для самых любопытных, полностью PCI-спецификацию, которую тоже придется изрядно помусолить. Вот, пожалуй, все, что мне известно по этой теме. Буду рад дополнениям, пожеланиям, предложениям.
fourty_fourty Уверенности о чём? О том, что низкоуровневое форматирование просто так не выполнишь? Но, простите, низкоуровневое форматирование -- это не очистка секторов диска и не создание на диске файловой структуры. Низкоуровневое форматирование -- это запись адресных маркеров, промежутков и прочей действительно низкоуровневой информации. Если эту информацию учитывать, то размер одного сектора будет отнюдь не 512 байт, а существенно больше -- тут тебе и прологи-эпилоги, и контрольные суммы, причём формат всей этой служебной дребедени зависит исключительно от контроллера диска (того, что стоит на винчестере, а не ATA/SATA/SCSI и т.д.). Конечно, общие принципы физической организации информации на дисках у всех производителей более-менее одинаковы (физика-то общая для всех), однако в частностях возможны серьёзные расхождения. Соответственно и действительно низкоуровневое форматирование могут выполнять лишь специальные утилиты, ориентированные на конкретные типы контроллеров, и никакие BIOSы и даже прямой доступ к регистрам ATA/SATA здесь не помогут (точней, прямой доступ поможет, но только если знаешь, что именно надо делать для данной модели диска).
SII Мой пост отвечает на первый пост автора, а не на то, че такое "низкоуровневое форматирование". Птму что про LLF вопще не нам говорить! Можно, конечно, начать бодаться из-за того кто больше знает про форматирование. Но если брать поправку на первый пост, то суть темы сводится к поиску описания способов логической(программной) работы с жесктим диском. И вопще, форумы длуя того и существуют, чтобы помогать дргим в решении вопросов общими усилиями, а не для того чтобы выяснять кто больше знает по предложенной теме!
SII Я делал проще. Сграбил диск-эдитором загрузочную записить и фат таблицу (первые несколько секторов) в файл. Потом через дма писал этот файл в начало дискеты. И никаких ошибок трэк 0 инвалид, драйверо доса автоматом при записи метит бэды, дискетой можно пользоваться