Tingkat Hackability pi raspberry

35

Saya telah bekerja dengan sistem tertanam (kebanyakan pengendali mikro) selama sekitar 3 tahun. Saya ingin tahu berapa banyak RPi sebenarnya open source ?? Saya tahu Arduino memberi kami detail lengkap tentang perangkat keras / lunak, dll. Tapi bagaimana dengan RPi? Ini penting karena tim saya dan saya ingin melakukan yang berikut dengan pi raspberry [proyek ini bermaksud menggunakan RPi persis seperti arduino => tanpa OS]:

  1. Tulis ulang bootloader utama (ROM) untuk boot dari flash daripada kartu SD eksternal.
  2. Memiliki bootloader sekunder di flash on board, ini mengaktifkan port usb pi dan mendengarkannya. Itu harus menerima kode biner (yang akan didapat dari PC saya) dan menyimpannya di flash. kemudian mulai jalankan.
  3. Kembangkan driver perangkat kami sendiri untuk menangani protokol komunikasi.
  4. Kembangkan lingkungan pengunggah dan debug kami sendiri untuk PI, bersama dengan implementasi kustom kami dari C untuk ARM (diperlukan untuk mengontrol GPIO, dll.).
  5. Terapkan OS kita sendiri untuk sistem tertanam jika memungkinkan.

Apakah ini mungkin dengan raspberry Pi? Jika tidak:
-> Manakah dari lima gol saya yang tidak mungkin dengan raspberry pi. perubahan apa yang harus saya buat untuk proyek saya jika saya harus bekerja dengan PI?
-> Papan apa lagi yang ada di pasar yang akan membiarkan saya mencapai apa yang saya inginkan?

deepak
sumber

Jawaban:

76

Beberapa latar belakang

Yang paling penting yang harus Anda ketahui adalah bahwa RaspberryPi adalah binatang aneh di mana ARM CPUbukan CPU utama - itu hanya co-prosesor untuk VideoCore GPU. Ketika RaspberryPi dimulai, gumpalan GPU dibaca dari kartu SD ke cache L2 dan dieksekusi. Kode ini kemudian memunculkan semua periferal penting (RAM, jam, dll) dan memulai ARM CPU. Kemudian bootloader tahap 2 atau beberapa sistem operasi itu sendiri dapat dijalankan ARM CPU.

Gumpalan GPU bukan hanya bootloader. Ini sebenarnya adalah sistem operasi (Video Core OS) dengan sendirinya. Beberapa elemen penting dari sistem tidak dapat diakses langsung oleh ARM CPU dan harus berkomunikasi dengan GPU(menggunakan mailboxsistem pesan) untuk menggunakannya. Ada dokumentasi parsial tentang ini tersedia. Now Video Core OS( VCOS) diperpanjang dari waktu ke waktu oleh karyawan Broadcom untuk mengaktifkan fitur yang dibutuhkan oleh Linuxkernel, RISC OSatau terkadang bahkan beberapa OS hobi. Tidak ada dokumentasi yang baik tentang ini, Anda harus menggali di RaspberryPi forum,githubdan mungkin tempat lain untuk mencari informasi tentang ini. Tapi itu ada di suatu tempat. Dan ada beberapa orang yang menulis kode logam telanjang mereka sendiri atau bahkan OS pada RaspberryPi untuk membantu Anda. Dan tentu saja banyak kode sumber terbuka - kernel Linux RasbperryPi misalnya.

VideoCore adalah hak milik, tidak ada dokumentasi resmi dan alat pengembangan. Jadi, kecuali jika Anda ingin melakukan banyak upaya, Anda tidak dapat menulis ulang VCOSdengan kode Anda sendiri. Namun, ada beberapa upaya untuk merekayasa balik Core Video, Anda dapat menemukan beberapa informasi di sini .

Masalah lain adalah bahwa USBtumpukan oleh Synopsys adalah milik dan sekali lagi tidak ada dokumentasi untuk itu dan tampaknya bahkan dengan dokumentasi sulit untuk mengimplementasikannya dengan andal. Tetapi sekali lagi, kode tersedia (kernel Linux, u-boot, CSUD ). Menggunakan kemampuan grafik canggih Video Coremungkin juga sulit - ada beberapa kode sumber terbuka untuk pustaka grafis, tetapi itu hanya untuk ARMsisi.

Yang sedang berkata, adalah mungkin untuk membuat RISC OSport dari informasi yang tersedia (itu tidak sepenuhnya jelas bagi saya jika mereka hanya menggunakan informasi yang dapat diakses publik, meskipun), beberapa orang menulis ulang (terlepas dari Broadcom) kernel Linux untuk arus utama, ada adalah FreeBSDporta, 'U-boot` dan lainnya. Jadi sangat mungkin untuk menulis OS Anda sendiri. Itu tidak semudah mungkin.

