Уровень хакерства малины пи

35

Я работаю со встроенными системами (в основном, с микроконтроллерами) около 3 лет. Я хочу знать, сколько RPi на самом деле с открытым исходным кодом? Я знаю, что Arduino дает нам полную информацию об оборудовании / программном обеспечении и т. Д. Но как насчет RPi? Это важно, так как моя команда и я хотим сделать следующее с Raspberry Pi [этот проект намеревается использовать RPi точно так же, как arduino => no OS]:

  1. Перепишите основной загрузчик (ПЗУ) для загрузки с флэш-памяти, а не с внешней SD-карты.
  2. Во встроенной флэш-памяти есть дополнительный загрузчик, который активирует USB-порт пи и слушает его. Он должен принимать двоичный код (который он получит с моего компьютера) и сохранять его на флэш-памяти. позже начну его выполнять.
  3. Разработайте наши собственные драйверы устройств для обработки протоколов связи.
  4. Разработайте собственную среду загрузки и отладки для PI вместе с нашей собственной реализацией встроенного C для ARM (необходимого для управления GPIO и т. Д.)
  5. Реализуйте нашу собственную ОС для встроенных систем, если это возможно.

Это возможно с малиновым пи? Если нет:
-> Какие из моих пяти целей не возможно с Raspberry Pi. какие изменения я должен внести в свой проект, если мне придется работать с PI?
-> Какие еще доски есть на рынке, которые позволят мне выполнить именно то, что я хочу?

Дипак
источник

Ответы:

76

Некоторый фон

Самая важная вещь, которую вы должны знать, это то, что 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 . Все зависит от того, что именно вы хотите достичь.

Кшиштоф Адамски
источник
3
Я хочу +100 этот ответ. Отлично сработано.
Ориента
@maligree LOL, не волнуйтесь - это уже сделано! :)
xxmbabanexx
1
+1 за Beablebone, потому что он на 100% с открытым исходным кодом, и у вас есть возможность «перевоспитать» аппаратное обеспечение и создать собственную печатную плату
portforwardpodcast
5

Чтобы обновить замечательный ответ Кшиштофа, 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.

nealmcb
источник
Лично я думаю, что альтернативы не так хороши, многие платы ODROID осуществляют проверку подписи в загрузчике и мешают запускать на них свой собственный код. Семейство TI OMAP3 существует в защищенном режиме до вызова вашего кода, что также ограничивает возможности его использования. VPU на RPi на самом деле довольно хороший, я думаю, это то, что дает ему преимущество над другими платами, и теперь, когда у нас есть хороший набор инструментов для этого, все выглядит хорошо.
Кристина Брукс
1

На самом деле вы можете многое сделать с загрузчиком U-boot с Raspberry Pi. Вы просто позволяете графическому процессору загружать SoC вашего ARM-сопроцессора с U-boot образом в качестве «ОС».

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

Есть еще одна статья, которая содержит более подробные инструкции по созданию образа U-boot.

Алан Миммс
источник
1
Этот вид ответа может быть полезен в начале, но через пару лет ссылки перестают работать, и нет ни единого намека на то, каким был их контент. Подумайте хотя бы о том, какую ветку U-boot и какой компилятор вы использовали.
Дмитрий Григорьев
Спасибо Дмитрий. Я скоро вернусь к этому и исправлю это, когда у меня будет время.
Алан Миммс