Некоторый фон
Самая важная вещь, которую вы должны знать, это то, что RaspberryPi - это странный зверь, у ARM CPU
которого не основной процессор, а только сопроцессор VideoCore GPU
. Когда RaspberryPi запускается, двоичный объект GPU считывается с SD-карты в кэш L2 и выполняется. Затем этот код вызывает все важные периферийные устройства (RAM, часы и т. Д.) И запускает ARM CPU
. Затем можно запустить загрузчик 2-й ступени или саму операционную систему ARM CPU
.
GPU blob - это не только загрузчик. Это на самом деле операционная система (ОС Video Core) сама по себе. Некоторые важные элементы системы не доступны напрямую процессору ARM, и он должен взаимодействовать GPU
(используя mailbox
систему обмена сообщениями), чтобы использовать их. Есть частичная документация об этом доступно. Теперь Video Core OS
( VCOS
) время от времени сотрудники Broadcom расширяют возможности для включения функций, необходимых Linux
ядру, RISC OS
а иногда даже некоторым хобби-операционным системам. Там нет хорошей документации об этом, однако, вам придется копаться в RaspberryPi forum
,github
и, возможно, другие места, чтобы найти информацию об этом. Но это там .. где-то. И есть несколько человек, которые пишут свой собственный голый код или даже операционные системы на RaspberryPi, чтобы помочь вам. И, конечно же, много открытого исходного кода - например, ядра Linux RasbperryPi.
VideoCore является проприетарным, нет официальной документации и средств разработки. Поэтому, если вы не хотите прилагать много усилий, вы не можете переписать VCOS
свой собственный код. Тем не менее, есть некоторая попытка перепроектировать Видео Ядро, вы можете найти некоторую информацию здесь .
Другая проблема заключается в том, что USB
стек от Synopsys является проприетарным, и опять же нет документации для него, и кажется, что даже с документацией трудно надежно его реализовать. Но опять же, код доступен (ядро Linux, u-boot, CSUD ). Использование расширенных графических возможностей Video Core
также может быть затруднено - есть некоторый открытый исходный код для графических библиотек, но это только для ARM
стороны.
При этом можно было сделать RISC OS
порт доступным из информации (хотя мне не совсем понятно, использовали ли они только общедоступную информацию), некоторые люди переписывают (независимо от Broadcom) ядро Linux для mainline, там это FreeBSD
порт, 'U-boot` и другие. Так что, безусловно, можно написать свою собственную ОС. Это не так просто, как могло бы быть.
Ваши цели
Номер 1
Насколько я знаю, SoC не может быть запущен иначе, чем описанный. Итак, загрузчик первого этапа должен быть включен SD card
. И это должен быть GPU
двоичный файл, а не ARM
двоичный, что является еще одной проблемой. И в RaspberryPi нет встроенной вспышки, что также является проблемой.
Номер 2
Основная проблема в том, что flash
на RaspberryPi нет встроенной платы . Вы можете добавить один, и он может быть активирован в вашем загрузчике (который уже должен быть загрузчиком 2-го этапа). Однако написание драйвера USB может быть проблематичным.
№ 3, 4, 5
Это не должно быть большой проблемой. Большинство периферийных устройств (по крайней мере, те, которые доступны для ARM
) описаны здесь . Существующий загрузчик делает это еще проще, поскольку вы полностью настроили свой SoC. Вы можете посмотреть здесь и здесь для некоторого кода и документации.
альтернативы
Я не знаю ни одной другой доски так хорошо , как RaspberryPi , так что трудно рекомендовать что - то , но вы можете взглянуть на некоторые зрелые проекты , как OMAP основе Beagleboard / Beaglebone / Pandaboard или вы можете следить за развитием некоторых новых плат , таких как ALLWINNER основе Cubieboard или PCduino . Все зависит от того, что именно вы хотите достичь.
Чтобы обновить замечательный ответ Кшиштофа, Broadcom наконец-то публично выпустил некоторый код, лицензированный как 3-Clause BSD, чтобы помочь в создании драйвера GPU с открытым исходным кодом. Попытка «rpi-open-firmware» заменить блок прошивки Raspberry Pi VPU началась в 2016 году: https://github.com/christinaa/rpi-open-firmware . Подробнее на https://news.ycombinator.com/item?id=11703842
Существует несколько альтернативных плат, кратко описанных и связанных с RaspberryPi - Debian Wiki , включая ODROID-C1, Cubieboard, Banana Pi, OLimeuxIno Wifi от Olimex и OlinuxIno Mini, EOMA68 и черный Beaglebone.
источник
На самом деле вы можете многое сделать с загрузчиком U-boot с Raspberry Pi. Вы просто позволяете графическому процессору загружать SoC вашего ARM-сопроцессора с U-boot образом в качестве «ОС».
Я нашел эту статью полезной в качестве примера. Я не сделал этого (пока), но я планирую. Я случайно нашел ваш вопрос, когда искал способ сделать это сам, а затем я нашел статью, и она выглядела так, как будто она может быть полезна для других, ищущих подобное.
Есть еще одна статья, которая содержит более подробные инструкции по созданию образа U-boot.
источник