Что такое код biosdisk


Содержание

biosdisk

Эта функция не определена стандартом ANSI С.

Функция biosdisk() выполняет дисковые операции на уровне BIOS, используя прерывание 0x13. Эти операции игнорируют логическую структуру диска, в том числе файлы. Все операции выпол­няются с секторами.

Диск задается параметром drive, где 0 соответствует диску А, 1 — В и т.д. для гибких дисков. Первый жесткий диск соответствует 0x80, второй — 0x81 и т.д. Часть диска, с которой проводят­ся операции, задается параметрами head, track и sector. Функция возвращает результат операции. Подробности можно найти в техническом описании PC, в разделе о дисковых операциях уровня BIOS. Надо иметь в виду, что прямое управление диском требует глубокого знания как аппарату­ры, так и DOS. Лучше не пользоваться таким подходом, за исключением особых ситуаций.

Что такое код biosdisk

Свои вопросы и просьбы о помощи в теме старайтесь формулировать согласно Шаблону оформления поста с просьбой о помощи .

  • Опыт получения и применения кода разблокировки на аппаратах с EMUI_9 «из коробки».
  • Причины почему код полученный из официальной базы HUAWEI НЕ разблокирует загрузчик
  • На новые флагманы P20/P20pro/Honor10/Mate20Lite/Mate20/Mate20pro код разблокировки загрузчика теперь получить нельзя никак, от слова «совсем». Будем ждать, возможно с помощью альтернативных методов возможность появится, но не факт. можно получить по методам 7, 8, 9, 10, 11 из «Альтернативных методов».
  • На аппаратах(не флагманах), выпущенных в 2020 году с ОS Android_8 на борту, можно получить платно за 4 евро, но для этого прошивка должна быть с патчем безопасности от 1_апреля_2020г или более ранняя, иначе тулзы по получению кода будут выдавать ошибку и код с помощью них вы не получите. В таком случае придется обращаться к способам подороже.
  • На аппараты, которые были выпущены с завода с операционной системой Android_7 и обновившиеся на Android_8 в 2020 году, код с помощью HCU или DC-Unlocker можно получить только после отката с OREO на Nougat.
  • Код разблокировки загрузчика получается один раз и навсегда, срока годности он не имеет. Однако следует знать, что получение кода через платную утилиту приводит к тому, что код этой утилитой перезаписывается. Если, вдруг Вы получили код платно, а потом решили получить официально на сайте, то код с сайта не подойдет. То же касается и телефонов из Китая(алиекспресс, гирбест и пр.) перешитых продаваном на «глобальную» прошивку. Для того чтоб получить код на китайский аппарат нужно гонять 14 дней сервисы HUAWEI, но продаван этого не делает и получает код платно, в итоге, даже, если вам после этого удастся получить код на сайте, то он не подойдет, ибо был перезаписан платной утилитой.
  • По поводу гарантии : Факт1, Факт2. Простыми словами: сама разблокировка с гарантии не снимает, но кто поручится, что это не вы сами напортачили и тел сломался? Правильно — никто, поэтому при обращении в СЦ с разлоченным( Phone Unlock ) или релоченным( Phone Relock ) загрузчиком будьте готовы к отказу в гарантийном обслуживании. Как же сделать состояние Phone Lock ? Этот вопрос смело можете задать в теме по прошивке Вашего аппарата, ибо здесь тема по разблокировке, а не блокировке загрузчика.
  • На EMUI 4.1 и выше при разблокировке загрузчика происходит полный сброс аппарата к заводским настройкам. Это связано с тем, что google ввел такую защиту — от «угона» данных. Для EMUI 4.1 есть лекарство, спасибо автору
    Также каждый раз при старте системы будут вылезать желтые букавки, сообщающие о том, что загрузчик разблокирован, но это лечится.
  • При вводе команды на разблокировку выдает ошибку «Command not allowed», что мне делать? — Ответ находится тут. А если у Вас «китаец», то еще и тут

В телефоне включаете режим «Для разработчиков» — для этого в Настройках — О телефоне много раз нажимайте на «Номер сборки»;
Затем в Настройки-Для разработчиков включите «Отладка по USB», а также «Разрешить заводскую(OEM) разблокировку» (актуально для обладателей телефонов с международными (некитайскими) прошивками версии EMUI 4.1 и выше).

Установите adb на ПК и все необходимые драйвера из темы на форуме для Вашего устройства.
Драйверы в диспетчере устройств должны выглядеть так

  • HUAWEI P6-U06
  • Обход блокировки Bootloader’a для
    Huawei MediaPad T1 8.0
  • Huawei MediaPad X2 — Инструкция по разблокировке загрузчика и получение прав ROOT
  • Huawei Y5 II LTE — Полезная информация
  • Honor 4X (Che2) — Информация для обладателей Белорусских Che2-L11 залоченных под МТС.
  • Если у Вас G630 с такой или такой проблемой не стоит писать в теме сообщения с просьбой о помощи. Бесплатного решения нет. Все посты на эту тему будут считаться оффтопом и безжалостно удаляться. Если у кого-то есть решение данной проблемы поделитесь пожалуйста! Мы обязательно поправим данную инфу, а пока так

Сообщение отредактировал Abbat1985 — 17.09.19, 14:33

Платный метод разблокировки загрузчика. Все делаем на свой страх и риск. Вся ответственность за выполнение описанных действий полностью на ваших плечах.

И так. Способ получения кода разблокировки бутлоадера я нашел. И таки получил.

Пункт 1. Сперва наперво я с офф сайта скачал програмку Dc — unlocker 2. Последнюю.

Либо сама програмка через которую все делал

Пункт 2. В програмке, в настройках, выбираем русский. 1) В *выберете производителя* выбираем произвоидетя телефона и оставляем автоопределение что чуть ниже 2) и делаем как как я обвел с номером 2(оно должно появиться).

Пункт 3. Должна пойти установка драйверов. Но вот беда. Не все ставятся. :happy: качаем и устанавливаем.(если у кого стоит то должны установиться все)

Запускаем и соглашаемся со всем что просит програмка, а попросит только запуск проги на телефоне.

Пункт 4. Когда запустится то переходим в dc-unlocker2client. Там уже настроеное и нажимает на лупу, т.е. поиск телефона. если все сделали как описал то должно быть типо такого:

.
Пункт 5. Далее в dc-unlocker2client жмем *разблокировать* и *читать код бутлоадера*. В окошке выдаст что не введено имя пользователя.

Пункт 6. Нажимаем * О программе* и *купить кредиты*. (Я опишу все на своем методе через вебмани. У кого то может и другие кошельки есть. Как и что с ними, я без малейшего понятия.) Регистрируем вебмани на свой номер телефона. Если честно, я не знаю как он регистрируется так как взял уже готовый. Но должен регистрироваться то ли на мыло, то ли на намер телефона. То ли на то и то. Или же если только на мыло то нужно обязательно подтвердить свой телефон в настройках вебмани. Я через Киви перевел около 500 рублей на вебмани. Потом конвертировал их в доллары. (Сколько точно нужно указывается в оплате на сайте программы). На офф сайте программы сперва выбираем метод оплаты. (вебмани) заполняем строки и ставим 4 кредита. (Для зачитывания кода бутлоадера нужно ровно 4 кредита. А это в свою очередь 4 евро). Нам нужно только 4 кредита для считывания кода бутлоадера. Ну, Вы конечно можите кинуть сколько хотите. Там можно еще и разблокировать через dc-unlocker2client. Я не стал тратить лишнее, так как это можно сделать и бесплатно методом в шапке. Заполнили? Жмем *Confim*. Далее жмем *Buy* Вводим свои данные от вебмани. Далее получаем код оплаты через смс платно, или через эмэйл — бесплатно. Я выбирал бесплатный метод. В самом вебмани ищем настроки и активируем метод который просит при вводе через майл. Так же может попросить активировать там что то в настройках Вебмани. Делаем как просят. Обновляем страничку оплаты или идем назад а потом снова на эту страничку. ТАк как бесплатный метод активировался только после этого. Должен появиться QR код и надпись *вопрос* с окошком чисел и нам нужно ввести ответ. Там где то написанно какую программу надо установить. Называется она *E-NUM*. Я скачал в плей маркете. При входе в нее у меня попросило код подтверждения. Оно прилетает на номер телефона которым регистрировали вэбманей. Он состоит из 7 чисел. Ну по крайней мере у меня так. Вводим его и следом скачиваем с плей маркета *Barcode Scanner*. Через програмку сканируем QR код и получаем тот самый ответ в виде чисел. (Сканируем через первый пункт в програмке). Вводим ответ. Денежки прошли. На мэйл должно придти письмо с логином и паролем. Открываем dc-unlocker2client, идем в *сервер* вводим логин и пароль и жмем *Проверить логин*. В окошке проги высвятится что то там и будет написано 4 кредита. Если так то все получилось. Если нет, ищем ошибку или что не сделали.

