Як зробити дискети і перезаписати MBR


3

Я намагаюся зробити дискету з робочою файловою системою, щоб я міг протестувати завантажувач із 2 ступенями. Коли я намагаюся встановити дискету, а потім cpдругий бінарний код до неї, mountстає все нещасним. Ось такі дії я намагаюся використовувати:

dd if=/dev/zero of=floppy.img bs=512 count=2948
mkfs.vfat floppy.img
dd if=boot1.bin of=floppy.img bs=512 count=1
su -c 'mount -t msdos -o loop floppy.img /mnt'

dmesg | tail

[591461.669870] FAT: invalid media value (0x09)
[591461.669876] VFS: Can't find a valid FAT filesystem on dev loop0.

Відповіді:


3

Ви вивчаєте деякі проблеми із використанням набору інструментів POSIX для подібних матеріалів. Установка завантажувальної програми в VBR обсягу - це не проблема звинувачення в зображенні сектора, повного даних, у сектор № 0 із зображення. Ви повинні зберегти існуючий блок параметрів BIOS , справляючись з кількома варіантами BPB.

Інструменти, що постачаються з операційними системами, такими як MS / PC / DR-DOS, OS / 2 та Windows NT, знають про такі речі, як BPB. Їх різні sys, sysinstx, bootsectта інші інструменти знати , як речі повинні бути оброблені. Але якщо ви використовуєте такі інструменти POSIX, як ddвам доведеться вручну вказувати їм, які байти слід перезаписати в VBR, а які зберегти як є.

ms-sysтакож знає, як зберегти BPB, але він не має можливості застосувати власну програму завантаження. Перейдіть і запитайте його як нову функцію.


"запросити його як нову функцію" - Утиліта fdformat Solaris мала можливість встановити власну програму завантаження дискети.
тирса

fdformatУтиліта Linux не має, і Linux - це те, про що питає запитувач. fdformatУтиліта Solaris була замінена rmformat, яка не мала такої можливості, оскільки функціональність для форматування на високому рівні була передана mkfs_pcfs. mkfs_pcfsтакож є reserve=варіант.
JdeBP

2

Я насправді давно написав двоступеневий завантажувач дискети. Незважаючи на те, що можуть говорити різні технічні характеристики (від Microsoft або інших "експертів"), перший сектор дискети повинен відповідати стандартній дискети MS-DOS з Блоком параметрів BIOS, BPB. Повідомлення про помилку, яке ви бачите, схоже, вказує на те, що ваш "boot1.bin" не відповідає цій вимозі. Єдине, що ви можете дійсно змінити в секторі завантаження дискети близько 400 байт коду. Ви не можете налаштувати значення BPB з того, що MS-DOS або Windows використовує для дискети.

Незважаючи на те, що є значення, щоб вказати кількість секторів, які займає завантажувальний код, кожен BIOS та інше програмне забезпечення, з яким я стикався, очікує або допускає один зарезервований сектор для завантаження. Потрібні дві копії FAT, а потім перший сектор кореневого каталогу. Метод, який я використовував для зберігання вторинного завантажувача, полягав у тому, щоб важко виділити деякі сектори за кореневою каталогом, а потім позначити ці сектори як «погані» у FAT. Це здійснило наступні цілі:

  1. додаткові сектори, використовувані вторинним навантажувачем, знаходились у фіксованому місці на дискеті та відомій завантажувальній машині першого ступеня, яка мала їх читати / завантажувати.

  2. приховав вторинний завантажувач від користувачів.

  3. зробив вторинний навантажувач непридатним.

  4. дискета була корисною в DOS і монтувалася в Unix.

Дискети BTW мають сектор завантаження. Він не називається MBR, оскільки немає таблиці розділів.


Вам буде важко вказувати на те, де Microsoft, чи справді експерт, сказав, що BPB не використовується на дискеті формату FAT. Ніхто такого не сказав. І ви пропустили десять з половиною десятиліть операційних систем Microsoft, починаючи з DOS + Windows 95 OSR2 і зарезервувавши 32 сектори для коду завантаження (та блоків FSInfo). Думка, що прошивки не люблять нічого, крім 1 зарезервованого сектора, - це нісенітниця. Прошивки не хвилюються нічим. Щодо "інших програмних засобів": Як ви вважаєте, що існує -Rваріант для запитувача mkfs.vfat?
JdeBP

