Önyükleme sırası nedir?


35

Ahududu Pi'nin önyükleme sırasının tipik bir kurulumda ne olduğunu merak ediyorum (örneğin NOOBS), güç uygulamasından (veya farklıysa sıcak sıfırlamadan), örneğin logo görünümüne kadar; veya bunun açıklandığı yer.

Bu dizinin en çok ihtiyaç duyulan genel resminin yanı sıra, ilk aşamalarda en çok ilgileniyorum:

  1. ARM CPU için sıfırlama vektörü nedir ve nasıl / nerede tanımlanır?
  2. İlk ARM CPU talimatları hangi bellekten alınır? Bu nerede ve bu kodu depolamak için hangi teknoloji kullanılıyor?
  3. Bu ARM32 veya Thumb (ya da belki Jazelle) kodu mu? Bu sıfırlama vektörünün düşük sıra bitine mi bağlı?
  4. Bu erken önyükleme kodunun kaynağı (veya sökme veya boşaltma) mevcut mu? Değilse, bunu belirlemek için JTAG portunun kullanımını engelleyen herhangi bir teknik var mı? Yasal olarak, yaşadığım yerdeki (Fransa) yürürlükte olan yasa hakkındaki anlayışa güvenme riskini üstlenmeye hazırım; bu, kendi bilgisayarımı, en azından açık bir sözleşmenin yokluğunda tamamen analiz etmeme izin veriliyor. gereği bunu yapmamayı.
  5. Çevre birimler hangi sırayla ve hangi kod parçası tarafından başlatıldı?
  6. ARM CPU'nun yanında, BCM2835'te çalışan bazı işlemci / otomatlar var mı ve olumlu olarak, önyükleme dizisinin ARM CPU ile ilgisi nedir?

ARM CPU'nun Teknik Referans El Kitabı ve BCM2835 ARM Çevre Birimleri veya başka herhangi bir doktora dalmaya hazırım .

Güncelleme: gönderme sonra buldum bu ve bu BCM2835 GPU ARM için ustası olarak davranmaktadır ve ağır önyükleme sırasında katılır belirterek,.


4
Tüm bu bilgilerin çoğu, kaynak kodu, bootloaders ve SoC firmware gibi kapalı kaynak olduğunu söyleyebilirim. Şimdilik allot bilinmiyor. Bir şey bilmelisin. BCM bir GPU ... bir CPU değil. Önyükleyici GPU bölümünde başlar, orada RAM'i başlatır ve kaynak koduna erişebildiğimiz ilk yer olan CPU'yu teslim eder ... aka Raspbian. İyi şanslar. Bu sorunun cevabı çok geniş ve zordur.
Piotr Kula

Yanıtlar:


38

Ahududu Pi'nin önyükleme sırası temelde şudur:

  1. Aşama 1 önyüklemesi çipte ROM'dadır. Aşama 2'yi L2 önbelleğine yükler
  2. 2. Aşama olduğunu bootcode.bin. SDRAM'ı etkinleştirir ve Aşama 3'ü yükler
  3. Aşama 3, loader.bin. .elfBiçim ve yükleri bilirstart.elf
  4. start.elfyükler kernel.img. Daha sonra da okur config.txt, cmdline.txtve bcm2835.dtb dtb dosya varsa, yüklenen 0×100& çekirdek @ 0×8000 Eğer disable_commandline_tagsbu yükler çekirdek ayarlanır @ 0×0 Aksi takdirde çekirdek @ yükler 0×8000de ve koyun ATAGS0×100
  5. kernel.img daha sonra ARM üzerinde çalıştırılır.

ARM'e kernel.imgyüklenene kadar her şey GPU'da çalıştırılıyor .

Bu şemayı oldukça faydalı buldum:

Önyükleme Sırası


2
İşe yarar. 2. kademe bootloader'ın bootcode.binGPU, ARM (ve ardından hangi kod) tarafından çalıştırılan kod veya bunların bir karışımı olup olmadığı açıklığa kavuşturulabilir mi? 3. aşama için aynı loader.bin(eğer göründüğü gibi gitmediyse).
fgrieu

3
@fgrieu Cevap eklemek için cevabı değiştirdim. Her şey ARM'de çalıştırılana kadar GPU'da kernel.imgçalıştırılır.
SG60

1
Göre bu loader.bin artık kullanılmamaktadır. Bu Gitbootcode.binstart.elf
taahhütnameye

@ SG60: Cevabınızı HeatfanJohn'daki bilgilerle güncelleyebilir misiniz?
Peter Mortensen

NOOBS açılışını bilen var mı? Görünüşe göre orada biraz farklı, iyileşme kendini ve bazı yumuşak önyükleme antics içerir. Uotu çalışma konusunda biraz daha düşük bir seviyede çalışmayı merak ediyorum.
Sam,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.