Теперь имеем 4 кредита. dc-unlocker2client надеюсь не закрывали? Если нет, делаем пункт 2 и 4. Далее идем в*Разблокировка* и жмем *Читать код бутлоадера* После чего выскочит что то типо:

AterLux › Блог › UART-Бутлоадер для AVR размером 512байт

Иногда приходится делать схемки на МК, которые ведут обмен с компьютером посредством универсального последовательного порта (UART). Но кроме передачи разных настроечных параметров, было бы полезно этот самый порт использовать для обновления прошивки. Во-первых не нужен будет ни разъём ISP, ни программатор для внесения мелких исправлений, во-вторых сам процесс значительно упрощается, можно даже доверить пользователю загружать новые прошивки.

Для этого в микроконтроллерах предусмотрен так называемый загрузчик — бутлоадер (boot loader). Это изначально зашитая маленькая программа, располагающаяся где-то в конце флеш-памяти, которая может установить связь с внешним компьютером и загрузить обновление основной прошивки по любому каналу связи.

Я уже делал экзотические бутлоадеры для обновления прошивки по радио-каналу, через nRF24L01, или через wi-fi, но схемы подключающиеся по простому UART встречаются довольно часто, да ещё пару таких схем нарисовались в голове в планах на разработку.

Поэтому я решил сделать универсальный компактный бутлоадер, который покроет большинство моих нужд.

Что значит универсальный? Это значит, что для адаптации его к очередной схеме на МК, нужно будет изменить пару констант и перекомпилировать. В его коде учитываются особенности разных МК, например, ATmega8 и ATmega88, у которых разительно отличается расположение регистров: например, регистры USART у ATmega8 находятся в нижней части пространства регистров, и доступ к ним осуществляется через in/out, в то время как у 88 и ему подобных эти регистры доступны только через их отображение в адресном пространстве, через lds/sts.

Итак, представляю результат моей разработки: ассемблерный код бутлоадера, который компилируется в не более чем 512 байт, работает почти на всех МК из семейства ATmega от 8 до 32кб (у МК с менее 8кб нет бутлоадера, а более 32кб — бутлоадер минимум 1кб). Главное, что работает с моим любимым семейством: ATmega88PA, 168PA, 328P

При сбросе или старте микроконтроллера, сначала запускается программа бутлоадера.
Бутлоадер проверяет наличие условий на принудительный запуск программы загрузки. Таких условий три:
1) если управление на программу бутлоадера было передано из основной программы;
2) если загрузка прошивки не была завершена должным образом;
3) если при запуске выполняется некоторое внешнее условие (определённый логический уровень на одной из ножек, или перемычка между парой ножек).

Чтобы узнать, откуда было передано управление, бутлоадер смотрит на содержимое регистра MCUCSR (или MCUSR в некоторых МК). В этом регистре хранится информация о том, что привело микроконтроллер к перезагрузке: низкое напряжение, сторожевой таймер, сброс через ножку RESET, включение питания, или JTAG. Если содержимое этого регистра равно нулю, значит переход был осуществлён из основной программы, т.е. программа либо сознательно вызвала бутлоадер, либо она поломана и адрес исполнения сам докатился до бутлоадера. В любом случае, нулевое значение — это сигнал, чтобы не переходить к основной программе, а включить режим загрузки и ожидать новой прошивки по UART.

Если же оказалось, что содержимое этого регистра было не нулевым, то его содержимое обнуляется. На случай, если основной программе зачем-то нужно будет изначальное значение этого регистра, оно сохраняется в регистре GPIOR0, а на МК где этого регистра нет — в первой ячейке SRAM памяти (как правило, это ячейка с адресом 0x0100)

Одна из ячеек (обычно — самая последняя) энергонезависимой памяти (EEPROM) отводится для хранения маркера об успешном окончании процесса прошивки. Когда начинается процесс прошивки, значение этой ячейки сбрасывается — в неё записывается 0xFF. Когда процесс прошивки завершён, то в неё записывается определённое значение. В зависимости от настроек, это делает либо сам бутлоадер, либо основная программа самостоятельно. При старте бутлоадер считывает значение этой ячейки, и если оно не равно заданному значению, то включается программа загрузки прошивки. Этот контроль можно отключить.
Возможность установки этого значения самой программой может быть полезна, чтобы обеспечить дополнительный контроль. Во-первых программа может определить что она была обновлена и выполнить некоторые действия (например, изменить сохранённые параметры должным образом), во-вторых запись значения в эту ячейку программа может осуществить после специальной команды от компьютера, тем самым позволяя лишний раз убедиться, что загруженная прошивка правильно работает и принимает команды с UART-порта, а значит позволит вызвать бутлоадер штатным образом.

И, наконец, третий контроль — проверка логических уровней на входе. Позволяет принудительно запустить бутлоадер после включения питания или сброса, путём удерживания специальной кнопки, или установки перемычки. Этот контроль может быть отключен, либо работать в одном из четырёх режимов:
1) низкий уровень на входе с включением подтягивающего резистора. На указанном входе включается подтягивающий резистор, и проверяется, что логический уровень остаётся низким в течение некоторого времени. Эта опция для типичного подключения кнопки.
2) высокий уровень — аналогично, но проверяется высокий уровень и подтягивающий резистор не включается. Должен существовать внешний стягивающий резистор.
3) Перемычка между двумя входами. Поочерёдно на двух входах включаются либо подтягивающие резисторы, либо выводится низкий уровень и замеряются логические уровни. Если изменение уровней свидетельствует о наличие перемычки между ними, то запускается загрузка прошивки. Эта опция полезна, если особенности подключения входов изначально не удаётся определить.
4) Низкий уровень на двух входах. Аналогично режиму 1, на обоих входах включаются подтягивающие резисторы, низкий уровень должен определятся на обоих входах в течение нескольких замеров подряд.

На деле, все эти проверки проходят практически мгновенно и не задерживают переход к основной прошивке.

Кроме того, есть возможность включить индикацию работы миганиями светодиодов.

Если какой-то контроль стрельнул, и переход к основному ПО не произошёл, то бутлоадер включает UART и ждёт команды.

Команд всего три:
BLST — вход в режим программирования, эта команда может быть выполнена в любой момент и начинает процесс загрузки сначала.
BLPG — запись страницы. Эта команда не может быть выполнена, если не выполнялась BLST.
BLXT — завершение процесса прошивки (если он был начат) и переход к основному ПО.

Запрос: 0x42 0x4C 0x53 0x54 (BLST)
Ответ: 0x62 0x6C 0x73 0x74 (blst)
После 4х символов blst в ответе следуют 16 байт, первый из которых указывает размер страницы в словах (т.е. парах байт), второй — количество страниц, доступных для прошивки (т.е. размер флеш-памяти в страницах, не считая самого загрузчика), а последующие 14 байт — это произвольная строка, идентифицирующая схему, которая может использоваться для предотвращения попыток загрузить неподходящую прошивку.