Tujuan Anda

Nomor 1

Sejauh yang saya tahu, tidak ada cara bahwa SoC bisa memulai dengan cara lain dari yang dijelaskan. Jadi bootloader tahap pertama harus dihidupkan SD card. Dan itu harus menjadi GPUbiner, bukan ARMbiner yang merupakan masalah lain. Dan tidak ada flash on board di RaspberryPi yang juga merupakan masalah.

Nomor 2

Masalah utama adalah bahwa tidak ada on-board flashdi RaspberryPi. Anda bisa menambahkan satu dan itu bisa diaktifkan di bootloader Anda (yang seharusnya sudah menjadi bootloader tahap 2). Menulis driver USB bisa menimbulkan masalah.

Nomor 3, 4, 5

Ini seharusnya tidak menjadi masalah. Sebagian besar perangkat (setidaknya yang dapat diakses ARM) didokumentasikan di sini . Bootloader yang ada menjadikan ini lebih mudah karena SoC Anda sudah sepenuhnya terkonfigurasi. Anda dapat melihat di sini dan di sini untuk beberapa kode dan dokumentasi.

Alternatif

Saya tidak tahu papan lain sebaik RaspberryPi sehingga sulit untuk merekomendasikan sesuatu tetapi Anda dapat melihat beberapa proyek dewasa seperti OMAP berbasis Beagleboard / Beaglebone / Pandaboard atau Anda dapat mengikuti pengembangan beberapa papan baru seperti Allwinner berdasarkan Cubieboard atau PCduino . Itu semua tergantung pada apa yang ingin Anda capai.

Krzysztof Adamski
sumber
3
Saya ingin memberi 100 jawaban ini. Sudah selesai dilakukan dengan baik.
orithena
@maligree lol, jangan khawatir - ini sudah dilakukan! :)
xxmbabanexx
1
+1 untuk Beablebone karena merupakan 100% opensource dan Anda memang memiliki kemampuan untuk "merespek" perangkat keras dan membuat papan sirkuit Anda sendiri
portforwardpodcast
5

Untuk memperbarui jawaban hebat Krzysztof, Broadcom akhirnya secara terbuka merilis beberapa kode, dilisensikan sebagai 3-Clause BSD, untuk membantu pembuatan driver GPU open source. Upaya "rpi-open-firmware" untuk menggantikan gumpalan firmware Raspberry Pi VPU dimulai pada tahun 2016: https://github.com/christinaa/rpi-open-firmware . Lihat lebih lanjut di https://news.ycombinator.com/item?id=11703842

Ada sejumlah papan alternatif yang dijelaskan dan ditautkan secara singkat dari RaspberryPi - Debian Wiki , termasuk ODROID-C1, Cubieboard, Banana Pi, OLinuxIno Wifi Olimex dan OlinuxIno Mini, EOMA68, dan Beaglebone black.

nealmcb
sumber
Secara pribadi, saya pikir alternatifnya tidak terlalu bagus, banyak papan ODROID memberlakukan tanda tangan memeriksa bootloader dan menghentikan Anda dari menjalankan kode Anda sendiri pada mereka. Keluarga TI OMAP3 ada mode aman sebelum memanggil kode Anda juga membatasi apa yang dapat Anda lakukan dengannya. VPU pada RPi sebenarnya cukup bagus, saya pikir itulah yang memberikan keunggulan pada papan lain dan sekarang kami memiliki toolchain yang bagus untuk itu, semuanya terlihat baik.
Kristina Brooks
1

Sebenarnya ada cukup banyak yang dapat Anda lakukan dengan bootloader U-boot dengan Raspberry Pi. Anda pada dasarnya hanya membiarkan GPU memuat SoC coprocessor ARM Anda dengan gambar U-boot sebagai "OS".

Saya menemukan artikel ini bermanfaat sebagai contoh. Saya belum melakukannya (belum), tetapi saya berencana untuk melakukannya. Saya kebetulan menemukan pertanyaan Anda ketika saya sedang mencari cara untuk melakukan ini sendiri, dan kemudian saya menemukan artikel itu dan sepertinya itu mungkin berguna bagi orang lain yang mencari yang serupa.

Ada artikel lain yang berisi instruksi lebih luas untuk membuat image U-boot.

Alan Mimms
sumber
1
Ini adalah jenis jawaban yang mungkin berguna di awal, tetapi setelah beberapa tahun tautan berhenti bekerja dan tidak ada petunjuk apa pun tentang konten mereka. Pertimbangkan setidaknya untuk mengatakan cabang U-boot mana dan kompiler mana yang telah Anda gunakan.
Dmitry Grigoryev
Terima kasih Dmitry. Saya akan segera kembali ke sini dan memperbaikinya ketika saya punya waktu.
Alan Mimms