Saya bertanya-tanya apa urutan boot Raspberry Pi dalam pengaturan yang khas (katakanlah NOOBS), dari aplikasi daya (atau pengaturan ulang jika itu berbeda) hingga, katakanlah, kemunculan logo; atau di mana itu dijelaskan.
Selain gambaran umum yang paling dibutuhkan dari urutan itu, saya paling tertarik pada tahap awal:
- Apa vektor reset untuk CPU ARM, dan bagaimana / di mana itu didefinisikan?
- Dari memori apa instruksi ARM CPU pertama diambil? Di mana itu, dan teknologi apa yang digunakan untuk menyimpan kode ini?
- Apakah itu kode ARM32 atau Thumb (atau mungkin Jazelle)? Apakah itu tergantung pada bit order rendah dari vektor reset?
- Apakah sumber (atau pembongkaran, atau pembuangan) dari kode boot awal itu tersedia? Jika tidak, adakah hal teknis yang mencegah penggunaan port JTAG untuk menentukan itu? Mengenai hukum, saya siap untuk mengambil risiko memercayai pemahaman saya tentang hukum yang berlaku di tempat saya tinggal (Prancis), yaitu bahwa saya sepenuhnya diizinkan untuk menganalisis komputer saya sendiri, setidaknya tanpa adanya kontrak eksplisit. persyaratan untuk tidak melakukannya.
- Dalam urutan apa peripheral diinisialisasi, dan dengan kode apa?
- Di samping CPU ARM, apakah ada beberapa prosesor / automata yang berjalan di BCM2835, dan secara afirmatif bagaimana urutan bootnya terkait dengan CPU ARM?
Saya siap untuk mempelajari Manual Referensi Teknis CPU ARM dan Peripheral ARM BCM2835 , atau dokumen lainnya.
Pembaruan: Setelah memposting, saya menemukan ini dan ini , menyatakan GPU BCM2835 bertindak sebagai master ARM, dan sangat terlibat dalam urutan boot.
Jawaban:
Urutan boot Raspberry Pi pada dasarnya adalah ini:
bootcode.bin
. Mengaktifkan SDRAM dan memuat Tahap 3loader.bin
. Ia tahu tentang.elf
format dan banyakstart.elf
start.elf
banyakkernel.img
. Kemudian ia juga membacaconfig.txt
,cmdline.txt
danbcm2835.dtb
Jika file dtb ada, itu dimuat di0×100
& kernel @0×8000
Ifdisable_commandline_tags
diatur itu memuat kernel @0×0
Jika tidak, ia memuat kernel @0×8000
dan menempatkan ATAGS di0×100
kernel.img
kemudian dijalankan pada ARM.Semuanya dijalankan pada GPU hingga
kernel.img
dimuat di ARM.Saya menemukan diagram ini cukup berguna:
sumber
bootcode.bin
adalah kode yang dijalankan oleh GPU, ARM (dan kemudian jenis kode apa), atau gabungan dari semuanya? Sama untuk tahap ke-3loader.bin
(jika itu tidak hilang, sepertinya).kernel.img
dijalankan pada ARM.loader.bin
tidak lagi digunakan.bootcode.bin
langsung dimuatstart.elf
menurut komit Git ini