Запрос: 0x42 0x4C 0x50 0x47 (BLPG)
Ответ: 0x62 0x6C 0x70 0x77 (blpg) — если страница успешно загружена;
либо: 0x62 0x6C 0x65 0x72 (bler) — если не была вызвана BLST, неправильный номер страницы, или не совпал контроль.
Команде загрузки страницы должен предшествовать вызов BLST
— номера страниц должны идти по порядку и начинаться с нуля
— данные страницы. Количество данных точно равно размеру страницы в байтах (ответ blst возвращает её в словах, т.е. нужно умножить на 2)
— это CRC с полиномом x^8 +x^7 +x^6 +x^3 +x^2 +x +1 (полином выбран из списка users.ece.cmu.edu/

Илон Маск рекомендует:  Что такое код imagecreatefromgd2

koopman/crc/crc8.html) по всем байтам в поле data, от старших битов к младшим. Инициализируется значением 0xFF (способ расчёта контрольной суммы изменён 24.09.2020):
cc = 0xFF;
for (i = 0; i

Все необходимые настройки задаются в inc-файле (по умолчанию default_definitions.inc)

HARDWARE_ID — это просто строка из ровно 14 символов, которая возвращается на запрос BLST и позволяет идентифицировать схему. Рекомендую составлять её из имени автора и названия схемы, например: «VPupkinMigalka» (убедитесь, что символов ровно 14)

F_CPU — частота МК. Здесь должна быть указана действительная частота, т.к. через это значение вычисляются настройки скорости для модуля USART.

UART_SPEED — скорость обмена по UART, например 9600. Следует помнить, что далеко не все скорости точно могут быть выдержаны модулем USART, действительная скорость будет несколько отличаться. В коде настроены макросы, которые проверяют различие действительной и заданной скорости, выдадут предупреждения если разница более 2,1%, 3%, и прервут компиляцию, если разница более 4,5%.

UART_2X — включние опции 2X модуля USART
Подробнее об опции 2X и скоростях UART читайте в документации на МК.

UART_PARITY — режим контроля чётности: 0 — бит чётности отсутствует; 1 — нечет (odd), 2 — чёт (even)

UART_STOP_BITS — количество стоповых бит передатчика: 1, или 2

BLINKER — включение мигания светодиода, значения 1 (включено), или 0 (отключено).
Если опция включена то необходимо определить BLINKER_DDR, BLINKER_PORT — регистры для доступа к порту, и BLINKER_PIN_NUM — номер вывода, на котором расположен светодиод.

BLINKER_PATTERN_ … — шаблоны для мигания светодиода. Для мигания используется некий циклический счётчик, скорость изменения которого пропорциональна скорости МК, и для 8МГц составляет примерно 16 изменений в секунду. Значение счётчика накладывается операцией битового И на значение указанного шаблона, и если результат равен нулю — светодиод зажигается (высокий уровень на выходе), иначе — тушится (низкий уровень). Таким образом, в зависимости от значения шаблона, можно задать быстрые мигания, медленные мигания, короткие вспышки с большим интервалом между ними, постоянно включенный светодиод, серии по две, по четыре вспышки и т.д.
По умолчанию запуск загрузчика обозначается медленными миганиями, готовность к загрузке страницы (т.е. после выполнения BLST) — сериями по две вспышки, и процесс загрузки страниц прошивки — быстрыми короткими вспышками.

MAGIC — значение, сохраняющееся в EEPROM и указывающее на успешную прошивку. Не может равняться 0xFF. Если этот контроль не нужен, закомментируйте строку.

FORCE_METHOD — способ контроля по уровню на входе. 0 — отключен, 1 — бутлоадер по низкому уровню, 2 — по высокому, 3 — по перемычке, 4 — по низкому уровню одновременно на двух входах.
в FORCE_PORT, FORCE_DDR, FORCE_PIN нужно указать регистры для доступа к соответствующему порту и FORCE_PIN_NUM — номер вывода на этом порту.
Если выбран метод 3 или 4, то аналогично для второго вывода FORCE_PORT2, FORCE_DDR2, FORCE_PIN2, FORCE_PIN_NUM2.

После настроек код можно скомпилировать нажатием F7.

Перед загрузкой кода необходимо настроить должным образом фьюзы.
1) Фьюзы BOOTSZ1: BOOTSZ0 должны быть выбраны таким образом, чтобы размер загрузчика равнялся 256 словам (words), обычно для МК с 8кб флеш их значения 10, для МК с 16 и 32 кб — 11. Сверьтесь с документацией на МК.
2) Необходимо запрограммировать (установить значение 0) фьюз BOOTRST, в результате чего после сброса будет запускаться не основная программа по адресу 0x0000, а загрузчик по выбранному адресу.
3) Остальные фьюзы (тактирование, BOD, CKDIV8 и т.д.) — сконфигурируйте под нужды своего проекта.

После того, как фьюзы прошиты, остаётся загрузить бутлоадер, подключить схему к компьютеру и проверять что получилось.
Для загрузки прошивок через бутлоадер прилагаю программку.

Чтобы избегать путаницы, рекомендую имена файлов начинать со значения HARDWARE_ , то имена файлов с прошивкой делать вида: VPupkinMigalka_v1.0_beta.hex

Как вызвать бутлоадер из программы

Допустим, программа во время работы приняла команду на обновление прошивки, ей нужно передать управление бутлоадеру. Для этого нужно просто перейти на адрес бутлоадера, то есть РАЗМЕР_ФЛЕШ — РАЗМЕР_БУТЛОАДЕРА. Т.к. бутлоадер у нас 512 байт, то из Си переход может выглядеть вот таким образом:

Формально, это не переход, а вызов процедуры без параметров, но разницы в результате нет.

Через avr/io.h определяется FLASHEND и указывает адрес последнего БАЙТА флеш-памяти. Для вызовов адреса должны быть в словах, поэтому делим на два.

С этим нужно быть внимательным, потому как в ассемблерных проектах FLASHEND определяется в СЛОВАХ и адреса переходов также задаются в словах. Т.е. вызов бутлоадера будет выглядеть как

rjmp FLASHEND — 255 // для устройств с 8кб флеша, у которых нет команды jmp
или
jmp FLASHEND — 255 // для устройств с 16 и 32кб флеша

Перед переходом в бутлоадер необходимо не забыть завершить работу всяких периферийных устройств и подготовить соответствующим образом внешнее оборудование, а также остановить сторожевой таймер, если он запущен.

Изменения от 24.09.2020

1) Теперь все настроечные определения хранятся в отдельном файле. Так удобнее использовать загрузчик для разных проектов.
2) Добавлен новый метод 4 проверки для принудительного запуска: две кнопки (низкий уровень на двух входах при включенных подтягивающих резисторах)
3) Исправлена некритичная ошибка в коде
4) Изменён способ расчёта контрольной суммы!. Теперь вместо простого исключающего или идёт расчёт полноценного 8-битного CRC. Это снизит вероятность ошибок при загрузке страницы. Но теперь, если включен метод 3 контроля запуска, включена запись маркера и мигание светодиодом, то на МК с большим количеством GPIO (т.е. у тех, у которых есть PORTE PORTF PORTG) код загрузчика может не поместиться в 512 байт. Если такая ситуация возникает, то загрузчик не будет обнулять все регистры PORTn и DDRn, а только те, которые используются самим загрузчиком.

Система BIOS и ее настройки

Назначение BIOS
Базовая система ввода-вывода — BIOS (Basic Input Output System) представляет собой набор программ и данных конфигурирования, предназначенных для настройки ПК. Программы BIOS встроены в аппаратное обеспечение ПК и представлены тремя аппаратными компонентами — BIOS во флэш-памяти на системной плате, RTC CMOS RAM в чипе энергонезависимой памяти на системной плате, которая имеет постоянное питание от аккумулятора, а также расширениями BIOS, расположенными в памяти программ адаптеров устройств ввода-вывода (УВВ).
BIOS — наиболее оперативная часть программного обеспечения. В область ее задач входит выполнение подготовительных операций по обслуживанию аппаратного обеспечения ПК. Таким образом, система BIOS — это сложный «гибрид», объединяющий программы с аппаратным обеспечением ПК посредством аппаратно-программного интерфейса. Для реализации управления используется простой и эффективный механизм. Различные компоненты операционной системы и прикладных программ, реагируя на те или иные события в ПК, генерируют одно из прерываний, вызывающих функцию BIOS. Получив информацию о том, что следует делать, BIOS обращается по адресам портов к УВВ, снабжая их ценной информацией. BIOS не работает непосредственно с аппаратными средствами ПК, а использует сведения о том, как функционирует то или иное оборудование. Подобного рода «знания» заложены в базовую спецификацию BIOS. Следовательно, если появляются новые устройства и порты, отсутствующие в базовой спецификации BIOS, ее следует обновить, благо подобная возможность существует.
Загрузка операционной системы — одна из обязанностей BIOS. После включения ПК процессор напрямую обращается к BIOS, программы которой позволяют ввести в действие основные модули: ОЗУ, системные контроллеры, видеосистему, клавиатуру, контроллеры дисковых устройств и т.д.
После благополучного запуска Windows функции управления УВВ передаются программам операционной системы. Windows XP берет на себя большинство функций контроля и управления аппаратным обеспечением ПК, что существенно сужает сферу деятельности BIOS. Функции и стандартные процедуры BIOS
BIOS реализует следующие основные функции.
• Обеспечивает самотестирование оборудования при включении электроэнергии, реализуя программу самотестирования ПК при включении электроэнергии POST (Power On SelfTest).
• Позволяет инициализировать УВВ. Часть инициализации выполняется аппаратнопрограммными средствами, интегрированными в адаптеры УВВ.
• Обеспечивает загрузку операционной системы, выполняет программу BOOT (загрузчик операционной системы).
• Обрабатывает программные прерывания от УВВ и обслуживает функции. Для каждого стандартного периферийного устройства BIOS хранит программу обслуживания. Некоторые программы обслуживания устройств загружаются отдельно и хранятся в отдельной области дисковой памяти.

