Alat atau metode yang bagus untuk memahami struktur bootloader?

9

Baru-baru ini saya menemukan penyebab bug jahat yang telah saya kerjakan dengan Atmel AT91SAM9G20 SBC yang menjalankan U-boot , sebuah bootloader open source. Inti masalahnya adalah bahwa U-boot mengharapkan perangkat keras dikonfigurasikan secara berbeda dari yang saya buat, jadi beberapa register perangkat salah konfigurasi.

Sekarang saya sudah menemukan masalahnya, saya perlu men-tweak U-boot untuk mengkonfigurasi register dengan benar. Saya bisa melakukan ini secara membabi buta dengan menambahkan beberapa baris kode di akhir program, tapi itu berantakan.

Ini membawa saya ke pertanyaan saya: bagaimana saya bisa mengetahui bagaimana U-boot bekerja lebih efisien daripada memulai di main () dan membaca semua jalur kode yang mungkin di semua file? Saya sudah mencoba melihat-lihat dalam file dan melihat kode di dekat pengidentifikasi yang relevan. Ini terbukti tidak efektif; tampaknya sebagian besar kode adalah driver untuk subsistem yang tidak saya pedulikan. Saya benar-benar mengerti bagaimana bootloader bekerja dengan sangat baik sekarang, tapi saya berharap ada metode yang lebih baik daripada pendekatan naif saya.

pingswept
sumber
Sudahkah Anda mencoba bertanya pada milis pengembang uboot?
sybreon

Jawaban:

6

Ada beberapa alat / strategi yang dapat membantu:

  • Alat yang lebih baik untuk memahami kode sumber:

    • cscope adalah alat untuk mengeksplorasi kode C, itu seperti grep tetapi mengerti sintaks
    • Panggil generator grafik untuk menggambar struktur pemanggilan fungsi
    • Fenris terlihat menarik walaupun saya belum mencobanya
  • Analisis runtime

    • Langkah melalui bagian yang menarik dengan debugger dan menganalisis apa yang terjadi
    • Gunakan fitur instrumentasi gcc untuk memanggil sejumlah besar entri / keluar dari setiap fungsi. misalnya. http://ndevilla.free.fr/etrace/
  • Menulis mini bootloader Anda sendiri

    • Saya sering menemukan bahwa cara terbaik untuk memahami sesuatu adalah dengan membuatnya sendiri

Sayangnya, tidak ada resep ajaib yang bekerja untuk semuanya.

Toby Jaffey
sumber
@Runtime Analysis - Tidak dapat dijalankan pada sistem tertanam yang terpisah, terutama ketika tidak ada OS yang mendasarinya yang berjalan pada saat yang sama, misalnya, bootloader, yang memang demikian.
Connor Wolf
Anda masih bisa melangkah melaluinya dengan debugger seperti yang disarankan Joby. Tergantung pada kerumitannya mungkin atau mungkin tidak membantu.
Nick T
Cscope adalah hal yang saya bayangkan. Saya berharap untuk sesuatu yang sedikit lebih mengkilap, tapi ini awal yang baik. Terima kasih.
pingswept
2

Bagaimana Anda mengkonfigurasinya untuk membangun AT91?

Pohon kode tampaknya dirancang sedemikian rupa sehingga setiap hal arsitektur spesifik terletak di pohon 'arch / (kelas cpu) / (tipe cpu) / ...'. Saya menemukan kode AT91 di bawah arch / arm / cpu / arm926ejs / at91 ... apakah varian spesifik yang ingin Anda ubah tidak ada di sana? Tidak banyak yang bisa ditelusuri dalam direktori itu, terutama karena hampir setengah dari file-file tersebut adalah varian spesifik AT91.

Maaf jika ini jelas ... tetapi Anda tidak menyebutkan memeriksa ini.

Saya belum melihat pohon kode uBoot, tetapi posting Anda membuat saya takut melakukannya. Proyek back burner saya melibatkan akhirnya menggunakan uBoot dan Linux pada PCB iMX233 kustom. Saya sangat tertarik untuk mendapatkan umpan balik semacam ini tentang seberapa baik arsitektur uBoot dan hal-hal khusus varian diisolasi dan seberapa besar rasa sakit yang akan terjadi.

darron
sumber
Ya, saya telah menghabiskan waktu berkualitas dengan arch / arm / cpu / arm926ejs / at91 / *, tapi terima kasih atas sarannya. Ternyata kode yang saya cari sebenarnya ada di ROM boot prosesor, yang hanya bisa diakses Atmel. Perincian berdarah ada di sini: at91.com/forum/viewtopic.php/f9/t,19732/start.0/st.0/sk,t/sd,a
pingswept
1
Ngomong-ngomong, secara keseluruhan, saya cukup terkesan dengan U-boot. Untuk sejumlah besar papan dan CPU yang didukungnya, ini cukup terorganisir dengan baik. Dokumentasinya jarang, tetapi tampaknya setara untuk kursus untuk bootloader.
pingswept
@ pingswept: hei, Linux pada 4 lapisan. Bagus. Mungkin saya harus melihat ke chip itu, bukan iMX233. Saya mengalami kesulitan mencoba mendapatkan ARM + dua chip SDRAM saya pada 4 layer dan menyimpannya untuk mengerjakan proyek lain. Saya juga pengguna Altium.
darron
9G20 dan iMX233 cukup dekat. Saya memilih 9G20 karena Ethernet MAC terpasang, dan chip-nya sedikit lebih murah dalam jumlah rendah, tetapi iMX233 adalah runner up.
pingswept
Juga, lihatlah Chumby Hacker Board - mungkin tempat yang baik untuk memulai jika Anda memutuskan untuk membangun sistem di sekitar iMX233. File Altium ada di halaman wiki ini: wiki.chumby.com/mediawiki/index.php/Chumby_hacker_board_beta
pingswept