Apa urutan boot?


35

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:

  1. Apa vektor reset untuk CPU ARM, dan bagaimana / di mana itu didefinisikan?
  2. Dari memori apa instruksi ARM CPU pertama diambil? Di mana itu, dan teknologi apa yang digunakan untuk menyimpan kode ini?
  3. Apakah itu kode ARM32 atau Thumb (atau mungkin Jazelle)? Apakah itu tergantung pada bit order rendah dari vektor reset?
  4. 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.
  5. Dalam urutan apa peripheral diinisialisasi, dan dengan kode apa?
  6. 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.


4
Yang bisa saya katakan bahwa sebagian besar informasi itu adalah sumber tertutup, seperti kode sumber, bootloader dan firmware SoC .. Untuk saat ini membagikan tidak diketahui. Anda harus tahu satu hal. BCM adalah GPU ... bukan CPU. Bootloader dimulai di bagian GPU, menginisialisasi RAM di sana dan menyerahkan ke CPU di mana tempat pertama kita memiliki akses ke kode sumber ... alias Raspbian. Semoga berhasil. Pertanyaan ini sangat luas dan sulit dijawab.
Piotr Kula

Jawaban:


38

Urutan boot Raspberry Pi pada dasarnya adalah ini:

  1. Boot tahap 1 ada dalam ROM on-chip. Memuat Tahap 2 di cache L2
  2. Tahap 2 adalah bootcode.bin. Mengaktifkan SDRAM dan memuat Tahap 3
  3. Tahap 3 adalah loader.bin. Ia tahu tentang .elfformat dan banyakstart.elf
  4. start.elfbanyak kernel.img. Kemudian ia juga membaca config.txt, cmdline.txtdan bcm2835.dtb Jika file dtb ada, itu dimuat di 0×100& kernel @ 0×8000 If disable_commandline_tagsdiatur itu memuat kernel @ 0×0 Jika tidak, ia memuat kernel @ 0×8000dan menempatkan ATAGS di0×100
  5. kernel.img kemudian dijalankan pada ARM.

Semuanya dijalankan pada GPU hingga kernel.imgdimuat di ARM.

Saya menemukan diagram ini cukup berguna:

Urutan Booting


2
Berguna. Bisakah ini diklarifikasi jika bootloader tahap ke-2 bootcode.binadalah kode yang dijalankan oleh GPU, ARM (dan kemudian jenis kode apa), atau gabungan dari semuanya? Sama untuk tahap ke-3 loader.bin(jika itu tidak hilang, sepertinya).
fgrieu

3
@ fgrieu Saya sudah mengedit jawaban untuk menyertakan klarifikasi. Semuanya dijalankan pada GPU hingga kernel.imgdijalankan pada ARM.
SG60

1
Menurutnya ini loader.bin tidak lagi digunakan. bootcode.binlangsung dimuat start.elfmenurut komit Git ini
HeatfanJohn

@ SG60: Dapatkah Anda memperbarui jawaban Anda dengan informasi dari HeatfanJohn?
Peter Mortensen

Adakah yang tahu tentang boot NOOBS? ternyata ada proses yang sedikit berbeda, melibatkan recover.elf dan beberapa kejenakaan booting lunak. Saya ingin tahu tentang mendapatkan uboot bekerja di tingkat yang sedikit lebih rendah.
Sam
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.