• Обеспечивает настройку конфигурации ПК. Для этой цели BIOS располагает специальной программой установки параметров ПК— SETUP BIOS. В состав системы BIOS входит также ИМС, в которой хранятся параметры конфигурирования ПК.
• Снабжает программами-драйверами аппаратные компоненты ПК, что позволяет обеспечить их взаимодействие с операционной системой при ее загрузке. Для диагностики ошибок при запуске системы используется POST (стандартная процедура BIOS), инициируемая соответствующей программой.
Индикация об ошибке, выявленной POST, отображается в виде сообщения на мониторе ПК. Наиболее грубые неисправности идентифицируются звуковыми кодами. Если сообщения об ошибках на экран монитора не поступают, то код ошибки может быть интерпретирован специальной платой POST, помещенной в разъем расширения системной платы (рис. 1.5). Код предоставит вам возможность определить адрес подпрограммы прерывания и код ошибки.
Плата POST содержит двухразрядный шестнадцатеричный дисплей, на котором отобра- жается код текущей тестовой проверки. Если произошел сбой тестовой программы, на экране отобразится код последней тестовой проверки.
Программа-загрузчик BOOT осуществляет поиск сектора загрузки на действующем основном устройстве загрузки. Необходимый критерий поиска сектора загрузки — сигнатура, которая должна завершаться шестнадцатеричным кодом 55AAh. В процессе выполнения кода загрузчика вызывается загрузочный сектор операционной системы, который загружает файлы ядра операционной системы.
Блок начальной загрузки — это первая запись на загрузочном диске. Он умещается в сек- тор размером 512 байт. Блок загрузки содержит очень короткую программу, предназначен- ную для активизации процесса загрузки операционной системы в ОЗУ ПК. В качестве устройства загрузки используется, как правило, флоппи-диск (А), привод жесткого диска (С, D) или CD-ROM. Кроме того, для загрузки могут быть использованы «ловушки» загрузчика BEV (Bootstrap Entry Vector). BEV представляет собой вектор, указывающий на внутренний код BIOS, который позволяет загрузить операционную систему без участия дисководов. BEV располагаются в ППЗУ расширений BIOS, например на интерфейсной плате Plug and Play Ethernet на шине ISA.
Для установки параметров ПК система BIOS располагает программой SETUP BIOS. Опции меню программы реализуют ручную настройку режимов работы аппаратного обеспечения. Для запуска программы достаточно во время выполнения POST удерживать нажатой клавишу Del или другую клавишу, указанную в «Руководстве пользователя».

Особенности работы с программой SETUP BIOS располагает двумя компонентами, предназначенными для настройки параметров ПК при загрузке системы. Аппаратный компонент — чип энергонезависимой памяти RTC CMOS RAM — предназначен для организации часов реального времени, а также для хранения данных настройки параметров ПК. Программа CMOS SETUP Utility, посредством которой эти данные можно изменить, хранится в энергонезависимой флэш-памяти. С помощью этой утилиты вы можете установить значения различных параметров, режимов работы системных устройств, а также УВВ.
Программа SETUP недоступна во время работы ПК.
Программу SETUP можно запустить при включении ПК или перезагрузке системы, т.е. практически сразу же после выполнения всех основных проверок POST. Для запуска SETUP следует во время выполнения POST нажать определенную клавишу или комбинацию клавиш. В табл. 1.2 представлены клавиши и комбинации клавиш, которые служат для запуска SETUP.
Таблица 1.2. Клавиши для запуска SETUP
Компания Клавиша или комбинация клавиш для запуска SETUP
AMI BIOS Del, F1, F2
Phoenix BIOS F2, Ctrl+Alt+Esc, Ctrl+Alt+S — старые версии
в режиме командной строки
Award BIOS Del, Ctrl+Alt+Del
Microid Research BIOS Esc
IBM Aptiva/Valupoint F1
Compaq F10>

Исходный код загрузчика iOS появился на GitHub

Пользователь Reddit опубликовал исходный код некоторых компонентов iOS, отвечающих за загрузку операционной системы во время включения устройства. Код относится к версиям iOS 9.3.X, но вполне вероятно, что его части могут использоваться и в более поздних версиях системы. Публикация кода в открытом доступе может помочь специалистам найти уязвимости в системе, отмечает издание Motherboard.

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

Обычно Apple не публикует исходные коды таких компонентов своих операционных систем, но теперь часть из них появилась в сети. Их опубликовал один из пользователей Reddit 22 сентября 2020 года, но СМИ обратили внимание на это сообщение только после того, как код опубликовали на GitHub. В опубликованном архиве содержится внутренняя документация и исходный код некоторых компонентов iOS, таких, как драйверы, но главные из них — это исходный код первичного загрузчика SecureROM и основного загрузчика операционной системы iBoot. При включении устройства сначала запускается именно SecureROM и проверяет последующие компоненты, в том числе и iBoot.

Стоит отметить, что опубликованные исходные коды относятся к версиям iOS 9.3.X, а на большинстве iOS-устройств установлена более поздняя версия. Помимо этого, пользователи Reddit отметили, что в архиве не хватает некоторых файлов, необходимых для компиляции работающей версии iBoot. Тем не менее, поскольку части кода могут использоваться в компонентах более новых версий, публикация исходных кодов этих компонентов может привести к нескольким последствиям.

Во-первых, исследователи в области компьютерной безопасности и злоумышленники смогут анализировать ранее недоступный исходный код и искать уязвимости, которые могут присутствовать и в самых последних версиях iOS. Во-вторых, во многом именно на обходе механизмов защиты во время загрузки системы основан джейлбрейк — операция, позволяющая расширить возможности iOS-устройств. Соответственно, знание о том, как именно устроены эти механизмы, может помочь найти новые способы взлома. Также публикация исходного кода SecureROM важна еще по одной причине — он прошит в самом чипе (системе на кристалле) и не может быть обновлен вместе с обычным обновлением iOS, даже если в нем найдут критическую уязвимость.

Менее месяца назад на серверах Apple произошла ошибка, из-за которой старые версии iOS на некоторое время стали снова подписанными. Благодаря этому некоторые пользователи смогли установить гораздо более старые версии системы на свои устройства, хотя обычно компания прекращает подписывать старые версии после выхода новых.

Взлом Andro >

Bootloader, Recovery, Root и ROM… Если вы не знаете, что скрывается за этими терминами Android, вам необходимо прочитать эту статью. В ней рассказывается обо всех инструментах взлома и хаках, применимых к системе Android.

Прежде чем начать взлом Android, надо понять, как он в целом работает, и лишь затем можно приступать к разблокировке загрузчика системы. Итак, попробуем разобраться.

Что происходит при включении и запуске Andro > Что происходит при запуске Android

Перед нами выключенный смартфон под управлением Android. Давайте разберемся, что произойдет, если его включить.

Сначала произойдет запуск BIOS мобильного телефона. ВIOS (Basic Input/Output System ) в переводе с английского означает «Базовая система ввода / вывода». Она постоянно автосохраняется и обеспечивает работу входов и выходов. В частности, эта система также запускает загрузчик (Bootloader).

Как явствует из названия, загрузчик загружает другие части операционной системы, например, ядро. Ядро ​​операционной системы — это основная ее часть. По сути, это нижний уровень системы Android, который отвечает за ход основных процессов и организацию данных.

Затем запускается основная операционная система под названием «ПЗУ/ ROM». ROM означает «Read Only Memory», или «Постоянное запоминающее устройство», используемое для запоминания всего массива неизменяемых данных. Будучи обычным пользователем, вы ничего не можете в ней поменять.

Параллельно загрузчик запускает не только ядро, но и Recovery, или систему восстановления.
Если система Android вдруг оказывается повреждена, можно загрузить Recovery и из нее восстановить OS с нуля или с момента сохранения. Также в системе Recovery можно (и нужно) создавать резервные копии.

В свою очередь, загрузчик может находиться в трех разных состояниях: «Заблокировано», «Открыто» или «Зашифровано». Если загрузчик открыт, в систему могут быть внесены глубокие изменения, например, можно установить собственную операционную систему, также называемую «кастомной ПЗУ», вместо стандартной, то есть, «стоковой ПЗУ». Но и другие моменты, такие как изменение Recovery или получение root-прав на смартфон, можно проводить только с помощью открытого загрузчика.

Если загрузчик зашифрован, могут быть установлены лишь самые срочные обновления системы от изготовителя. То же самое относится и к заблокированному загрузчику, но, в отличие от зашифрованного, его можно разблокировать.

Как разблокировать загрузчик

