2014-01-21 4 views
1

Я имею в виду учебное пособие BrokenThorn по разработке ОС, и в настоящее время я нахожусь в главе о написании загрузчика первого этапа и загрузке второго этапа.Имя файла загрузчика второго этапа не работает с нижним регистром

Я написал весь код и столкнулся с авариями при запуске его с помощью qemu. После некоторой отладки я узнал, что проблема связана с именем загрузчика второго этапа, который я читаю, перебирая записи корневого каталога.

Если я использую имя файла для второго этапа как INITKRNL.BIN, все работает нормально. Но если я использую initkrnl.bin (при этом разница будет только в случае имени), он сработает.

Я также напечатал имя, которое читается из корневого каталога. Для имени верхнего регистра он читает только INITKRNL.BIN. Для имени нижнего регистра он читает несколько букв имени и некоторых случайных символов.

Почему вопрос с именем файла имеет значение, и в чем причина этой разницы?

Примечание: Я использую Ubuntu 13.04 в качестве среды разработки. Я отформатирую дискету с файловой системой VFAT с помощью mkfs.vfat.

+0

Я не знаю, в какой среде вы используете это, но не большинство файловых систем в наши дни чувствительны к регистру? (даже NTFS, хотя API Win32 предпочитает рассматривать его как нечувствительный к регистру). – Michael

+0

@Michael: Linux. Я загружаю дискету, отформатированную в файловой системе VFAT. – Cygnus

+0

FAT12 хранит имя файла в верхнем регистре, а '.' не сохраняется (пробел добавлен до 8, если «имя» меньше 8). –

ответ

0

Фактически он хранится в виде строки 11 символов в формате 8.3 (8 символов для имени файла, 3 символа для расширения). Таким образом, в плунжере это будет INITKRNLASM.

Кроме того, я бы рекомендовал не использовать файловую систему VFAT на флоппи-диске и вместо этого использовать файловую систему FAT12, так как она проще и удобнее для носителей такого размера.

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