Написание драйвера ATA LBA28 перепутано с LBA48
В настоящее время я пытаюсь заставить LBA работать для моего драйвера ATA, но у меня есть проблема.
мой identify
функция возвращает ОК и word 83;bit 10
возвращенных идентификационных данных установлено, поэтому мое устройство поддерживает LBA48. Но когда я пытаюсь получить общее количество секторов LBA48 (слова конфигурации 100-103), это дает мой ноль. В виртуальной машине у меня установлено 1 ГБ диска, но это поле все еще равно нулю. Я также пытался получить количество секторов LBA28 => это правильный.
Интересно, что когда я распечатываю heads * cylinders * sectors_per_track
, значение почти такое же, как значение всех секторов LBA28, расположенных на словах 60-61. Это 2097152
для всего LBA28 и 2096640 для h * c * s
, Разница этих двух значений 512
,
Кто-нибудь знает, что я делаю не так? Есть ли другой способ получить размер жесткого диска?