Большинство смартфонов Android имеют так называемый режим fastboot. Это своего рода «расширенный загрузчик». С помощью этого режима обычный загрузчик можно разблокировать. Базовым инструментом для этого является «Android Debug Bridge», или ADB. Он ориентирован, в первую очередь, для разработчиков приложений под Android, но и обычным пользователям дает много возможностей.

Илон Маск рекомендует:  Abs абсолютное значение целого

Для начала вам нужны драйвера для смартфона. Их можно легко установить автоматически из Windows 7, просто подключив смартфон к ПК.
Также нужны драйвера ADB и Fastboot. Для этого загрузите из интернета установщик и запустите скачанный файл в режиме администратора. Обязательно установите драйвера для всей системы. Установщик спросит вас, действительно ли вы хотите это сделать.

После того, как вы совершили эти шаги, необходимо подключить устройство к ПК в режиме fastboot. У многих смартфонов есть для этого специальная комбинация клавиш. В качестве альтернативы, однако, вы также можете подключить включенный смартфон к ПК и ввести команду «adb reboot bootloader» в командной строке. Однако сначала вы должны включить «Отладку по USB» в настройках смартфона. Если необходимо, вы также должны включить функцию «Разрешить OEM-разблокировку».

Теперь вы можете легко разблокировать загрузчик командой «fastboot flashing unlock». Затем снова загрузитесь в режим fastboot и введите «fastboot flashing unlock_critical», чтобы окончательно разблокировать загрузчик. Таким образом вы можете свести к минимуму риск того, что ваш смартфон превратится в «кирпич» при установке новой прошивки.

В качестве альтернативы на некоторых смартфонах разблокировка может быть выполнена с помощью команды «fastboot oem unlock».

Однако бывают исключения. Например, смартфоны Samsung не имеют реального режима fastboot. Вместо этого есть режим загрузки. Чтобы разблокировать загрузчик, необходимо использовать программу Odin, которая может устанавливать файлы, умеющие это делать. Для получения root-прав или установки кастомного ROM или Recovery на устройства Samsung это не обязательно.

Еще одно исключение составляют смартфоны от Sony. Перед тем, как взломать смартфон, вам сначала сначала придется зарегистрировать устройство на странице разработчика, введя IMEI и свой e-mail, чтобы получить специальный код разблокировки.

О том, как инсталлировать кастомную систему восстановления данных, читайте в следующем материале.

Лучшие загрузчики Linux

После того как вы включаете компьютер, как только будет успешно завершено тестирование всего оборудования POST (Power On Self Test) BIOS попытается обнаружить диск с загрузчиком и прочитать дальнейшие инструкции из таблицы разделов MBR или GPT. Таблица разделов содержит очень важную информацию, во-первых, это непосредственно разметка разделов на диске, а во-вторых, код загрузчика.

Что такое загрузчик?

Загрузчик — это небольшая программа, которая хранится в таблице разделов и помогает загрузить операционную систему в память. Без загрузчика это сделать намного сложнее.

В Linux существует несколько загрузчиков, которые мы можем использовать. Все они одинаковы по выполняемым действиям — загружают операционную систему, но немного отличаются по дополнительной функциональности и внешнему виду. В этой статье мы рассмотрим лучшие загрузчики linux. Перейдем к списку.

1. GNU Grub

GNU Grub — это популярный и наиболее часто используемый загрузчик, который может загружать почти все существующие операционные системы. Он разработан на основе оригинального Grub (GRand Unified Bootlader), который был создан Эриком Стефаном Броленом. Но здесь есть несколько усовершенствований, новых возможностей и исправлений ошибок.

На данный момент уже везде используется версия Grub 2 вместо Grub. А Grub переименован в Grub-legacy и уже не развивается, хотя до сих пор может использоваться для загрузки старых операционных систем. Исправления ошибок все еще выпускаются.

Характерные особенности Grub 2:

  • Поддержка загрузки нескольких операционных систем;
  • Поддержка нескольких аппаратных архитектур;
  • Используется Bash подобный интерфейс командной строки для работы в консоли Grub и такой же синтаксис для конфигурационных файлов;
  • Позволяет редактировать пункты загрузки во время выполнения;
  • Поддерживает установку паролей и шифрования для обеспечения безопасности;
  • Поддерживает загрузку по сети.

2. LILO (Linux Loader)

Lilo или Linux Loader — это простой, стабильный и мощный загрузчик для Linux. С развитием Grub, который получил новые возможности и большую популярность Lilo потерял своих пользователей, но он все еще используется в некоторых дистрибутивах и для загрузки образов.

Во время загрузки на экране появляется слово LILO и каждая буква рисуется при достижении определенного процента готовности. Разработка загрузчика была прекращена в 2015 году и сейчас он имеет такие недостатки по сравнению с Grub:


  • Нет интерфейса командной строки;
  • Поддержка нескольких кодов ошибок;
  • Нет поддержки загрузки по сети;
  • Все файлы загрузчика хранятся на первых 1024 цилиндрах привода;
  • Не поддерживает такие технологии, как Btrfs, GPT, RA >3. BURG

Загрузчик Burg основан на кодовой базе Grub и является относительно новым загрузчиком. Здесь есть все функции Grub и кое-что еще. Загрузчик предлагает новый код для работы с платформами Windows, Linux, MacOS, FreeBSD и других.

Кроме того, здесь поддерживается очень тонкая настройка тем текста и графического меню. Также запланирована реализация поддержки работы с различными устройствами ввода/вывода. Можно сказать, что это самый красивый загрузчик Linux.

4. Syslinux

Syslinux — это облегченный загрузчик, который используется чаще всего для загрузки с внешних носителей, LiveCD или по сети. Он поддерживает файловые системы FAT, ext2, ext3, ext4. Также поддерживаются несжатые тома Btrfs.

Обратите внимание, что Syslinux только получает доступ к файлам на разделе где он размещен, а значит здесь нет возможности загрузки нескольких операционных систем.

5. Systemd-boot

Это простой загрузчик от systemd, который умеет работать только с образами UEFI. Может использоваться для загрузки системы без Grub. Здесь нет никаких особенных функций, это просто меню, позволяющее выбрать необходимый EFI образ для загрузки. Например, образ ядра Linux или EFI Shell.

Выводы

Мы рассмотрели лучшие загрузчики Linux. Загрузчик позволяет управлять несколькими операционными системами на одном компьютере и выбирать какую из них вы хотите загрузить в определенный момент. Без него ваш компьютер не сможет загрузить ядро и другие файлы операционной системы.

Если я пропустил здесь какой-нибудь загрузчик linux, напишите в комментариях!

Где на компьютере находится биос и что это такое?

Что такое Bios в Компьютере

Итак, сама аббревиатура идет от английского Basic Input-Output System, что дословно переводиться как базовая система ввода-вывода. Базовой называется потому, что это система взаимодействия с аппаратурой компьютера или другими словами аппаратное программное обеспечение. Например, первичное взаимодействие с экраном, взаимодействие с оперативной памятью, взаимодействие с процессором, взаимодействие с контроллерами на материнской плате, контроль охладительной системы, контроль питания и включения.

Чаще всего BIOS используется для настройки приоритета загрузки, особенно когда требуется переустановка Windows и нужно загрузиться не с жесткого диска, а с другого устройства, например, Flash- накопителя или дисковода из-за того, что по умолчанию в большинстве случаев стоит по приоритету, первой загрузка с жесткого диска.

Другие мало известные и редко используемые, особенно новичками, функции — это настройка компонентов компьютера (частота шины, частота процессора, скорость вращения вентиляторов охлаждения и др.). Так же BIOS до старта загрузки проверяет оборудование на работоспособность и в случае неполадок сообщает об этом на экране, а также в виде последовательности сигналов. Используя эти сигналы можно выявить причину неисправности и компонент неполадки.

Где на компьютере и ноутбуке находится биос

Что касаемо того где расположен BIOS на компьютере, то следует искать похожую микросхему (картинка ниже) на материнской плате компьютера. Все, наверное, сталкивались с батарейкой на материнской плате именно она используется для того что бы не сбивались часы в BIOS и хранились настройки.

Если вы вдруг настроили неправильно что-то в BIOS и после этого не можете зайти в него. Попробуйте сбросить настройки вытянув на некоторое время батарейку в виде таблетки из материнской платы.

Вот так выглядит биос на компьютере:

А вот так на ноутбуке:

Разновидности BIOS

