Önyükleyicinin yapısını anlamak için iyi araçlar veya yöntemler?


9

Son zamanlarda açık kaynaklı bir bootloader olan U-boot çalışan bir Atmel AT91SAM9G20 SBC ile üzerinde çalıştığım kötü bir hatanın nedenini anladım . Sorunun özü, U-boot'ın donanımın onu oluşturduğumdan farklı bir şekilde yapılandırılmasını beklemesiydi, bu nedenle bazı cihaz kayıtları yanlış yapılandırıldı.

Şimdi sorunu çözdüğüme göre, kayıtları doğru bir şekilde yapılandırmak için U-boot ayarlamam gerekiyor. Bunu, programın sonuna birkaç satır kod ekleyerek körü körüne yapabilirim, ama bu dağınık.

Bu beni soruma getiriyor: U-boot'un main () 'den başlayıp tüm dosyalardaki olası tüm kod yollarını okumaktan nasıl daha verimli çalıştığını nasıl anlayabilirim? Dosyalarda uğraşmayı denedim ve ilgili tanımlayıcıların yakınındaki koda baktım. Bunun etkisiz olduğu kanıtlanmıştır; kod çoğu umurumda değil alt sistemler için sürücüler gibi görünüyor. Aslında bootloader'ın şu ana kadar nasıl iyi çalıştığını anlıyorum, ancak naif yaklaşımımdan daha iyi bir yöntem olduğunu umuyorum.


Ubot geliştiricilerinin posta listesine sormayı denediniz mi?
sybreon

Yanıtlar:


6

Yardımcı olabilecek birkaç araç / strateji vardır:

  • Kaynak kodunu anlamak için daha iyi araçlar:

  • Çalışma zamanı analizi

    • Bir hata ayıklayıcı ile ilginç bölümlere göz atın ve neler olduğunu analiz edin
    • Her işlevin giriş / çıkışında iyi bir parça çağırmak için gcc'nin enstrümantasyon özelliklerini kullanın. Örneğin. http://ndevilla.free.fr/etrace/
  • Kendi mini önyükleyicinizi yazma

    • Sıklıkla bir şeyi anlamanın en iyi yolunun onu yeniden yaratmak olduğunu görüyorum

Ne yazık ki, her şey için işe yarayan sihirli bir tarif yok.


@ Çalışma Zamanı Analizi - Ayrı bir katıştırılmış sistemde, özellikle de aynı anda çalışan bir işletim sistemi olmadığında, örneğin bir önyükleyici olduğu zaman geçerli değildir.
Connor Wolf

Joby'nin önerdiği gibi hala bir hata ayıklayıcı ile adım atabilirsiniz. Karmaşıklığa bağlı olarak, yardımcı olabilir veya olmayabilir.
Nick T

Cscope hayal ettiğim bir şey. Biraz daha parlak bir şey umuyordum, ama iyi bir başlangıç. Teşekkürler.
pingswept

2

AT91 için oluşturmayı nasıl yapılandırdınız?

Kod ağacı, mimariye özgü tüm öğelerin 'arch / (cpu sınıfı) / (cpu tipi) / ...' ağacında bulunacak şekilde tasarlanmış gibi görünmektedir. AT91 kodunu arch / arm / cpu / arm926ejs / at91 altında buldum ... değiştirmek istediğiniz varyant belirli şeyler orada değil mi? Özellikle dizinin neredeyse yarısı AT91 varyantına özgü olduğundan, bu dizinde bakmak için çok fazla bir şey yoktur.

Bu açıksa üzgünüm ... ama bunu kontrol etmekten bahsetmedin.

Henüz uBoot kod ağacına bakmamıştım, ancak mesajın beni korkuttu. Bir arka yazıcı projesi, sonunda özel bir iMX233 PCB'de uBoot ve Linux'un kullanılmasını içeriyor. UBoot mimarisinin ve varyanta özgü şeylerin ne kadar iyi izole edildiği ve bunun ne kadar büyük bir acı olacağı konusunda bu tür geri bildirimler almakla çok ilgileniyorum.


Evet, arch / arm / cpu / arm926ejs / at91 / * ile kaliteli zaman geçirdim, ama öneri için teşekkürler. Aradığım kodun aslında sadece Atmel'in erişebildiği işlemci önyükleme ROM'unda olduğu ortaya çıktı. Kanlı ayrıntılar burada: at91.com/forum/viewtopic.php/f,9/t,19732/start,0/st,0/sk,t/sd,a
pings,

1
Bu arada, genel olarak, U-boot'dan oldukça etkilendim. Desteklediği çok sayıda kart ve CPU için oldukça iyi organize edilmiş. Dokümantasyon seyrek, ancak önyükleyicilerin kursu için eşit görünüyor.
pingswept

@pingswept: hey, 4 katmanda Linux. Güzel. Belki iMX233 yerine o çipe bakmalıyım. ARM + iki SDRAM yongalarımı 4 kat üzerine almaya çalışırken cehenneme düştüm ve diğer projelerde çalışmak için rafa koydum. Ben de bir Altium kullanıcısıyım.
darron

9G20 ve iMX233 oldukça yakın. 9G20'yi seçtim çünkü Ethernet MAC yerleşik ve yongalar düşük miktarda biraz daha ucuz, ancak iMX233 yakın bir şekilde koştu.
Aralık'ta

Ayrıca, Chumby Hacker Board'a bir bakın - iMX233'ün etrafında bir sistem kurmaya karar verirseniz başlamak için iyi bir yer olabilir. Altium dosyaları bu wiki sayfasındadır: wiki.chumby.com/mediawiki/index.php/Chumby_hacker_board_beta
pingswept
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.