2016-12-19 3 views
0

Я создаю базовый MBR, который читает таблицу разделов и загружает первый сектор загрузочного раздела. Меня путают режимы адресации CHS и LBA. Я прочитал в учебнике, что CHS более или менее не используется, за исключением соображений совместимости. Итак, я решил использовать LBA (INT 13h расширения). Чтобы загрузить сектор диска, я должен прочитать значение CHS из таблицы раздела этого раздела. Только тогда я смог бы преобразовать его в LBA и сохранить его в «Disk Address Packet».Как получить доступ к информации CHS из таблицы разделов MBR?

Мое сомнение в том, что CHS в таблице разделов составляет по 1 байт. Должен ли я принимать это значение напрямую и превратить его в LBA (или) я должен сначала преобразовать его в,

Cylinder = 10 bits 
Sector = 6 bits 
Head  = 8 bits 

, а затем преобразовать его в LBA?

Примечание. Мой MBR должен иметь доступ к секторам как на HDD, так и на USB - это мотив.

ОС: Ubuntu

Assembler: Газ

+0

Да, вам нужно сделать 10 бит/6 бит вещь. См. [Osdev wiki] (http://wiki.osdev.org/Partition_Table). – Jester

+0

Опять же, окончательный CHS будет 1 байт каждый ri8? –

ответ

1

Partition table entries используют CHS только для обратной совместимости с очень старыми операционными системами.
Они также имеют поля для LBA адрес:

 
 
                                        Format of the MBR partition table

 
 

Обратите внимание, что такое использование lba32, таким образом, существует ограничение на размер раздела и позиции. Цитирование Википедия:

Поскольку блок-адреса и размеры, хранятся в таблице разделов в MBR с использованием 32 бит, максимальный размер, а также высокий начальный адрес раздела с помощью дисков, которые имеют 512-байтных секторов (фактическая или эмулируется) не может превышать 2 байта TiB-512 (2,199,023,255,040 байт или 4 294 967 295 (232-1) секторов × 512 (29) байтов на сектор). [2] Ослабление этого ограничения мощности было одной из главных мотивов для разработки GPT.

То же самое верно и для адресации CHS.
ОС, которые используют поля CHS, имеют ограничение около 8 гигабайт.
Итак, если вы хотите быть совместимыми с ними, вам нужно оставаться под этим ограничением.


Формула для преобразования LBA < -> CHS можно легко получить или найти в Интернете, вы можете думать в перспективе чисел сектора (т.е. LBA) и конвертировать в CHS при создании записи раздела (или использование по умолчанию 1023, 255, 63 для слишком большой перегородки для CHS).

Нижняя часть линии, используйте поля LBA.
Или за GPT.

+0

Итак, чтобы загрузить сектор с жесткого диска (скажем), могу ли я использовать «начальный сектор» таблицы разделов с помощью INT 13h расширений? Насколько мне известно, значение «начального сектора» эквивалентно стартовому значению LBA раздела ri8? –

+0

То же самое относится и к загрузке с помощью ручек Pen? (Я имею в виду, что все они могут использовать режим адресации LBA, если BIOS поддерживает его правильно?) –

+0

@PantherCoder Да, INT13h абстрактно детали конкретного устройства, поэтому вы должны просто указать номер диска и адрес сектора. Он предлагает стандартный интерфейс. Вы должны использовать расширения INT13h, хотя они лучше. –

Смежные вопросы