Если быть точным, то, разновидностей BIOS намного больше, но для наглядности усредним их до 4 типов систем. Так как они имеют большую схожесть независимо от производителя материнских плат.

  1. AMI BIOS – это старый тип BIOS разработанный корпорацией American Megatrend, I Сейчас его можно встретить только в старых материнских платах. Приблизительные вид данной системы указан ниже. Интерфейс представлен горизонтальным меню с разделами: Main, Advanced, Power, Boot, Exit. Справа указаны подсказки для пользователей.
  2. Phoenix Bios или просто Award. Когда-то давно Phoenix и Award были разными фирмами, выпускающими свои версии BIOS. Award был одним из самых популярных систем. Популярность Phoenix была значительно ниже. Потом AWARD Software был приобретен Phoenix. Но несмотря на это все также существует два вида BIOS. Интерфейс представлен в виде двух колонок с пунктами меню. Внизу данных колонок подсказки для пользователя.
  3. Intel BIOS. Для своих материнских плат Intel взяла за основу AMI BIOS шестой версии и сделал свою версию Intel BIOS. Начальные версии Intel Bios были наподобие AMI BIOS, а дальше BIOS становится похожим на стандартную программу операционной системы семейства Windows.
  4. UEFI (Extensible Firmware Interface с английского расширяемый интерфейс прошивки) – современная версия с интерфейсом похожим на стандартный интерфейс программы операционной системы, с возможностью переключать языки и возможностью пользоваться мышкой. На современных материнских платах в основном уже идет UEFI, так как он имеет более современный вид, поддержку многих языков и имеет удобный интуитивно понятный даже для новичков интерфейс.

Так как на разных материнских платах используется разный BIOS, то назвать конкретную клавишу для входа нельзя, возможно лишь назвать наиболее часто используемые клавиши: Del, F2, Esc, а также во время включения смотрите за подсказками там будет написано что-то похожее на «Press to Setup» или что-то аналогичное с клавишей, которой нужно нажать. Если вы не успели это сделать, то придётся перегружать и пробовать снова.

Несмотря на версию BIOS навигация во всех видах возможна с помощью стрелок, в новых версиях доступна еще и мышь. Подтверждение осуществляется с помощью клавиши Enter, а выход путем нажатия клавиши ESC, после которого обычно возникает окно о сохранении измененных настроек. Так же не забывайте про подсказки.

Возможности BIOS

Прежде чем перечислять все возможности, которые дает BIOS. Следует обозначить наиболее популярные. В первую очередь, как уже было сказано выше BIOS используется для изменения приоритета загрузки устройств, в котором, после, BIOS будет передано выполнение. Чтобы вы понимали о каком приоритете идет речь, нужно понимать, что по умолчанию в большинстве первоочередная загрузка идет с жесткого диска – это значит, что после BIOS управление передаться на жесткий диск. Если же, в приоритете стоит дисковод или USB- накопитель, то после BIOS следует, то устройство которое было указано в настройках BIOS или по очереди от более приоритетного к менее приоритетному.

Помимо этой популярной возможности вы еще можете:

  • Отключить или подключить необходимые порты;
  • Установить время;
  • Настроить, более детально, характеристики устройств (питание, частоту и т.д.);
  • Изменить режим работы устройств;
  • Изменить скорость вращения охлаждения;
  • Отследить базовые параметры такие как температуру, скорость вращения и др.

Отличие BIOS компьютера от BIOS ноутбука

Основным отличие BIOS Компьютера от той же системы в ноутбуке будет дополнительные параметры энергосбережения и энергопотребления, поскольку для переносного аккумуляторного устройства это очень важно. Следовательно, в ноутбуках будет больше параметров для экономии энергии автоматического выключения и т.д.

Пишем свой bootloader

Это статья была написана для людей, которым всегда интересно знать как работают разные вещи. Для тех разработчиков которые обычно пишут свои программы на высоком уровне, C, C++ или Java — не важно, но при этом столкнулись с необходимостью сделать что-то на низком уровне. Мы будем рассматривать низкоуровневое программирование на примере работы bootloader-а.

Мы опишем что происходит после включения компьютера и как система загружается. В качестве практического примера, рассмотрим как вы можете написать свой собственный загрузчик, который фактически является отправной точкой при загрузки системы.

Что такое Boot Loader

Boot loader — это программа, которая записана на первом секторе жесткого диска. BIOS автоматически считывает всё содержимое первого сектора в память, сразу после включения питания. Первый сектор также называется главной загрузочной записью. На самом деле, это не является обязательным для первого сектора жесткого диска для загрузки чего либо. Это название было исторически сложившиеся, так как разработчики использовали такой механизм для загрузки операционной системы.

Будьте готовы погружаться глубже

В этом разделе я расскажу о том, какие знания и инструменты, необходимы для разработки собственного загрузчика, а также напомню некоторую полезную информацию о загрузке системы.

И так, какой язык Вы должны знать, чтобы написать Boot Loader

В первую очереди, при работе компьютера, контроль аппаратного обеспечения осуществляется преимущественно посредством функций BIOS, известный как «прерывания». Вызвать прерывание можно только на ассемблере — будет здорово если вы хоть немного знакомы с этим языком. Но это не обязательное условие. Почему? Мы будем использовать технологию «смешанного кода», где можно совместить высокоуровневые конструкции с командами низкого уровня. Это не много упрощает нашу задачу.

В этой статье в основном будет использоваться язык C++. Но если вы знаете C, то вам будет легко узнать необходимые C++ элементы. В общем, даже знание языка C будет достаточно, но тогда вам придется изменять исходный код примеров.

Если вы знаете Java или C#, то к сожалению это не поможет для нашей задачи. Дело в том, что код Java и C#, который производится после компиляции является промежуточным. Специальная виртуальная машина используется, для последующей обработки(Java машину для Java и .NET для C#), преобразовывая промежуточный код в инструкции для процессора. После преобразования он может быть выполнен. Такая архитектура делает невозможным использование технологию смешанного кода — но мы будем использовать ее, чтобы сделать нашу жизнь проще, так что Java и C# здесь не помогут.

И так, для разработки простого загрузчика вы должны знать, C или C++, а также было бы не плохо если вы знаете немного Ассемблера.

Какой компилятор вам нужен

Чтобы использовать технологию смешанного кода, нужно по крайней мере два компилятора: для ассемблера и для C/C++, а также компоновщик который объединит объектные файлы(.obj) в один исполняемый файл.

Теперь, давайте поговорим о некоторых особых моментов. Есть два режима функционирования процессора: реальный и защищенный режим. Реальный режим является 16-битным и имеет некоторые ограничения. Защищенный режим является 32-битным и полностью используется операционной системой. Когда компьютер только начинает работу, процессор работает в 16-битном режиме. Таким образом, чтобы написать программу и получить исполняемый файл, вам понадобится компилятор и компоновщик для ассемблера для 16-битного режима. Для C/C++ вам потребуется только компилятор, который умеет создавать объектные файлы для 16-битного режима.

Современные компиляторы сделаны для 32-разрядных приложений, поэтому мы не сможем их использовать.

Я пробовал несколько бесплатных и коммерческих компиляторов для 16-битного режима и выбрал продукт от Microsoft. Компилятор вместе с компоновщиком для ассемблера, C и C++ включены в Microsoft Visual Studio 1.52, его можно скадать с официального сайта компании. Некоторые подробности о компиляторов которые нам нужны приведены ниже.

ML 6,15 — компилятор ассемблера от Microsoft для 16-битного режима.
LINK 5,16 — компоновщик, который умеет создавать COM-файлы для 16-битного режима.
CL — С, С++ компилятор для 16-битного режима.

Вы также можете использовать несколько альтернативных вариантов.

DMC — бесплатный компилятор для компиляции ассемблера, C, C++ для 16 и 32-битном режиме Digital Mars.
LINK — бесплатный компоновщик для компилятора DMC.

Есть также некоторые продукты от Borland.

BCC 3,5 — С, С++ компилятор, который умеет создавать файлы для 16-битного режима.
TASM — компилятор асемблера для 16-битного режима.
TLINK — компоновщик, который может создавать файлы COM для 16-битного режима.

Все примеры кода в этой статьи, были разработаны с инструментами от Microsoft.

Как система загружается

Для того, чтобы решить нашу задачу мы должны вспомнить, как система загружает.
Рассмотрим кратко, как компоненты системы взаимодействуют при загрузке системы.

После того, как управление было передано по адресу 0000:7C00, Master Boot Record (MBR) начинает свою работу и запускает загрузку операционной системы.

Давайте перейдем к кодированию

В следующих разделах мы будем непосредственно заняты низкоуровневым программированием — мы будем писать наш собственный загрузчик.

Архитектура программы

Мы разрабатываем загрузчик для себя. Его задачами являются только следующие:

  1. Правильная загрузка в память по адресу 0000:7 C00.
  2. Вызов BootMain функции, которую мы написали в языке высокого уровня.
  3. Вывести на дисплей фразу — ”Hello, world…», from low-level.

