1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

Снова про MBR: загрузка с USB/CD

Тема в разделе "WASM.NT.KERNEL", создана пользователем SunGod, 20 сен 2009.

  1. Govnodozer

    Govnodozer New Member

    Публикаций:
    0
    Регистрация:
    14 окт 2009
    Сообщения:
    11
    Да я из-под Линукса пишу, там же флэха как файл представляется. Делаю
    cat boot.img > all.img
    cat kernel.img >> all.img
    cat all.img > /dev/sdb

    Возможно, не правильно, но обычно всегда пахало =)
    Кроме того, если бы там было что-то не то записано, то должно бы было всё равно считать, но уже завалиться на исполнении ядра...
    Просветите, если не так =)
     
  2. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    231
    Govnodozer
    Ну я даже не знаю
    Может быть все дело в формате img.
    Попробуй как нибудь по другому в другом формате, другой прогой...
    Мб с флешкой что то попробуй на другую записать.
     
  3. Govnodozer

    Govnodozer New Member

    Публикаций:
    0
    Регистрация:
    14 окт 2009
    Сообщения:
    11
    Не, дело не в формате img. Оба файла бинарніе, формата никакого не имеют, а img - всего лишь расширение. Так что дело не в этом, точно.
    Флэшку тоже вроде раньше использовал под файлы, нареканий не вызывала... =(
     
  4. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    231
    Govnodozer
    Вот еще не нашел в товоем коде
    mov dl , 80h ; читать с 1 диска
    перед прерыванием 13h
    попробуй поставить
     
  5. Govnodozer

    Govnodozer New Member

    Публикаций:
    0
    Регистрация:
    14 окт 2009
    Сообщения:
    11
    Смысла нет. dl после загрузки содержит номер диска, с которого считался загрузчик. И мой БИОС не из тех, которые этим правилом пренебрегают.
    Проверяется вот этими строчками:
    Код (Text):
    1.     movb        %dl, %bl
    2.     call           print_num
     
  6. Govnodozer

    Govnodozer New Member

    Публикаций:
    0
    Регистрация:
    14 окт 2009
    Сообщения:
    11
    P.S. 0x80 в dl помещать тоже пробовал =)
     
  7. Quatre_R_Winner

    Quatre_R_Winner Member

    Публикаций:
    0
    Регистрация:
    10 ноя 2008
    Сообщения:
    66
    Не факт что в dl будет номер диска после загрузки. Этот способ определён только для el torito - тобишь загрузки с CD\DVD. Биосы доэльторитовских времён про это не знают, да и примерно 5%-10% современных этой схемы не придерживаются. С флэшками закладываться на dl не стоит. Я про это тут уже писал.
     
  8. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    неправда
     
  9. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    mov dl,80h пошло от кривой M$ MBR. Они, видимо, тоже перестраховывались. Сравнительно недавно придумали, как выкрутиться из этой нелепой ситуации. Т.к. практически всегда в dl помещалось значение 80h не как константа, а как значение байта active flag активного раздела, то теперь этот байт для активного раздела второго диска может иметь значение 81h, третьего диска 82h и т.п. А признаком активности раздела по сути считается установленный старший бит этого значения.
     
  10. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    А еще BIOS часто загрузочному диску присваивает номер 80h, особенно если он первый в boot sequence.
     
  11. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Попробуй в бутсекторе сохранить либо BPB в начале, либо PT в конце.
     
  12. Quatre_R_Winner

    Quatre_R_Winner Member

    Публикаций:
    0
    Регистрация:
    10 ноя 2008
    Сообщения:
    66
    Не совсем понял что именно неправда. Биос помещает в dl номер диска в случае eltorito для 40h+ функций управления эмуляцией. Большинство современных биосов делают так же и для остальных типов загрузки, НО НЕ ВСЕ БИОСЫ. Я долго собирал тестовые данные по этому поводу. К примеру какая то мать годичной давности (От гигабайта, модель и версию не помню сейчас) при загрузке с флэшки в режиме харда в dl выдаёт 0 хотя должен быть 80h (я уж не говорю про то что разные функции видят по одним и тем же номерам диска разные реальные диски - биос вообще там корявый). А вот пример доэльторитовской матери - i486 DX-2 PhoenixBIOS v. 1.0.9.AC0 при загрузке с флопа в dl даёт 0Ah хотя сам диск 0. MBR как номер диска действительно считают метку активного раздела а сектора fat12 fat16 fat32 ntfs берут номер диска из BPB. Но никто из них не судит по изначальному dl. Значение в нём если и правильное - то обычно случайное.
     
  13. Quatre_R_Winner

    Quatre_R_Winner Member

    Публикаций:
    0
    Регистрация:
    10 ноя 2008
    Сообщения:
    66
    Попробуй юзать старые функции а не новые EDD. На корявых биосах может быть такая весчь: для диска к примеру 80h функия 02h читает с флэшки а 42h функция читает с винта.
     
  14. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Неправда то, что передача номера загрузочного диска в dl опеделена только для эль'торито. В эль'торито просто не стали противоречить тому, что было до его появления. Это существует с давних времен. И хотя действительно далеко не во всяком описании BIOS присутствует информация об этом, разработчики BIOS должны учитывать эту возможность. BIOS, в которых это не учитывается, считаются содержащими баг. Хотя я не возражаю, что, быть может, изначально эта возможность появилась только из-за того, что значение в dl оставалось после чтения загрузочного сектора где-то в недрах BIOS. Кстати, El'Torito - не единственная спецификация, где зафиксирована передача данного параметра. Есть еще BIOS Boot Specification. Правда, в M$ предпочитают игнорировать эту возможность. Скорее всего это происходит именно из-за существования BIOS с багами. С флоппиками совсем другая история. Изначально BIOS мог грузиться только с первого флоппика (как в общем-то когда-то и только с первого харда), поэтому загрузчики для них писались из расчета, что продолжать загрузку нужно с девайса с dl=0. Кстати, потом стало возможным выбирать один из двух флоппиков для загрузки, но так как все загрузчики использовали чтение девайса с dl=0, в BIOS ради совместимости ввели опцию, которая могла менять номера первых двух флоппиков. Я кстати даже для флоппиков использую значение, передаваемое в dl, но подменяю таблицу параметров дискеты для ускорения доступа только в том случае, если в загрузчик в dl был передан 0. Проблемы с опцией USB-HDD есть у многих BIOS. Это отчасти связано с тем, что она появилась после USB-FDD и USB-ZIP. Хотя сейчас почти все BIOS дефолтом выставляют именно ее.
     
  15. Quatre_R_Winner

    Quatre_R_Winner Member

    Публикаций:
    0
    Регистрация:
    10 ноя 2008
    Сообщения:
    66
    Там это описано не как стандарт а как опциональная рекомендация.
    В любом случае факт остаётся фактом - закладываясь на тот же dl есть немалый риск что загрузчик не будет работать, причём по закону подлости в самый неподходящий момент. Со мной так и было.
     
  16. Vic3Dexe

    Vic3Dexe New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2009
    Сообщения:
    53
    Хм.. ну и где тогда бут-сектору брать номер драйва? Только НЕ из BPB, там может лежать что угодно - это раз, второе - для сменных носителей параметр в BPB вообще теряет смысл (дискету с 0 в ВРВ я могу сунуть во флоп А или В).
    А в BIOS Boot Specification как раз и написано, что для соответствия данному стандарту, для поддержки загрузки с разных драйвов и вообще по правилам хорошего тона нужно получать dl от биос, а в случае неудачной загрузки исполнять инт18, а не инт19, как некоторые =) Инт18 к теме отношения не имеет, просто попутно вспомнил.

    2Govnodozer
    А что, для флопов EDD работает? о_О

    О, плиз, объясните, а зачем??? Это реально надо (выставлять head settle time + bytepersector), или это пережиток доса/биоса/флопов времен АТ?
    Испытывал неоднократно - все работает и без этой подмены. На кой место в буте тратить?
     
  17. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    Vic3Dexe
    Это делать надо, если вы хотите, чтобы Ваш код заработал на случайно взятой машине в кокой-нибудь организации (во многих правительственных еще даже от пентиумов не отказываются). А то будет так, что вы придете, скажите, что за пару минут сейчас все наладите. И тут, в самый ответственный момент, загрузчик и не предполагал, что биос это прошловековой машины забыл установить dl. Далее идут разбирательства, извинения и попытки понять в чем же дело.
     
  18. Vic3Dexe

    Vic3Dexe New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2009
    Сообщения:
    53
    max7C4
    Ммм.. Это вы о чем? О номере драйва? Тогда я не понял, что именно надо делать =)
    Я понимаю, что биос может ступить и забыть выставить dl, но этот момент можно отследить и принять меры. Я не понимаю, почему из-за отдельных несознательных я должен игнорировать всех и брать драйв непонятно откуда. Пример я приводил - дискета отформачена с 0 в ВРВ. Я прихожу в жутко военную организацию, а у них в 386 во флопе А застряла печенька. Приходится грузится с В, а драйв мы берем из ВРВ. Печенька, понятное дело, не грузится.
    Возможно, раньше можно было брать dl из ВРВ, т.к. биосы умели грузиться только с первого FDD/HDD, соотв. dl=0/80h, что и прописывалось во всех дискетах и винтах. Сейчас ситуация другая, поэтому dl биоса критически важен.
     
  19. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    Vic3Dexe
    Но большинство даже новых биосов в dl оставляют всякую фигню.
     
  20. Vic3Dexe

    Vic3Dexe New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2009
    Сообщения:
    53
    max7C4
    Вы посты до конца читаете? =)
    Еще раз - я не спорю, что в биос может прислать фигню, я спрашиваю - какая вменяемая альтернатива, кроме ВРВ и жесткой фиксации 0/80h?