Как внутри работает fastboot boot ‹kernel›?

Fastboot имеет следующую удобную функцию (если загрузка пользовательского образа не удалась, устройство просто волшебным образом загрузит изображение по умолчанию в следующий раз, и все будет хорошо):

Для загрузки с использованием образа ядра на стороне хоста

Эта команда позволяет вам загрузить образ ядра (и необязательный образ корневой файловой системы) и загрузить телефон с ними вместо использования ядра и rootfs в разделе загрузочной флеш-памяти. Это очень полезно при разработке ядра или изменении rootfs.

fastboot boot ‹ядро> [‹ ramdisk>]

Кто-нибудь знает, как это работает? Копируется ли ядро ​​в специальный загрузочный раздел перед перезагрузкой устройства? (ОБНОВЛЕНИЕ: как указано в ответе, перезагрузки нет, так как fastboot - это этап процесса загрузки, который в основном делает мой вопрос бессмысленным.) Я изучал исходный код fastboot, но кажется, он содержит только то, что происходит на стороне хоста, а не на устройстве.

Я имею в виду, что функция прошивки работает довольно просто, я могу имитировать ее, просто скопировав загрузочный образ с пользовательским ядром в раздел boot, например, через:

dd if='<my_boot.img>' of='/dev/block/platform/msm_sdcc.1/by-name/boot'

Кстати: я задаю вопрос из-за приложения, которое разрабатываю; Я бы хотел "без риска" загрузить собственное ядро ​​непосредственно с устройства, на котором оно хранится, например на SD-карту.


person jckuester    schedule 08.01.2016    source источник


Ответы (1)


Копируется ли ядро ​​в специальный загрузочный раздел перед перезагрузкой устройства?

Нет, ни один раздел не будет изменен.
Загрузка ядра означает загрузку (т. Е. Чтение в память) образа ядра с запоминающего устройства. Эта быстрая загрузка похожа на сетевую, например образ ядра загружается с сервера / хоста по каналу Ethernet с использованием TFTP. Если единственной целью является загрузка системы с использованием образа ядра, то просто нет причин также записывать образ ядра в раздел, особенно если он не был явно указан.

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

Кто-нибудь знает, как это внутренне работает?

Программа fastboot - это альтернативный загрузчик, который запускается после перезагрузки устройства.
Ядро загружается с хоста через USB в память. Необязательные rootfs (ramdisk или, возможно, образ initramfs) также могут быть загружены с хоста через USB в память. После загрузки можно начинать обычную загрузку ядра.

Кстати: я задаю вопрос из-за приложения, которое разрабатываю; Я бы хотел "без риска" загрузить собственное ядро ​​прямо с устройства, где оно хранится, например. на SD-карту

Вам, вероятно, придется использовать какой-то другой загрузчик / метод, кроме этого fastboot.

person sawdust    schedule 08.01.2016
comment
Я ошибочно предполагал, что устройство снова перезагружается после режима fastboot; но совершенно логично, что устройство просто переходит к следующему этапу загрузки, используя ядро, скопированное в память. Спасибо за разъяснение! Так что мою идею однократной загрузки с устройства, вероятно, трудно реализовать, или, по крайней мере, задача, подверженная ошибкам, поскольку настраиваемый загрузчик - это что-то конкретное для устройства? - person jckuester; 09.01.2016
comment
Да, загрузчики обычно зависят от устройства / платы. Fastboot, похоже, является интерфейсом GUI к фактическому загрузчику телефона, возможно, U-Boot. Попробуйте поиграть с командой getvar с различными переменными среды U-Boot, такими как < b> bootargs и bootcmd. Сообщает ли команда devices об обнаружении SD-карты (U-Boot может называть ее mmc вместо SDcard)? - person sawdust; 09.01.2016
comment
Почему бы вам просто не загрузить собственное ядро ​​через fastboot? Бонус в том, что если это не сработает, вы можете просто перезагрузиться в работающее ядро ​​на хранилище. - person tangrs; 09.01.2016