Первый объект это StartPoint, который написан исключительно в ассемблере, поскольку в языках высокого уровня нет необходимых нам инструкции. Это говорит компилятору, какой тип памяти должен использоваться, и адрес команды в RAM, которая должна выполняться после его чтения. Он также исправляет регистры процессора и передает управление функции BootMain, которая написано на языке высокого уровня.

Следующий объект- BootMain — является аналогом main, что, в свою очередь является основной функцией в которой сконцентрированы все функции программы.

Классы CDisplay и CString заботиться о функциональной части программы и выводит сообщение на экран. Как вы можете видеть на предыдущей картинки, класс CDisplay использует класс CString в своей работе.

Среда разработки

Здесь я использую стандартные среды разработки Microsoft Visual Studio 2005 или 2008. Вы можете использовать любые другие инструменты, но я уверен, что эти два, с некоторыми настройками, компилируют и работают легко и удобно.

Сначала мы должны создать проект Makefile Project, где будет выполнена основная работа.

BIOS прерывания и очистка экрана

Чтобы вывести сообщение на экране, мы должны очистить его для начала. Мы будем использовать специальные BIOS прерывания для этой цели.

BIOS предлагает ряд прерываний для работы с железом, таким как видеокарта, клавиатура, системный диск. Каждое прерывание имеет следующую структуру:

Где «number_of_interrupt» является числом прерывания.

Каждое прерывание имеет некоторое количество параметров, которые должны быть установлены до его вызова. Регистр процессора — ah, всегда несет ответственность за количество функций для текущего прерывания, и другие регистры обычно используются для других параметров текущей операции. Давайте посмотрим, как работа прерывания номер 10h выполняется на ассемблере. Мы будем использовать 00-функцию, она меняет видео режим и очищает экран:

Мы будем рассматривать только те прерывания и функции, которые будут использоваться в нашем приложении. Нам понадобится:

«Смешанный код»

Компилятор C++ поддерживает встроенный Ассемблер, то есть при написании кода на языке высокого уровня вы можете также использовать язык низкого уровня. Инструкции ассемблера, которые используются на высоком уровне, также называют asm вставками. Они состоят из ключевого слова «__asm» и блока ассемблерных инструкций:

Чтобы продемонстрировать пример смешанного кода мы будем использовать ранее упомянутый код на ассемблере, который выполняет очистку экрана и объединим его с кодом написанный на C++.

CString реализация

CString класс предназначен для работы со строками. Он включает в себя метод Strlen(), который получает в качестве параметра указатель на строку и возвращает количество символов в этой строке.

CDisplay класс предназначен для работы с экраном. Он включает в себя несколько методов:

  1. TextOut() — выводит строку на экране.
  2. ShowCursor() — управляет курсором представления на экране: показать, скрыть.
  3. ClearScreen() — изменяет видео режим и таким образом очищает экран.
CDisplay — реализация
Types.h — реализация

Types.h является заголовочным файлом, который включает определения типов данных и макросов.

BootMain.cpp — реализация

BootMain() является основной функцией программы, которая является первой точкой входа (аналог main()). Основная работа проводится здесь.

StartPoint.asm — реализация

Давайте соберем все

Создание COM файла

Теперь, когда код разработан мы должны преобразовать его в файл для 16-битных ОС. Такими файлами являются .COM-файлы. Мы можем запустить компилятор из командной строки, передавая необходимые параметры, в качестве результата мы получим несколько объектных файлов. Далее мы запускаем компоновщик для преобразования всех .COM файлов в один исполняемый файл с расширением. COM. Это работа способный вариант но не очень легок.

Давайте лучше автоматизируем этот процесс. Для этого нам нужно созать .bat файл и записать в нем нужные команды с необходимыми параметрами.

Поместите компиляторы и компоновщик в каталог проекта. В том же каталоге, мы создаем командный файл и заполняем в соответствии с примером (можно использовать любой каталог вместо VC152, главное чтобы компиляторы и компоновщик находились в нем).:

Ассамблирование — автоматизация

В качестве заключительного этапа в этом разделе мы опишем как превратить Microsoft Visual Studio 2005, 2008, в среду разработки с поддержкой любого компилятора. Для этого нужно перейти в свойствах проекта: Project->Properties->Configuration Properties\General->Configuration Type.

Вкладка Configuration Properties включает в себя три пункта: General, Debugging и NMake. Выберите NMake и укажите путь к «build.bat» в Build Command Line и Rebuild Command Lin.

Если все сделано правильно, то вы можете скомпилировать нажав клавиши F7 или Ctrl + F7. При этом вся сопутствующие информация будет отображаться в окне вывода. Основным преимуществом здесь является не только автоматизация сборки, но и мониторинг ошибок в коде если они будут.

Тестирование и демонстрация

Этот раздел расскажет, как увидеть сделанный загрузчик в действии, как выполнить тестирование и отладку.

Как проверить загрузчик

Вы можете проверить загрузчик на реальном оборудовании или с использованием разработанных для этих целей виртуальных машинам — VMware. Тестирование на реальном оборудовании дает вам больше уверенности, что он работает также как и на виртуальной машине. Конечно, мы можем сказать, что VmWare отличный способ для тестирования и отладки. Мы рассмотрим оба метода.

Прежде всего, нужен инструмент, чтобы записать наш загрузчик на виртуальный или физический диск. Насколько я знаю, есть несколько бесплатных и коммерческих консолей и GUI приложений. Я использовал Disk Explorer для NTFS 3.66 (версия для FAT, называется Disk Explorer для FAT) для работы в ОС Windows и Norton Disk Editor 2002 для работы в MS-DOS.

Я опишу только Disk Explorer для NTFS 3,66 потому что это самый простой способ и подходит для наших целей больше всего.

Тестирование с помощью виртуальной машины VmWare
Создание виртуальной машины

Нам понадобится VmWare версия программы 5.0, 6.0 или выше. Чтобы проверить загрузчик мы создадим новую виртуальную машину с минимальным размером диска, например, 1 Gb. Отформатируйте его в файловую систему NTFS. Теперь нам нужно отобразить отформатированный жесткий диск на VmWare в качестве виртуального диска. Для этого выберите:

File->Map or Disconnect Virtual Disks.

После этого появится окно. Там вы должны нажать кнопку «Map». В следующем появившемся окне вы должны указать путь к диску. Теперь Вы также можете выбрать букву диска.

Не забудьте снять флажок «Open file in read-only mode (recommended)». После того как выполнили все выше описанные индикации диск должен быть доступен в режиме только для чтения чтобы избежать повреждения данных.

После этого мы можем работать с диском виртуальной машины, как с обычными логическим диском в ОС Windows. Теперь мы должны использовать Disk Explorer для NTFS 3,66 чтобы записать загрузочную запись с позиции 0.

Работа с Disk Explorer для NTFS

После запуска программы мы идем в наш диск (File-> Drive). В появившемся окне идем в раздел логические диски и выбираем наш созданный диск(в моем случае это Z).

Теперь мы выбираем меню пункт View как Hex команды. В это появившемся окне мы можем видеть информацию диска в 16-разрядном представлении, разделенная на сектора. Сейчас у нас только 0-ли, так как диск пуст, пока что.

Сейчас мы должны записать наш загрузчик в первый сектор. Мы устанавливаем маркер в положение 00, как это показано на предыдущей картинке. Чтобы скопировать загрузчик мы используем пункт меню Edit->Paste from file command. В открывшемся окне укажите путь к файлу и кликните Open. После этого содержимое первого сектора должен измениться и выглядеть, как это показано на картинке — если вы, конечно, ничего не меняли в коде.

Вы также должны записать подпись 55AAh по позиции 1FE от начала сектора. Если вы не сделаете это, BIOS проверит последние два байта, и не найдя указанную подписи, будет считать что этот сектор не является загрузочным и не загрузит его в память.

Для переключения в режим редактирования нажмите клавишу F2 и напишите необходимые номера — 55AAh подписи. Чтобы выйти из режима редактирования нажмите ESC.

Теперь нам нужно подтвердить записанные данные.

Чтобы применить записанное мы идем в Tools-> Options, теперь мы идем в пункт Mode и выбираем метод записывания — Virtual Write и нажмите кнопку Write.

Большую часть рутинных действий закончили, наконец, и теперь вы можете видеть, что мы разработали с самого начала этой статьи. Давайте вернемся к VwWare чтобы отключить виртуальный диск (File->Map or Disconnect Virtual Disks … and click Disconnect).

Давайте запустим виртуальную машину. Мы видим теперь, как из глубины царства машинных кодов появляются знакомые строки — «Hello World… », from low-level. «.

Тестирование на реальном оборудовании