Я не сподіваюся, що хтось задокументує ярлики іншого програмного забезпечення, яке ігнорує значення в дискети BPB, з якою я стикався. Після розробки та впровадження багатоступенчатого дискета (що пішов у випуск та виробництво), який би працював на будь-якому ПК, я пропоную свій досвід у реальному світі, а не аналіз з читання специфікації.
тирса

Мої коментарі ґрунтуються на фактичному налаштуванні BPB, наприклад, резервування 4 секторів замість стандартного сектору 1 та бачення різних утиліт MS-DOS повністю ігнорують мою нестандартну специфікацію (тобто кореневий каталог все ще читався з жорстко кодованого місця). IIRC "Біблія MS-DOS" згадувала, що 2-й FAT не використовувався на дискеті; Я визнав це помилковим. Я ніколи не бачив дискети з 32 секторами для завантаження; чи ти? BPB також включає "логічні дискові диски" в розділи жорсткого диска, а також дискети. Використання великого завантажувального пристрою є лише на жорсткому диску, а не на дискетах.
тирса

Мені не подобається порушувати це на вашій дитині, але ваш "досвід у реальному світі" переважає реальний досвід мільйонів людей, які з радістю завантажили DOS + Windows 95 OSR2 та пізніші операційні системи з томів FAT з 32 зарезервованими секторами. Це теж переважає моє. Наразі у мене на одному з моїх машин є форматний завантажувальний диск у форматі FAT з 32 зарезервованими секторами. Ідеї ​​про те, що це характерно для жорстких дисків або про те, що їх цікавлять прошивки, просто помилкові, і це, очевидно, людьми, які використовували DOS + Windows 95 OSR2 або новішу версію.
JdeBP

І перестаньте сприймати те, що в Біблії MS-DOS сказано як остаточне з цього питання. Якщо це «Біблія MS-DOS», яку я маю, це визначає широкомасштабне впровадження обсягів FAT з 32 зарезервованими секторами Майкрософт протягом якихось п'яти років. Єдині інструменти, з якими я стикався, які не можуть обробити такі розділи FAT, були створені за роки до DOS + Windows 95 OSR2. Сучасні інструменти можуть впоратися, як і справді, старі інструменти, написані людьми, які з самого початку зверталися до існування зарезервованого сектора поля БПБ і ніколи не стикалися з проблемою, коли значення поля почало бути чимось іншим.
JdeBP

1

Хочу написати самостійну відповідь на це. По-перше, в Linux почніть з ваших двох інструкцій:

dd if=/dev/zero of=floppy.img bs=512 count=2948
mkfs.vfat floppy.img

Це створює сумісний з DOS4 / OS2 диск FAT12 з розширеним блоком параметрів BIOS, як описано у Вікіпедії "Дизайн файлової системи FAT"

Перші 3 байти "eb 3c 90" є машинною мовою для:, JMP 3E \ NOPтобто пропускають через блок параметрів BIOS і починають виконувати код у зміщенні байтів 62 (десятковий) [3E = 3C + 2 (база 16) = 62 (база 10) ].

Із зміщення 62 наступні 378 байт - це ваш запис завантажувача. Програма за замовчуванням роздруковує повідомлення, чекає ключа, а потім перезавантажується.

Створіть файл під назвою myBoot.bin з двійковою програмою 378 байт x86.

Це лише 378 байт ... Ви МОЖЕТЕ це зробити, але якщо вам абсолютно потрібне початкове місце, використовуйте команду:

 dd bs=1 count=378 of=myBoot.bin if=floppy.img skip=62 conv=notrunc

Нарешті, перезапишіть запас MBR дискети за допомогою власної програми myBoot.bin:

dd bs=1 count=378 if=myBoot.bin of=floppy.img seek=62 conv=notrunc

Тепер ви успішно створили дискети та перезаписали завантажувальну програму за замовчуванням.


Деякі формати диска резервують 6 байтів, починаючи зі зміщення 220 (шестигранник постійного струму) для додаткової підписи часової позначки або оригінального підпису завантажувача OEM. Ви можете це дослідити далі у Вікіпедії "Master boot record"
ABridgeTooFar

Я маю зробити вигук до Ніка Блонделла, автора "Написання простої операційної системи - від нуля" для чудового обговорення, яке може перенести читача з цієї теми на "повністю" функціональний O / S. Я також пропоную читачам ознайомитись з бібліотеками мікропрограмного забезпечення UEFI, які спрямовані на модернізацію та забезпечення завантажувального процесу.
ABridgeTooFar
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.