Якесь тло
Найголовніше, що вам слід знати, це те, що RaspberryPi - це дивний звір, де ARM CPUне є основним процесором - це лише копроцесор VideoCore GPU. Коли програма RaspberryPi запускається, з картки SD в кеш L2 зчитується блок GPU і виконується. Потім цей код відкриває всі важливі периферійні пристрої (оперативна пам'ять, годинник тощо) і запускає ARM CPU. Тоді завантажувач 2-го ступеня або сама операційна система може бути запущенаARM CPU .
Блок GPU - це не лише завантажувач. Це насправді операційна система (Video Core OS) сама по собі. Деякі важливі елементи системи не доступні безпосередньо процесору ARM, і для їх використання вона повинна спілкуватися GPU(використовуючи mailboxсистему обміну повідомленнями). Про це є часткова документація . Зараз Video Core OS( VCOS) час від часу співробітники Broadcom поширюються, щоб дозволити функції, потрібні Linuxядру, та, можливо, в інших місцях, щоб знайти інформацію про це. Але воно там .. десь. І є кілька людей, які пишуть свій власний код голого металу або навіть ОС на RaspberryPi, щоб допомогти вам. І звичайно багато відкритого вихідного коду - Linux ядро RasbperryPi, наприклад.RISC OS а іноді навіть деяким ОС хобі. Там немає хорошої документації з цього приводу , однак, вам доведеться рити в RaspberryPi forum,github
VideoCore є власником, немає офіційної документації та інструментів розробки. Тому, якщо ви не хочете докласти багато зусиль, ви не можете переписати VCOSвласний код. Однак є певні зусилля, щоб переробити інженер Video Core, трохи інформації ви можете знайти тут .
Інша проблема полягає в тому, що USBстек Synopsys є власником, і знову немає документації на нього, і здається, що навіть з документацією важко це надійно реалізувати. Але знову ж таки код доступний (Linux kernel, u-boot, CSUD ). Використання розширених графічних можливостей Video Coreтакож може бути важким - для графічних бібліотек є якийсь відкритий код , але це лише для ARMсторони.
Попри це, можна було зробити RISC OSпорт із доступної інформації (мені не зовсім зрозуміло, чи використовували вони лише загальнодоступну інформацію, хоча деякі люди переписують (незалежно від Broadcom) ядро Linux для магістралі, там - FreeBSDпорт, "U-boot" та інші. Тож остаточно можна написати власну ОС. Це просто не так просто, як це можливо.
Ваші цілі
Номер 1
Наскільки я знаю, немає жодного способу, щоб SoC міг почати іншим способом, ніж описаний. Тому завантажувач першого етапу повинен бути включений SD card. І це має бути GPUдвійковим, а не ARMдвійковим, що є ще однією проблемою. І в RaspberryPi немає спалаху на борту, що теж є проблемою.
Число 2
Основна проблема полягає в тому, що flashна RaspberryPi немає бортового пристрою. Ви можете додати його, і він може бути активований у вашому завантажувальному пристрої (який уже повинен був бути завантажувачем другого ступеня). Запис USB-драйвера може бути проблематичним.
Число 3, 4, 5
Це не повинно бути великою проблемою. Більшість периферійних пристроїв (принаймні ті , доступними для ARM) документуються тут . Існуючий завантажувач робить це ще простіше, оскільки ви повністю настроїли свій SoC. Тут і тут ви можете подивитися якийсь код та документацію.
Альтернативи
Я не знаю жодної іншої ради так добре, як RaspberryPi, тому важко щось рекомендувати, але ви можете поглянути на деякі зрілі проекти, такі як Beagleboard / Beaglebone / Pandaboard на базі OMAP, або ви можете слідкувати за розробкою деяких нових дощок, таких як Allwinner Cubieboard або PCduino . Все залежить від того, що саме ви хочете досягти.