Тестирование на реальном оборудовании почти такая же, как и на виртуальной машине, за исключением того, что если что-то не работает, вам потребуется намного больше времени, чтобы восстановить ее, чем создать новую виртуальную машину. Чтобы проверить загрузчик не имея возможность потерять данные (все может случиться), я предлагаю использовать флэш-накопитель, но сначала вы должны перезагрузить компьютер, зайдите в BIOS и убедитесь, что он поддерживает загрузку с флэш-накопителя. Если он поддерживает его, то все в порядке. Если нет, то вы должны ограничить тестированием на виртуальной тестовой машине.

Процесс написание загрузчика на флэш-диск в Disk Explorer для NTFS 3,66 такой же как и для виртуальной машины. Вы просто должны выбрать сам жесткий диск вместо своего логического раздела.

Заключение

В этой статье мы рассмотрели, что такое загрузчик, как работает BIOS, и как компоненты системы взаимодействуют при загрузке системы. Практическая часть дала нам понимание о том, как можно разработать свой собственный, простой загрузчик. Мы продемонстрировали технологию смешанного кода и процесс автоматизации сборки с использованием Microsoft Visual Studio 2005, 2008.

Конечно, это лишь малая часть по сравнению с огромной темой низкоуровневого программирования, но если вам было интересна это статья — то это круто.

Что такое загрузчик и код запуска во встроенных системах? — embedded

Каково основное значение загрузчика и кода запуска во встроенных системах? В чем разница?

Где они размещены?? И обзор потока от источника питания reset к началу приложения. Рассмотрение любой платформы в целом.

    1 1
  • 31 июл 2020 2020-07-31 05:11:19
  • vkesh

1 ответ

Все процессоры имеют определенный процессорный способ запуска. Обычно в адресном пространстве процессоров есть некоторый адрес, например, скажем 0xFFFF0000, где процессор считывает эту память. Значение, которое он находит, использует как адрес для кода и начинает выполнять код по этому адресу.

Каким бы аппаратным обеспечением ни были разработчики чипов или плат, убедитесь, что в это адресное пространство отображается какая-либо флэш-память или какая-то другая форма энергонезависимой памяти (ПЗУ), чтобы загрузочный код процессора и этот адрес загружались на этом специальном адресе будет читаться процессор при включении питания и reset (оперативная память изменена, выключите питание и вы потеряете данные, включите его и получите некоторые случайные данные до тех пор, пока ОЗУ не будет написано с чем-то еще).

Итак, первый код, который запускает процессор, часто называют загрузчиком, а некоторые могут обсуждать, что вторая половина словаря загрузчика подразумевает, что этот код может «загружать» операционную систему или любое другое приложение, которое должно выполняться, а также поскольку вторая функция предоставляет возможность «загрузчика» для разработчиков. Если вы когда-либо использовали U-Boot или даже GRUB или многие другие загрузчики, вы могли бы понять, что если вы ничего не трогаете, он загрузит по умолчанию все, встроенное приложение или операционную систему, что угодно.

Но если вы прерываете процесс загрузки и прерываете этот процесс, это очень специфично для платформы и программного обеспечения, иногда вам приходится нажимать кнопку или короткие два булавки вместе или отправлять escape или какой-либо другой символ в последовательный /UART и т.д., а затем он переходит в режим загрузчика, где вы можете изменить то, что он загружает и/или вместо загрузки загрузчика программа по умолчанию из flash/ROM, она может позволить вам, например, использовать XMODEM или ZMODEM или Ethernet-порт и протокол для загрузки тестовой программы в оперативную память, затем разрешите запускать эту программу вместо программы по умолчанию.

Некоторые люди называют загрузочное программное обеспечение загрузчиком, даже если оно не позволяет прерывать процесс и загружать некоторую альтернативную программу, потому что этот загрузочный код может «загружать» приложение в оперативную память из хранилища неизживой. /p >

Не всем загрузчикам необходимо скопировать приложение из энергонезависимого хранилища (flash/ROM, жесткий диск, CD-ROM и т.д.) в оперативную память. Некоторые системы и некоторые приложения работают со вспышкой/ПЗУ. Например, ПК: реальным загрузчиком на ПК является BIOS, который является программой, которая живет и работает от флэш/ПЗУ. Для систем с DRAM, как ПК, вы все равно должны воспитывать систему DRAM. Для конфигурирования аппаратного обеспечения требуется много кода, чтобы работать с DRAM, и иногда вы можете увидеть некоторый статус этого на мониторе при загрузке ПК. Если у вас SRAM в вашей системе, тогда это может также потребовать некоторую инициализацию, но обычно это не так сложно, как DRAM, и часто это мгновенно вверх и готовые к использованию с небольшой конфигурацией или без нее, разные процессоры и разные системы. разные.

Таким образом, процессор выходит из reset, каким-то образом жестко запрограммированным в аппаратном обеспечении процессора. Он нашел точку входа в загрузочный код и начал выполнять этот код. Этот код, в общем случае, должен получить периферийные устройства и оперативную память, а затем запустить основное приложение. Или, по крайней мере, столько оборудования требуется перед запуском этого приложения.

Загрузка Linux во встроенную систему может быть такой же простой, как получение RAM вверх, и копирование ядра с ROM в RAM, возможно, подготовка некоторых регистров и, возможно, заполнение нескольких ячеек памяти, на которые ядро ​​просматривает, возможно, размер памяти и альтернативную командную строку, например, перейдите к началу ядра. Вам не нужно копировать ядро ​​на некоторые системы; вы можете просто перейти в ПЗУ, где он живет. Тогда Linux выведет остальную часть системы. На ПК BIOS делает много вещей, например, поднимает видео, DRAM, перечисляет PCI(e) периферийные устройства шины, поднимите жесткий диск или другую файловую систему, например, устройства, затем используя определенные пользователем на жестком диске BIOS или аналогичные периферийные устройства (флэш-накопитель USB или CD-ROM и т.д.). Начало файловой системы будет содержать некоторые способы загрузки операционной системы на основе правил кода BIOS. И это может быть еще один загрузчик (GRUB, U-Boot и т.д.), Который в конечном итоге копирует код запуска ядра или операционной системы в ОЗУ и затем переходит к нему.

Термины загрузчика и код запуска могут использоваться взаимозаменяемо. Некоторые люди могут придирчиво относиться к разным или тонким различиям, но обычно это связано со сложностью, загрузчик, такой как U-Boot, который имеет драйверы Ethernet и драйверы файловой системы и т.д., В какой-то степени является операционной системой и в любом случае U-Boot очень сложный.

Код запуска для микроконтроллера, например, может быть таким же простым, как несколько строк кода, установить указатель стека и ветвь на главную. И стартовый код/​​загрузчик может быть любым уровнем сложности между ними. Как уже упоминалось, некоторые встроенные системы загружаются и запускают свои приложения из ПЗУ, поэтому копирование и запуск не требуется. Другие требуют копирования и запускают основное приложение.

Иногда используется аппаратное обеспечение или какая-либо другая схема. Возможно, например, многие решения FPGA, на которых аппаратное обеспечение считывает данные с питания из ПЗУ и копирует его. Затем, когда процессор или другая логика освобождается, ваша программа или другие данные волшебным образом находятся в ОЗУ, готовые к использованию. Несмотря на то, что когда питание выключено, он живет в ПЗУ, к которому вы обычно не прикасаетесь. Raspberry Pi имеет еще одно решение. Чип имеет два процессора: один ARM, а другой — графический процессор графический процессор, совершенно другой набор команд, предназначенный для математических операций и т.д.. В какой-то форме, сжигается в чипе (вероятно, ROM на чипе) небольшой загрузчик, которого достаточно, чтобы поднять и прочитать SD-карту. Это GPU BTW; ARM находится в reset. Затем GPU считывает свой первый файл загрузчика с SD-карты, копирует его в ОЗУ и запускает его.

Этот загрузчик делает больше вещей, например, поднимает DRAM, а затем копирует более сложный второй (третий?) загрузчик с SD-карты на DRAM, затем запускает это. Этот код, вероятно, содержит приложение GPU для выполнения функций экрана/дисплея для системы. Кроме того, как только видео и все готово, он снова считывает SD-карту и копирует приложение ARM с SD-карты в DRAM, заполняет несколько элементов в ОЗУ (загрузочный вектор в таблице исключений (ветвь к ядру)) и некоторые другие предметы в известных местах, которые хочет получить код загрузки ядра Linux. Затем он отпускает reset на ARM. ARM в этот момент просыпается своим приложением, ядром, волшебным образом в ОЗУ.

Илон Маск рекомендует:  Обработка событий в net с помощью c#
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL