Используя Linux в качестве загрузчика?
У меня есть встроенное устройство с подключенной вспышкой SPI. В основном это означает, что устройство загружает свой загрузчик и ядро Linux из небольшой части флеш-памяти.
Как устройство загружается, но до монтирования корневой файловой системы и вызова switch_root - я хотел бы дополнительно загрузить второе, другое ядро
Это возможно? Моя цель в этом состоит в том, чтобы иметь очень минимальный загрузчик и стандартное ядро во флэш-памяти, но затем поместить новое / большее ядро на жесткий диск.
Мой загрузчик очень ограничен, и я не могу прочитать новое ядро с жесткого диска.
короче
a) CPU comes out of reset, reads its bootloader from flash
b) bootloader boots, inits basic hardware, loads Linux kernel from flash
c) kernel boots, inits more hardware, and reads a second kernel from a hard disk
d) I'd like to switch to the second kernel at this point
Моя цель в этом процессе - предоставить механизм, где ядро во флэш-памяти может со временем стареть, но обновленные ядра могут поставляться через жесткий диск. Если бы мой загрузчик был более продвинутым, я бы пошел по этому пути - однако он не может инициализировать необходимое аппаратное обеспечение (контроллер диска) и не поддерживает современную файловую систему.
... я задумался над тем, можно ли поместить второе ядро в физическую память, пометить известный адрес как имеющее второе ядро, а затем выполнить сброс. Затем загрузчик может обнаружить известный адрес и проверить целостность второго ядра, выбрав его вместо одного из Flash
любые советы будут оценены!
2 ответа
Вам не нужно делать ничего слишком сложного. Просто позвони kexec
загрузиться в новое ядро. Это не может быть проще... если ваше старое ядро не было каким-то образом скомпилировано без поддержки kexec.
Посмотрите на UBOOT, это работало для меня в прошлом.
Вы можете использовать это даже для чтения файловых систем, но, должно позволить вам переключаться между несколькими изображениями. Таким образом, вы всегда перезаписываете образ, который не используете в данный момент, и переконфигурируете uboot для запуска обновления при перезагрузке.