Разница между ICO и IDO
Сбор средств может быть выполнен различными способами. Преимущественно они требуются новичкам в сфере разработки, а также организаторам новых проектов, чтобы иметь возможность воплощать новаторские идеи. Есть несколько востребованных способов привлечения инвестиций. Сначала было разработано ICO (предложение монет первичное), которое не сразу стало востребованным инвесторами. После этого было создано IEO (предложение обмена первичное), а потом уже – IDO (известно под название предложение DEX первичное).
ICO расшифровывается как первичное предложение момент. Еще совсем недавно это был один из востребованных способов сбора инвестиций. Отлично подходит для новичков, новых компаний, которым достаточно представить технический документ с подробным описанием прилагаемой схемы.
Этого хватит для последующей реализации токенов. Монеты будут служить единицами валюты (ее принято считать функциональной). Инвесторы и сейчас утверждают, что это отличная схема, рабочая и эффективная. Приобретать токены можно за криптовалюты любого типа или же фиатные средства. По сути, они являются ставкой, так как инвесторы верят, что уплаченные средства умножатся при выходе на рынок проектов.
Интересно, что ICO функционирует еще с 2013 года, но массовое распространение эта форма привлечения средств получила ближе к середине 2017 года. В соответствии с отраслевыми отчетами ICO собирает огромные суммы, максимальная – 8 миллиардов долларов. Свою привлекательность технология потеряла так же быстро, как и получила. В 2019 году малое количество компаний ICO смогли привлечь инвесторов, и цифры были небольшие. Причина снижения спроса – влияние злоумышленников, жадность и спекуляция. Не помогли новые требования и правила, которые были введены специально. На рынок вышло IDO.
Более результативным и функциональным считается метод IDO. Он также известен под названием «первичное предложение DEX». Метод был разработан в 2019 году, летом. Впервые его представили на Binance.
Суть концепции напоминает IEO. Но место проведения IDO изменилось – оно проводится на децентрализованных биржах. К ним можно отнести Binance DEX и Uniswap. Кстати, первоначально был проведен эксперимент, во время которого платформа выделила всего 3% от общего числа токенов для IDO на сутки. Одна единица токена оценивается в 0,00005 BNB.
Применение IDO стало востребованным и показало результативность в первые недели разработки во многом за счет авторитета Binance DEX. Огромное преимущество первичного предложения DEX в том, что пользователи из разных уголков мира могут участвовать в торгах по реализации токенов. Они могут быть проведены протоколами Raven или же другими поставщиками. Но учитывайте, что риск применения этой концепции аналогичен покупке криптоактивов.
За время существования криптовалюты создано много разных схем привлечения денежных ресурсов. Указанные ICO и IDO являются наиболее популярными, но также существуют IEO и STO. Последней моделью разработки является IDO в криптовалюте. Ее главное отличие от всех остальных в том, что разработчики попытались объединить все преимущества трех схем-предшественниц, а также устранить недостатки.
При сравнении ICO и IDO заметны кардинальные отличия. Одно из них – в IDO отсутствуют листиннговые сборы. Аккумуляция средств в этой же схеме происходит на децентрализованных биржах.
Разберем другие различия детальнее:
1. Привлечение финансов. В IDO задействуется децентрализованная биржа, а в ICO – эмитенты.
2. Комиссия за листинг. У IDO ее нет, а вот у ICO присутствует.
3. Обязательный аудит проекта. Он отсутствует в обеих схемах привлечения средств. Зато имеется у IEO (указано для сравнения).
4. Ликвидность монет, которые выпускаются. В случае с ICO биржи для листинга ищет сам эмитент. А у IDO ликвидность эмитент получает непосредственно на централизованной бирже.
5. Особенности регулирования. В IDO они полностью исключены. У ICO регулировка возможна, но все зависит напрямую от юрисдикции конкретного проекта.
6. Ограничения по размещению на сторонних площадках. Они отсутствуют в обеих схемах, но есть у IEO (для сравнения).
7. Кто является ответственным за хранение средств. В случае с ICO – это эмитент. За сохранность средств у IDO несет ответственность пользователь.
Нужно также разобраться в тонкостях организации и прохождения торгов. Для заинтересованных пользователей децентрализованной биржи предусмотрена возможность регистрации новой виртуальной монеты. Услуга доступна только после того, как будет активирован определенный смарт-контакт. Когда пула ликвидности эмитента токена будет наполнен, необходимо организовать токенсейл. В случае прохождения проектом проверки, которая требуется для отсеивания скама, будет запущен процесс для привлечения максимально возможного капитала. Кстати, этот процесс возможен не только на децентрализованной бирже, которая в приоритете, так и на так называемых лаунчпад-платформах.
Наиболее выгодными считаются инвестиции в IDO. Причины просты – это более современное и технологичное решение, в котором постарались использовать только плюсы предшественников и избежать минусов.
Суть капиталовложения заключается в возможности получить наибольшую прибыль при минимально возможных рисках, связанных с потерей средств. IDO-криптовалюты предоставляют огромные и разносторонние возможности. Если ответственно подойти к оценке конкретного стартапа, то в самые короткие сроки удастся увеличить первоначальный вклад, иногда размер может быть умножен в десятки, а то и в сотни раз.
Отличие лаунчпад-платформ от децентрализованной биржи заключается в том, что есть возможность снизить риски в несколько раз. Отдельные проекты даже предоставляют страховки от потери вложенных активов. Другими словами, если инвестора постигнет неудача, то он не получит ожидаемой прибыли, зато и потери капитала не будет.
The difference between ICO and IDO
Fundraising can be done in a variety of ways. Mostly they are required by newcomers in the field of development, as well as organizers of new projects, in order to be able to embody innovative ideas. There are several popular ways to attract investment. First, an ICO (initial coin offering) was developed, which did not immediately become in demand by investors. After that, IEO was created (initial exchange offering), and then — IDO (known as the DEX primary offer).
What is ICO?
ICO stands for Initial Coin Offering. Until recently, it was one of the most popular ways to collect investments. Great for newbies, new companies who just need to submit a white paper detailing the attached schematic.
This is enough for the subsequent implementation of tokens. Coins will serve as units of currency (it is considered to be functional). Investors still claim that this is an excellent scheme, operating and efficient. You can purchase tokens for any type of cryptocurrency or fiat funds. In fact, they are a bet, since investors believe that the funds paid will multiply when projects enter the market.
It is interesting that the ICO has been operating since 2013, but this form of fundraising became widespread closer to the middle of 2017. According to industry reports, the ICO raises huge sums, the maximum is $ 8 billion. The technology lost its attractiveness as quickly as it gained. In 2019, a small number of ICO companies were able to attract investors and the numbers were small. The reason for the decline in demand is the influence of intruders, greed and speculation. The new requirements and rules that were introduced on purpose did not help. IDO entered the market.
IDO features
The IDO method is considered to be more efficient and functional. It is also known as the DEX Initial Offering. The method was developed in 2019, in the summer. It was first introduced on Binance.
The essence of the concept is similar to IEO. But the location of the IDO has changed — it is being conducted on decentralized exchanges. These include Binance DEX and Uniswap. By the way, initially an experiment was carried out, during which the platform allocated only 3% of the total number of tokens for IDO per day. One token unit is valued at 0.00005 BNB.
The use of IDO has become in demand and has shown results in the first weeks of development, largely due to the authority of Binance DEX. The huge advantage of the DEX Initial Offering is that users from different parts of the world can bid on the token sale. They can be done by Raven protocols or other vendors. But keep in mind that the risk of applying this concept is similar to buying cryptoassets.
Key differences between IDO and ICO
During the existence of cryptocurrency, many different schemes have been created for attracting money resources. The mentioned ICOs and IDOs are the most popular, but there are also IEOs and STOs. The latest development model is IDO in cryptocurrency. Its main difference from all the others is that the developers tried to combine all the advantages of the three predecessor schemes, as well as eliminate the disadvantages.
When comparing ICO and IDO, cardinal differences are noticeable. One of them is that IDO lacks listing fees. The accumulation of funds in the same scheme occurs on decentralized exchanges.
Let’s look at other differences in more detail:
1. Attracting finance. IDO uses a decentralized exchange, while ICO uses issuers.
2. Listing Fee. IDO does not have it, but ICO does.
3. Mandatory project audit. It is absent in both fundraising schemes. But IEO has it (indicated for comparison).
4. Liquidity of the coins that are issued. In the case of an ICO, the issuer is looking for an exchange for listing. And from IDO, the issuer receives liquidity directly on the centralized exchange.
5. Features of regulation. They are completely excluded in IDO. For ICO, regulation is possible, but it all depends directly on the jurisdiction of a particular project.
6. Restrictions on placement on third-party sites. They are absent in both schemes, but IEO has them (for comparison).
7. Who is responsible for holding funds. In the case of ICO, this is the issuer. The user is responsible for the safety of funds at IDO.
You also need to understand the intricacies of organizing and passing the auction. For interested users of the decentralized exchange, it is possible to register a new virtual coin. The service is available only after a specific smart contract has been activated. When the liquidity pool of the token issuer is full, it is necessary to organize a token sale. If the project passes the verification required to screen out the scam, the process will be launched to attract the maximum possible capital. By the way, this process is possible not only on a decentralized exchange, which is a priority, but also on the so-called launchpad platforms.
Where is it more profitable to invest?
Investments in IDO are considered to be the most profitable. The reasons are simple — this is a more modern and technologically advanced solution, in which they tried to use only the advantages of their predecessors and avoid the disadvantages.
The essence of an investment is the ability to get the highest profit with the lowest possible risks associated with the loss of funds. IDO cryptocurrencies provide tremendous and versatile opportunities. If you take a responsible approach to the assessment of a particular startup, then in the shortest possible time it will be possible to increase the initial investment, sometimes the size can be multiplied by tens or even hundreds of times.
The difference between launchpad platforms and a decentralized exchange is that it is possible to reduce risks several times. Some projects even provide insurance against the loss of invested assets. In other words, if the investor fails, then he will not receive the expected profit, but there will be no loss of capital either.
ICO, IDO, INO, IGO – что это?
Криптоиндустрия богата разнообразной терминологией. Новичкам порой сложно разобраться что к чему. В этой статье мы подробно разберем что такое ICO, IDO,INO и IGO. Объясним для чего они нужны и кто ими используются.
Что такое ICO
Первичное размещение монет, или ICO — это процесс, с помощью которого большинство новых криптовалют выходят на рынок. Цель большинства ICO — собрать деньги на проект. Этот процесс похож на первичное размещение акций (IPO), когда компания становится публичной. Однако ICO отличаются от IPO по нескольким параметрам.
Во-первых, ICO практически не регулируются, и эмитентам предоставляется много возможностей для выбора цены на монету и ее оборотного предложения. Эмитент ICO устанавливает статические или динамические цены и объем предложения. Например, статичная цена и динамичное предложение позволяют проекту собрать больше денег, поскольку ICO вправе выпускать столько токенов, сколько требуется.
ICO также могут предоставлять определенные выгоды и преимущества для пользователей, которые их приобретают. Например, владение определенным токеном дает пользователю права на размещение своих токенов и получение вознаграждений. Это отличается от IPO, которые обычно дают владельцам только право голоса.
ICO — самый популярный способ выпуска токенов (криптовалют), поскольку это чрезвычайно простой процесс. За небольшие инвестиции и базовый опыт кодирования практически у каждого есть возможность выпустить на рынок свой токен. Такая простота предложения позволяет получить финансирование большему числу проектов, которые традиционные венчурные фирмы могли бы пропустить.
Еще одно преимущество ICO заключается в том, что оно позволяет охватить большую аудиторию. Многие перспективные проекты способны привлечь большие сообщества, которые поддерживают проект и хотят инвестировать в его идеи. Эти сообщества обеспечивают проекты суммой от копеек до сотен миллионов.
Наконец, ICO обеспечивают высокую доходность для инвесторов. Некоторые рассматривают ICO как возможность войти на первый этаж нового проекта и потенциально купить токен на самом низком уровне. Но это срабатывает далеко не совсеми токенами, существует также вероятность того, что токен может полностью провалиться и средства будут потеряны.
ICO также многим известен своим печальным прошлым. В 2017 году, когда был его “бум”, им заинтересовались большое количество мошенников. Вследствие чего, многие инвесторы просто потеряли вложенные деньги. Теперь ICO в некоторых странах запрещен, а в других регулируется.
Что такое IDO
Initial dex offering, или IDO, — это децентрализованная краудфандинговая площадка, которая является новым способом привлечения средств в криптоиндустрии.
Обычно такой способ привлечения средств осуществляется путем обмена токенами, представляющими различные активы, размещенные на децентрализованной бирже (DEX). IDO часто проводятся, когда проект выпускает валюту или токен через децентрализованную биржу ликвидности.
Первичное предложение на DEX (IDO) опирается на пул ликвидности, где трейдеры могут обменивать друг на друга токены, включая криптоактивы и стейблкоины. Примерами пар ликвидности являются USDT/ETH.
Подобно первичным предложениям монет (ICO), предложениям токенов безопасности (STO) и первичным биржевым предложениям (IEO), эта стратегия является одним из видов привлечения криптовалютных средств, часто встречающихся сегодня.
IDO — отличный вариант для новых проектов DEX и стартапов, желающих быстрее выпустить токены и привлечь деньги.
Разница между ICO и IDO
IDO имеют несколько важных преимуществ перед ICO, помимо принципа децентрализации. Три основных преимущества IDO:
- Маркетинговые усилия разделяются платформой и проектом, а не генерируются отдельным проектом.
- IDO более стабильны, поскольку инвесторы не получают все токены сразу. Это происходит из-за уменьшенного размера продажи.
- Размещение токенов на DEX происходит сразу после продажи.
Что такое IEO
IEO – это первоначальное предложение обмена.
IEO отличаются от ICO тем, что компании-эмитенты проходят проверку третьей стороной (биржей) и должны соответствовать определенным критериям. Только те компании, которые соответствуют критериям биржи, имеют право размещать свои токены на площадке. Таким образом, криптовалютные биржи играют ту же роль, что и площадки на фондовом рынке.
Фондовая биржа отбирает компании, соответствующие ее критериям, после чего, компании проводят первичное публичное размещение акций (IPO) и впоследствии размещают свои акции на бирже. Криптовалютная биржа отбирает компании, соответствующие ее критериям, после чего, компании вправе проводить IEO и размещать свои токены на бирже.
Это отличает IEO от ICO, где компании продают свои токены напрямую инвесторам. ICO можно сравнить с внебиржевой торговлей акциями, когда акции или сертификаты участия продаются непосредственно компаниями-эмитентами инвесторам без регулирования третьей стороной.
ICO отличаются от предложений токенов ценных бумаг (STO) тем, что они регулируются криптовалютными биржами, в то время как STO регулируются государственными органами.
Что такое IGO
При первичном размещении игр (IGO) игровой проект на блокчейне продает токены, используемые в видеоигре на этапе разработки проекта. IGO приносит пользу разработчикам игры, позволяя им привлечь значительный капитал на более ранних стадиях. Покупатели, тем временем, получают доступ к NFT, которые понадобятся им для участия в проекте.
Чтобы понять, что такое NFT, вам понадобятся некоторые знания о GameFi (сочетание слов «игра» и «финансы»). Геймификация финансов стала центральным компонентом мира криптовалют. GameFi относится к игровым проектам на блокчейне, в которых участники получают токены за действия, которые они совершают в рамках видеоигры. Токены, предназначенные для видеоигры, действуют как фишки в в покере, и без них вы не сможете участвовать в игре. Именно поэтому NFT стали таким важным явлением.
Что такое токенсейл?
Продажа токенов (Token sale) — это ограниченный период продажи криптовалютных токенов публике. Наиболее распространенным типом продажи токенов является первичное предложение монет (ICO), как мы уже говорили ранее, когда инвесторы приобретают единицы новой криптовалюты у команды проекта до того, как она будет выставлена на продажу на криптобирже. Перед проведением продажи токенов некоторые криптокомпании продают часть токенов конкретным инвесторам. Такая ранняя продажа токенов называется предварительной продажей.
В 2017 году ICO были очень популярны, и многие мошенники воспользовались ими. В результате в некоторых странах ICO не разрешены, а в других они регулируются.
Продажи токенов необходимы, поскольку материнские компании привлекают внимание общественности, что позволяет их монетам процветать. Эти продажи также помогают инвесторам купить больше токенов по более низкой цене.
Если у вас появился вопрос, где можно купить токены, то самым простым решением станет – криптовалютная биржа. Но далеко не все умеют заниматься трейдингом так, чтобы он приносил прибыль. Поэтому здесь придет помощник трейдера крипто-бот. Он работает по заранее заготовленной стратегии и дает возможность трейдеру получать пассивную прибыль.
Заключение
Хоть криптовалютный рынок богат на разного рода терминологию, разобраться в ней все-таки нужно. Это необходимо, чтобы вы могли понимать о чем говорится в аналитических и крипто статьях, не заглядывая каждый раз в поисковик, для ознакомления с новыми терминами. В любом случае, все не так сложно, как может показаться на первый взгляд, нужно лишь только начать.
А для того, чтобы торговать криптовалютой уже сегодня, вам пригодится торговый бот для криптобирж Revenuebot.
Раскрываем секреты загрузочных ISO-образов
В этой статье я хочу поговорить об ISO-файлах, на которых, как известно, распространяются дистрибутивы операционных систем. Начиная писать статью, я немного сомневался в её актуальности, так как я ассоциировал ISO-образы с оптическими дисками, которые, ввиду ряда причин, уходят в прошлое. У меня было стойкое понимание, что ISO-файлы в основном нужны только для хранения образов оптических дисков, которые содержат установщик операционной системы. Но, как оказалось, всё гораздо сложнее и интереснее, особенно применительно к современному железу.
Если у вас нет много времени читать эту статью или набирать исходный код и команды, вы всегда можете найти на GitHub мой проект с исходным кодом, который можно запустить и поэкспериментировать с ним.
Также у меня была статья на Хабре, где я затрагивал тему загрузочных ISO, но не вдавался в подробности реализации.
Что вы найдёте в этой статье
Не знаю, как для кого, но для меня лучше всего запоминается то, что ты сам попробовал на практике, когда ты сделал немало ошибок, чтобы разобраться с темой. Поэтому мой рассказ о загрузочных ISO-образах будет совмещён с практикой.
Для лучшего понимания материала стоит рассматривать тему на простых воспроизводимых примерах, а потом, разобравшись в основах, разбирать более сложные вопросы. Поэтому я, как и в предыдущей статье, создал минимальный пример, который, с моей точки зрения, достаточно хорошо раскрывает тему загрузочных образов ISO.
После прочтения этой статьи вы сможете создать универсальный загрузочный образ ISO, который можно будет записать на оптический диск, внешний жёсткий диск или флеш-накопитель так, что при загрузке с него будут выполняться минимальные программы Hello, World, никак не зависимые от операционной системы. Эти программы можно считать заглушками для реальных загрузчиков операционных систем. Пример из статьи позволит вам разобраться со структурой загрузочных ISO-образов и улучшит ваше понимание процесса загрузки компьютера (bootstrapping).
Немного теории, которую необходимо знать
Как известно, теория без практики ничего не значит, справедливо и обратное утверждение. Поэтому приведу немного теории, которая позволит лучше понять, что же вы делаете.
Загрузка операционной системы на компьютере x86
При включении питания компьютера процессор сразу начинает выполнять команды. Первые команды, выполняемые процессором, принадлежат предустановленной программе, которая располагается в ROM памяти на материнской плате компьютера. Основное назначение программы – базово проверить компьютер на ошибки, проинициализировать часть устройств для дальнейшей загрузки и передать управление загрузчику, предоставив программный интерфейс для взаимодействия с собой.
Существует два вида программ, располагающихся в ROM — BIOS (Basic Input/Output system) и UEFI (Extensible Firmware Interface). Обычно компьютеры с UEFI позволяют эмулировать BIOS, если выбрать опцию Legacy Mode.
Механизм загрузки BIOS (Legacy)
BIOS не имеет никакого представления о файловых системах, установленных на устройствах, с которых осуществляется загрузка. Он рассматривает устройства как блочные, которые могут возвращать блоки данных (сектора), располагающиеся по определённым LBA (Logical Block Address). Ранее дисковые устройства ещё имели режим адресации CHS (Cylinder, Head, Sector), который был более близок к физической геометрии жёстких дисков, но сейчас он практически не используется.
Если данные удовлетворяют определённому критерию, BIOS загружает их в память, рассматривает их как программу и передаёт ей управление.
Эта программа может работать с устройствами компьютера через специальный интерфейс на основе программных прерываний. Она обычно пишется на ассемблере.
Когда BIOS передаёт управление, то процессор x86 находится в реальном режиме, а это значит, что в программе можно обратиться только к 1МiB оперативной памяти и, если вы хотите использовать всю оперативную память, то необходимо позаботиться о том, чтобы перевести процессор в защищённый режим. Такие загрузчики, как GRUB 2, как раз это и делают.
Механизм загрузки UEFI
UEFI знает о файловой системе FAT. При загрузке с устройства UEFI пытается найти на устройстве раздел с этой файловой системой и исполняемый файл UEFI в ней, после чего запустить его на выполнение.
Программа, находящаяся в исполняемом файле, может взаимодействовать с UEFI при помощи специального программного интерфейса, который использует так называемые сервисы UEFI. Она обычно пишется на языке высокого уровня С или C++.
Когда UEFI передаёт управление программе, то процессор находится в защищённом режиме, и из программы вы уже можете обращаться ко всей оперативной памяти, которая присутствует на компьютере.
Загрузка с жёсткого диска или флеш-накопителя
Загрузка с жёсткого диска или флеш-накопителя в большинстве случаев подразумевает, что они размечены на разделы, а на одном или нескольких разделах находятся загрузчики и операционные системы, которые необходимо загрузить. Мне известно о двух видах разметки: MBR (Master Boot Record) и GPT (GUID Partition Table).
MBR – более ранний способ разметки, подразумевающий разметку диска на 4 первичных раздела. Существует способ увеличить общее количество разделов за счёт создания так называемых расширенных разделов, но загрузка с таких разделов усложняется.
GPT – современный способ разметки, подразумевающий разметку диска на большое количество разделов и поддержку дисков размером более 2TiB.
На просторах Интернета существует очень распространённое заблуждение, которое заключается в том, что на компьютерах с BIOS используется ТОЛЬКО MBR-разметка, а с UEFI TOЛЬКО GPT-разметка. Это неверно.
BIOS не имеет понятия как о GPT, так и о MBR, он только знает о том, что нужно загрузить и выполнить программу, находящуюся в нулевом секторе, если этот диск является загрузочным и последние два байта в секторе равны 55AAh. Но если в результате будет передано управление загрузчику, который «понимает» GPT, то последний сможет загрузить операционную систему с раздела GPT. Разумеется, сама операционная система должна поддерживать GPT-разметку. Но даже если она не поддерживает GPT, в нулевом секторе можно разместить таблицу разделов MBR, которая будет указывать на подмножество разделов GPT (максимум 4 шт., которые находятся в пределах первых 2ТiB размеченного диска), и они будут видны этой операционной системе.
Чтобы компьютер загрузил ОС средствами UEFI, необходимо наличие системного раздела EFI на диске (EFI System Partition (ESP)), с которого осуществляется загрузка. Неважно, какая разметка используется (MBR или GPT), важно наличие самого раздела, а также наличие приложения UEFI с прописанным именем в системных переменных UEFI или имеющего стандартное имя bootx64.efi и располагающегося в директории EFI\boot в разделе ESP.
Таким образом, различие BIOS и UEFI-загрузки заключается в том, как загрузится и выполнится самая первая программа (приложение) после них. В BIOS загружается и выполняется программа, которая находится в нулевом секторе диска, в UEFI выполняется программа, которая находится на системном UEFI разделе диска.
Файловая система оптических дисков
Для хранения файлов на оптических дисках очень часто используется файловая система ISO 9660. Она имеет несколько уровней (Level 1, Level 2, Level 3) и расширений (Rock Ridge, Joliet). Также часто используется файловая система UDF, но для нашей задачи эти знания не понадобятся, так как фактически мы будем работать с секторами диска. В статье я не буду подробно рассматривать файловые системы для оптических дисков. Загрузчик, который будет загружен BIOS или UEFI для выполнения дальнейшей загрузки, должен «понимать» файловую систему оптических дисков, а я для краткости это не рассматриваю.
Загрузка с оптического диска
Для того, чтобы компьютер смог загружаться с оптического диска, BIOS или UEFI должны поддерживать стандарт El Torito, придуманный специально для этого. И тут, как и при загрузке с жёсткого диска, для BIOS важен сектор, в котором находится программа начальной загрузки, а для UEFI важен системный UEFI-раздел на диске c программой UEFI.
Скажу честно, я до последнего думал, что UEFI запускает файл bootx64.efi, который находится в файловой системе ISO 9660 на оптическом диске, однако это не так, так как UEFI понимает загрузку только с ESP, поэтому ему нужно предоставить образ ESP с файлом bootx64.efi, а в специальной структуре Booting Catalog указать расположение образа.
Гибридный ISO-образ
В настоящее время большинство дистрибутивов Linux распространяются в виде так называемых гибридных ISO-образов.
Суть гибридных ISO-образов в следующем: один и тот же образ можно посекторно записать на оптический диск или на флеш-накопитель/внешний жёсткий диск. Загрузка будет выполнена с любого из устройств, если его выбрать в качестве загрузочного. Это очень удобно для конечного пользователя. Он просто берёт образ и записывает его на оптический диск или флеш-накопитель, не выполняя никаких преобразований.
Как же это происходит? Дело в том, что первые 16 секторов в файловой системе ISO 9660, каждый из которых размером 2048 байт, используются для системных нужд, поэтому там можно разместить MBR и/или GPT. Они игнорируются BIOS/UEFI при загрузке с оптического диска, но при загрузке с флеш-накопителя они используются.
Запись о разделе в MBR или GPT будет указывать на файл с образом ESP, а в случае MBR для BIOS будет содержаться код начальной загрузки, который уже будет каким-то образом читать код из секторов и выполнять его, продолжая тем самым дальнейшую загрузку.
При всём своём удобстве этот подход не стандартизован и, например, Windows или какие-то программы по разметке диска могут считать такую информацию в MBR или GPT неверной.
Структура загрузочного ISO-образа
Любой ISO-образ должен содержать список дескрипторов томов. Каждый дескриптор занимает целый сектор (2048) байта. Дескрипторы томов размещаются начиная с 16-го сектора, если нумерация секторов осуществляется с 0.
Дескриптор тома с загрузочными записями El Torito располагается в 17-м секторе.
Структура загрузочного ISO-образа для современных компьютеров х86 представлена на рисунке.
Для загрузки с оптического диска нас интересует Boot Record Volume Descriptor. С описанием Primary Volume Descriptor и Volume Descriptor Set Terminator вы можете ознакомиться в спецификации файловой системы ISO 9660 (ECMA-119)
▍ Boot Record Volume Descriptor
Байты | Описание |
---|---|
0 | Индикатор загрузочной записи, всегда содержит значение 0x00 |
1… 5 | Идентификатор ISO-9660, всегда содержит строку CD001 |
6 | Версия дескриптора, содержит 0x01 |
7… 38 | Идентификатор загрузочной системы, всегда содержит строку EL TORITO SPECIFICATION, оставшиеся байты заполняются 0 |
39… 70 | Не используется. Всегда заполнено 0 |
71… 74 | LBA первого сектора загрузочного каталога |
75… 2047 | Не используется, всегда заполнено 0 |
▍ Booting Catalog
Booting Catalog – это массив записей размером 32 байта каждая. Количество записей не ограничено. Всего в спецификации определены 5 типов записей: Validation Entry, Default Entry, Section Header, Section Entry, Section Entry Extension. Последнюю описывать не буду, так как я не встречал её применение.
Validation Entry
Назначение Validation Entry — это подтверждение того, что образ ISO (оптический диск) действительно является загрузочным.
Байты | Описание |
---|---|
0 | Header Id всегда равен 0x01 |
1 | ID платформы 0x00 = 80×86 0x01 = Power PC 0x02 = Mac |
2..3 | Зарезервировано, всегда содержит 0 |
4..27 | ID, идентификатор производителя CD-ROM, сейчас обычно содержит 0 |
28..29 | Контрольная сумма |
30 | Всегда 0x55, участвует в подсчёте контрольной суммы |
31 | Всегда 0xAA, участвует в подсчёте контрольной суммы |
Default Entry
Назначение Default Entry — указать, что будет загружено по умолчанию. Обычно это сектора для загрузки при помощи BIOS.
Байты | Описание |
---|---|
0 | Boot Indicator (0x88 — загрузочная, 0x00 — не загрузочная) |
1 | Boot media type 0x00 — без эмуляции 0x01 — эмуляция дискеты 1.2 0x02 — эмуляция дискеты 1.44 0x03 — эмуляция дискеты 2.88 0x04 — эмуляция жёсткого диска В настоящее время чаще всего используется режим 0x00. Эмуляция дискет и жёстких дисков нужна для загрузки очень старых операционных систем. |
2 | Сегмент загрузки обычно 0x00, что подразумевает, что сектор с кодом загрузчика будет помещён в сегмент 0x07C0, как и в загрузке с жёсткого диска или дискеты |
4 | Тип системы для режима без эмуляции – 0x00 |
5 | Не используется |
6..7 | Количество секторов размером 512 байт (не 2048), которые нужно считать в сегмент загрузки |
8..11 | LBA-адрес первого сектора, который нужно загрузить в сегмент загрузки |
12..31 | Не используются, всегда содержат 0 |
Section Header
Назначение Section Header — сгруппировать возможные виды загрузки, однако обычно на практике существует ещё только один вид загрузки через UEFI.
Байты | Описание |
---|---|
0 | Header Indicator (0x90 – не последний заголовок, 0x91 – последний заголовок). В большинстве случаев, так как обычно в ISO-образе только одна секция, поле содержит 0x91. |
1 | Идентификатор платформы. 0x00 — 80×86 0x01 — Power PC 0x02 — Mac 0xEF — EFI (UEFI) Значение 0xEF отсутствует в оригинальной спецификации, но сейчас оно используется, если мы хотим выполнить загрузку средствами UEFI. |
2..3 | Количество Section Entry после заголовка. |
4..31 | Идентификатор для BIOS и загрузчика, чтобы он принял решение, использовать ли информацию из следующих секций для загрузки. В большинстве случаев тут содержатся 0. |
Section Entry
Назначение Section Entry — указать, что может быть загружено и откуда. Обычно это сектора образа ESP для загрузки при помощи UEFI.
Байты | Описание |
---|---|
0 | Booting Indicator (0x88 — загрузочная, 0x00 — не загрузочная) |
1 | Режим эмуляции (Boot media type) 0x00 — без эмуляции 0x01 — эмуляция дискеты 1.2 0x02 — эмуляция дискеты 1.44 0x03 — эмуляция дискеты 2.88 0x04 — эмуляция жёсткого диска В настоящее время чаще всего используется режим 0x00. Эмуляция дискет и жёстких дисков нужна для загрузки очень старых операционных систем. В оригинальной спецификации вы можете посмотреть, какие ещё значения может содержать этот байт. |
2..3 | Сегмент загрузки обычно 0x00, что подразумевает, что сектор с кодом загрузчика будет помещён в сегмент 0x07C0, как и в загрузке с жёсткого диска или дискеты |
4 | Тип системы для режима без эмуляции – 0x00 |
5 | Не используется, всегда равен 0x00 |
6..7 | Количество секторов размером 512 байт (не 2048), которые нужно считать в сегмент загрузки |
8..11 | LBA-адрес первого сектора, который нужно загрузить в сегмент загрузки |
12 | Selection Criteria Type. Критерий выбора. Обычно 0. Подробнее смотрите в спецификации El Torito |
13..31 | Vendor Unique Selection Criteria. Обычно 0x00. Подробнее в спецификации El Torito |
Практическая часть
Создание образа
Изначально я хотел описать в статье, как создать образ с нуля без использования сторонних программ, но потом мне показалось, что это раздует статью, её будет сложно читать, и вы потратите много времени на изучение. Поэтому использовал уже готовые решения, которые используются в Linux: Xorriso для создания образов, а для того, чтобы увидеть наглядно структуры загрузочного ISO, xxd для просмотра содержимого образа в шестандцатиричном формате
Вы всегда можете попробовать создать загрузочный ISO-файл сами, написав небольшие программы на C, Java или другом языке программирования, но в статье я на этом останавливаться не буду.
Минимальные программы-заглушки загрузчиков для BIOS и UEFI
Загрузчик для BIOS — это один или несколько секторов на диске, содержащих инструкции, которые используют сервисы (программные прерывания) BIOS и осуществляют дальнейшую инициализацию компьютера, загружают и запускают на выполнение ядро операционной системы.
Загрузчик для UEFI — это исполняемый файл, располагающийся в ESP-разделе и содержащий инструкции, которые используют сервисы UEFI, чтобы осуществлять дальнейшую инициализацию компьютера, загружать и запускать на выполнение ядро операционной системы.
Для упрощения понимания наши загрузчики не будут ничего делать кроме вывода тривиальных фраз типа «Hello, world!» на экран. Можно сказать, что это заглушки, которые могут быть использованы для написания полноценных загрузчиков в дальнейшем.
Код программы-заглушки загрузчика BIOS
Загрузчик для BIOS – это один или несколько секторов на диске. Инструкции, содержащиеся в них, процессор выполняет в реальном режиме, где доступно только 1MiB оперативной памяти.
Обычно исходный код загрузчика при помощи ассемблера превращается в бинарный файл, содержимое которого потом посекторно записывается на диск.
Для меня проще всего получить такой код, используя ассемблер fasm.
Код у нас получается достаточно простой, но существуют моменты, на которые необходимо обратить внимание.
- Так как процессор будет выполнять код в реальном режиме, нам нужно использовать директиву use16.
- Наш код будет загружаться в BIOS по адресу 0x7c00. Чтобы ассемблер закрепил корректные адреса за метками, используется директива org.
- Чтобы аппаратные прерывания не помешали начальной инициализации регистров, используется команда процессора cli.
- Очень важно проинициализировать регистры. Во многих статьях по созданию загрузочных секторов забывают этот факт. В результате вроде всё гладко работает в qemu или VirtualBox, однако в VMWare или на реальном железе код отказывается работать. Я потратил достаточно много времени, пока это не понял.
- Так как часть полученного кода будет модифицироваться Xorriso, который записывает нужные данные, то нам необходимо выполнить команду jmp, а дальше в коде зарезервировать место под эти данные.
- Я не создавал свою MBR для ISO-образа, а использовал ту, которую предоставляет загрузчик ISOLINUX, поэтому необходимо прописать значение signature, ожидаемое загрузчиком из MBR, иначе наша заглушка загрузчика для BIOS не будет выполнена.
- Значение 55AA и заполнение нулями в конце программы необязательно, но я хотел получить полноценный загрузочный сектор, который можно было бы записать в нулевой сектор жёсткого диска или флеш-накопителя, и он тоже бы выполнялся.
Код программы-заглушки загрузчика UEFI
Загрузчик для UEFI – это уже исполняемый файл, который помимо программного кода и данных содержит дополнительную информацию о том, как размещать их в оперативной памяти. Файлы .efi по формату практически совпадают с исполняемыми файлами Windows. Разумеется, в них нет вызовов функций операционной системы. Обычно исходный код пишется на языке C или С++. Мы для простоты будем использовать C.
При сборке в операционной системе Linux нам понадобится кросс-компилятор.
Необходимости комментировать что-то в программе нет ввиду её простоты, однако я добавлю, что для компиляции программы у вас должен быть установлен пакет gnu-efi, а вечный цикл (while (1)) я сделал для наглядности, чтобы сообщение не исчезало при завершении работы программы, и EFI_SUCCESS она никогда не вернёт.
Алгоритм создания загрузочного диска вручную
Я собирал образ загрузочного диска на Ubuntu 22.10.
Для начала необходимо поставить следующие пакеты, если они не установлены.
Пакет | Назначение |
---|---|
make | Утилита make |
gcc-mingw-w64 | Компилятор C |
fasm | Ассемблер |
gnu-efi | Библиотека для создания UEFI-приложений |
binutils | Утилиты для работы с объектными файлами |
mtools | Утилиты для работы с образом раздела FAT |
dosfstools | Утилиты для форматирования |
xorriso | Утилита для создания ISO-образов |
isolinux | Загрузчик, который позволяет загружаться с оптических дисков. Нам от него нужен только MBR для гибридного ISO |
xxd | Утилита для просмотра бинарных файлов. В частности, она нам понадобится для просмотра структуры созданного ISO-образа |
qemu-system-x86 | Эмулятор, который позволяет эмулировать компьютеры с BIOS и UEFI |
ovmf | Образ прошивки UEFI для эмулятора |
1. Создаём необходимые директории.
2. Создаём файлы bioshello.asm и efihello.c с исходным кодом наших программ-заглушек загрузчиков.
3. Компилируем заглушку для загрузчика BIOS.
4. Компилируем заглушку для загрузчика UEFI.
5. Создаём образ ESP, создаём в нём директории, копируем в него файл bootx64.efi.
6. Создаём структуру из файлов и директорий, которые будут размещены в образе ISO.
7. Создаём гибридный загрузочный образ ISO.
8. Экспериментируем и проверяем работу образа в различных эмуляторах, например qemu, виртуальных машинах (VMWare, Virtual Box), записываем образ на оптический диск и флеш-накопитель (при помощи программ Win32DiskImager, balenaEtcher).
Например, чтобы запустить в qemu-эмуляторе загрузочный ISO с использованием BIOS, если бы он был записан на оптический диск:
Чтобы запустить в qemu-эмуляторе загрузочный ISO с использованием UEFI, если бы он был записан на флеш-накопитель:
Чтобы выйти из эмулятора, нужно нажать клавиши Ctrt + A, а потом X.
Я думаю, о том, как запустить эмуляцию запуска загрузочного диска с использованием BIOS с флеш-накопителя и с использованием UEFI с оптического диска вы догадаетесь сами.
Ещё один способ создания загрузочного флеш-накопителя в Windows
Внимательный читатель мог заметить, что зачем-то в ISO-образ помимо образа ESP помещается и файл bootx64.efi. Напрашивается вопрос, зачем это делается, если UEFI нужен именно образ ESP в ISO-образе? Ответ заключается в том, что, разместив файл в образе ISO, можно создать загрузочный флеш-накопитель путём простого копирования всех файлов из ISO-образа.
Единственное, что нужно это разметить и отформатировать флеш-накопитель, используя команду diskpart. Обращаю внимание, что хотя способ и простой, вы обязательно должны понимать, что вы делаете и выполнять эту процедуру очень внимательно, так как вы можете уничтожить содержимое вашего жёсткого диска, если неправильно выберете диск, на котором будете осуществлять разметку и форматирование.
- Запускаем программу diskpart.
- Выводим на экран список доступных дисков командой list disk.
- Выбираем среди них флеш-накопитель, который мы будем размечать и форматировать командой select disk.
- Выполняем очистку выбранного диска командой clean.
- Создаём первичный раздел командой create partition primary.
- Форматируем раздел командой format fs=fat32 quick.
- Выходим из diskpart командой exit.
- Копируем файлы из ISO-образа на флеш-накопитель простым копированием файлов
В нашем случае нам достаточно скопировать только директорию EFI, так как остальные файлы использоваться не будут, но для простоты скопируйте все файлы из ISO-образа.
Изучение структуры созданного загрузочного ISO-образа
Созданный образ у нас находится в директории out и имеет имя bootdisk.iso.
1. Выведем номер сектора, где располагается Booting Catalog:
Здесь 4 — это количество байт, которые выводим, 17 — номер сектора с Boot Record Volume Descriptor, 2048 — размер сектора, 71 — смещение внутри сектора, где располагается LBA Booting Catalog.
Номер сектора занимает 4 байта, поэтому нужно знать, какой порядок байтов используется Big Endian или Little Endian. Я не нашёл в спецификации El Torito, какой порядок используется, но, судя по всему, это Little Endian, поэтому байты нужно читать справа налево, получая 0x00000021.
2. Выведем первые четыре записи Booting Catalog:
Здесь 32 — это размер записи в Booting Catalog, 4 — количество записей, $(expr $(echo $((0x21))) — десятичное представление 0x21, 2048 — размер сектора.
3. Выведем LBA-адрес сектора, который будет загружен при загрузке средствами BIOS:
Здесь 4 — количество байт, которые выводим, 32 — размер записи в Booting Catalog (мы берём данные из Default Entry, поэтому пропускаем 32 байта), 8 — смещение внутри Default Entry, где располагается LBA загрузчика для BIOS, 2048 — размер сектора.
4. Выведем первые 512 байт этого сектора (это наша программа, которую мы написали на ассемблере и откомпилировали).
5. Выведем LBA сектора, где располагается образ раздела ESP, необходимый для загрузки средствами UEFI.
6. Выведем первые 512 байт образа ESP.
LBA адресов теоретически могут быть у вас быть другие. Я привёл те, которые были у меня.
Вы можете получить LBA адресов, по которым располагается откомпилированная программа на ассемблере, используя структуры MBR и GPT, находящиеся в первых секторах, изучив документацию по MBR и GPT. Здесь я приводить не буду, оставляю на самостоятельное изучение. Скажу только, что они будут отличаться, так как используются в этом случае сектора по 512 байт, а не по 2048.
Создание среды для сборки
Для создания воспроизводимого окружения для сборки очень удобно использовать Docker. Он позволяет создавать изолированные окружения с необходимыми зависимостями. Мы тоже будем использовать его, ниже я привожу Dockerfile.
Вы можете собрать образ Docker со всеми необходимыми для сборки зависимостями, используя команду.
Для запуска контейнера в интерактивном режиме в PowerShell в директории, где у вас содержатся файлы bioshello.asm и efihello.c нужно ввести команду.
Автоматизация сборки ISO-образа
Для автоматизации сборки из исходников существует множество различных утилит, но для простоты мы будем использовать make.
Основное отличие утилиты make от обычных shell-скриптов заключается в том, что она:
- отслеживает зависимости в исходных файлах;
- пересобирает только при наличии изменений.
Данный Makefile позволяет собрать ISO-образ (make clean all), а также запустить его в эмуляторе с BIOS, UEFI, с флеш-накопителя и cdrom, что понятно из названий.
Полезные ссылки
-
. . . . — программа для форматирования (форматирует USB-накопители тоже). Иногда помогает, когда программы записи образов отказываются записывать образ. — программа для записи образов на флеш-накопитель. — программа для записи образов на флеш-накопитель. Иногда записывает, когда и balenaEtcher отказывается. — сайт с информацией по разработке ОС, где среди прочего есть информация по загрузке ОС. — сайт с исчерпывающей информацией по операционным системам, но лучше искать информацию на нём с помощью Google.
Заключение
В статье создан минимальный гибридный ISO-образ, который позволяет понять основы загрузки на компьютерах (BIOS и UEFI c жёсткого диска, флеш-накопителя, оптического диска). Многие вопросы не были рассмотрены с целью упрощения, так как статья имеет познавательный, а не энциклопедический характер и не рассчитана на тех, кто имеет значительный опыт по этой теме.
Минимальный гибридный образ не содержит никаких операционных систем, он содержит только заглушки для загрузчиков, которые позволяют понять механизмы загрузки и структуру самого гибридного образа.
Я не рассматривал загрузочные образы операционной системы Windows и реализацию загрузки с оптических дисков в Windows, но, получив знания из статьи, вам будет гораздо проще понять, так как там тоже используется El Torito.
Надеюсь, я раскрыл тему создания загрузочных ISO-образов хотя бы на базовом уровне и не сильно утомил детализацией, а вы не будете так пугаться темы загрузочных образов, как пугался я. Вы гораздо лучше будете понимать, почему у вас не грузится операционная система с ISO-образа дистрибутива, и что вы сделали не так.