Bagaimana cara Raspberry Pi boot?

57

Saya memiliki komputer mini raspberry dan saya bertanya-tanya bagaimana hal itu dapat melakukan seluruh proses boot. Saya dapat mengkompilasi kernel dan init ramdisk saya sendiri dengan skrip saya sendiri dan membangun sistem linux minimal saya sendiri di PC, tetapi untuk itu saya perlu menggunakan beberapa bootloader. Raspberry sepertinya tidak mendukung bootloader sama sekali.

Tampaknya entah bagaimana boot menggunakan GPU-nya yang membaca beberapa partisi pada kartu SD (mungkin yang berbendera bootable) yang perlu diformat dalam FAT32, lalu membaca beberapa file dari sana, yang disediakan, misalnya oleh raspbian.

Tetapi bagaimana saya bisa boot kernel saya sendiri, dengan kustomisasi saya sendiri yang saya kompilasi sendiri? Di mana saya harus menyalin image kernel / initrd (ram disk) sehingga raspberry menemukannya dan mem-boot darinya? Saya pada dasarnya mencari beberapa dokumentasi teknis yang sangat rinci yang menjelaskan proses boot pada raspberry atau hanya beberapa penjelasan tentang ini.

Petr
sumber
1
kemungkinan duplikat dari Apa yang terjadi selama proses booting?
asalamon74

Jawaban:

59

Dari pos forum Raspberry Pi ini [Diedit untuk mencerminkan loader.binsebagai anakronisme] :

  1. Ketika Raspberry Pi pertama kali dihidupkan, inti ARM mati, dan inti GPU menyala. Pada titik ini SDRAM dinonaktifkan.
  2. GPU mulai menjalankan bootloader tahap pertama, yang disimpan dalam ROM di SoC. Bootloader tahap pertama membaca kartu SD, dan memuat bootloader tahap kedua ( bootcode.bin) ke dalam cache L2, dan menjalankannya.
  3. bootcode.binmengaktifkan SDRAM, dan membaca bootloader tahap ketiga (loader.bin) dari kartu SD ke dalam RAM, dan menjalankannya. [Versi yang lebih baru tidak menggunakan bootloader tahap ketiga. ]
  4. [Jika berlaku] loader.binmembaca firmware GPU ( start.elf).
  5. start.elfmembaca config.txt, cmdline.txtdankernel.img

loader.bintidak berbuat banyak. Ia dapat menangani .elffile, dan karena itu diperlukan untuk memuat start.elfdi bagian atas memori (ARM menggunakan SDRAM dari alamat nol). Ada rencana untuk menambahkan dukungan memuat elf ke bootcode.bin, yang akan membuat loader.bintidak perlu, tapi ini prioritas rendah (saya kira itu mungkin menghemat 100ms saat boot). [Perubahan ini telah terjadi. ]

Berikut adalah beberapa sumber yang bisa membantu:

syb0rg
sumber
2
Apakah itu isi dari file bin ini semua perangkat lunak berpemilik?
Petr
3
@Petr Ini adalah Github untuk firmware Raspberry Pi, saya akan mengeditnya menjadi jawaban saya.
syb0rg
1
Pada Raspberry Pi FAQ , dikatakan "Anda harus boot dari SD tetapi USB HD bisa" mengambil alih "setelah boot awal. Anda tidak bisa boot tanpa kartu SD."
syb0rg
1
Apakah partisi itu, yang dibaca pertama, partisi dengan bendera B atau harus partisi pertama? Bagaimana jika saya membuatnya terlalu besar dan saya ingin membuat yang lain di ujung kartu SD yang akan lebih kecil
Petr
1
@Petr Anda harus menanyakan itu sebagai pertanyaan lain!
syb0rg