GNU/Linux >> Belajar Linux >  >> Linux

Mengapa kita membutuhkan bootloader di perangkat tertanam?

Dalam konteks Linux, boot loader bertanggung jawab atas beberapa tugas yang telah ditentukan sebelumnya. Karena pertanyaan ini diberi tag lengan, saya pikir booting ARM mungkin menjadi sumber yang berguna. Secara khusus, boot loader bertanggung jawab untuk menyiapkan ATAG daftar yang menjelaskan jumlah RAM, baris perintah kernel, dan parameter lainnya. Salah satu parameter terpenting adalah jenis mesin . Dengan pohon perangkat , seluruh deskripsi papan dilewatkan. Hal ini membuat ARM Linux stok tidak mungkin melakukan booting tanpa beberapa kode untuk mengatur parameter seperti yang dijelaskan.

Parameter memungkinkan satu umum Linux mendukung banyak perangkat. Misalnya, kernel ARM Debian dapat mendukung ratusan jenis papan yang berbeda. Uboot atau pemuat boot lainnya dapat secara dinamis menentukan informasi ini atau dapat dikodekan keras untuk papan.

Anda mungkin juga ingin melihat halaman info bootloader di sini di stack overflow.

Sistem dasar mungkin dapat menyiapkan ATAGS dan salin NOR flash ke SRAM. Namun, biasanya sedikit lebih rumit dari ini. Linux memerlukan penyiapan RAM, jadi Anda mungkin harus menginisialisasi pengontrol SDRAM. Jika Anda menggunakan flash NAND, Anda harus menangani blok buruk dan salinan mungkin sedikit lebih rumit daripada memcpy() .

Linux sering memiliki beberapa bug driver laten di mana driver akan berasumsi bahwa jam diinisialisasi. Misalnya jika Uboot selalu menginisialisasi jam Ethernet untuk mesin tertentu, driver Ethernet Linux mungkin lalai mengatur jam ini. Hal ini terutama berlaku untuk pohon jam.

Beberapa sistem memerlukan format gambar booting yang tidak didukung oleh Linux; misalnya header khusus yang dapat langsung menginisialisasi perangkat keras; seperti mengonfigurasi devices untuk membaca kode awal dari. Selain itu, seringkali ada perangkat keras yang harus segera dikonfigurasi; sebuah pemuat boot dapat melakukan ini dengan cepat sedangkan struktur normal Linux dapat menunda ini secara signifikan yang mengakibatkan konflik I/O, dll.

Dari perspektif pragmatis, lebih mudah menggunakan boot loader. Namun, tidak ada yang mencegah Anda mengubah sumber Linux untuk melakukan booting langsung darinya; meskipun mungkin seperti menempelkan boot loader kode langsung ke awal Linux.

Lihat Juga:Perbandingan Coreboot, Uboot, dan Wikipedia. Barebox adalah pemuat boot yang kurang dikenal, tetapi terstruktur dengan baik dan modern untuk ARM. RedBoot juga digunakan di beberapa sistem ARM; Partisi RedBoot didukung di pohon kernel.


Boot loader adalah program komputer yang memuat sistem operasi utama atau lingkungan runtime untuk komputer setelah menyelesaikan swa-uji.

^ Dari Artikel Wikipedia

Jadi pada dasarnya bootloader melakukan apa yang Anda inginkan - menyalin data dari flash ke memori operasi. Sesederhana itu.

Jika Anda ingin tahu lebih banyak tentang meningkatkan OS, saya sangat menyarankan Anda membaca artikel yang ditautkan. Fase boot terdiri dari, selain tes, juga memeriksa periferal dan beberapa hal lainnya. Melewatkannya masuk akal hanya pada perangkat tersemat yang sangat sederhana, dan itulah mengapa bootloader mereka bahkan lebih sederhana:

Beberapa sistem tersemat tidak memerlukan urutan booting yang terlihat untuk mulai berfungsi dan saat dihidupkan mungkin hanya menjalankan program operasional yang disimpan di ROM.

Sumber yang sama


Mengapa kita tidak dapat langsung memuat kernel ke dalam RAM dari memori flash tanpa bootloader? Jika kita memuatnya, apa yang akan terjadi? Faktanya, prosesor tidak akan mendukungnya, tetapi mengapa kami mengikuti prosedur?

Bartek, Artless, dan Felipe semuanya memberikan bagian dari gambar.

Setiap jenis prosesor tersemat (E.G. 386EX, Coretex-A53, EM5200) akan melakukan sesuatu secara otomatis saat disetel ulang atau dihidupkan. Terkadang sesuatu itu berbeda tergantung pada apakah daya didaur ulang atau perangkat diatur ulang. Beberapa prosesor tersemat memungkinkan Anda mengubah sesuatu itu berdasarkan voltase yang diterapkan ke pin yang berbeda saat perangkat dinyalakan atau disetel ulang.

Apa pun itu, ada sesuatu dalam jumlah terbatas yang dapat dilakukan prosesor, karena ruang fisik pada prosesor diperlukan untuk menentukan sesuatu itu , apakah itu FLASH on-chip, kode mikro instruksi, atau mekanisme lainnya.

Batasan ini berarti sesuatu adalah

  • tujuan tetap, melakukan satu hal secepat mungkin.
  • terbatas dalam cakupan dan kemampuan, biasanya memuat blok kecil kode (biasanya beberapa kilobyte atau kurang) ke dalam lokasi memori tetap dan mengeksekusi dari awal kode yang dimuat.
  • tidak dapat dimodifikasi.

Jadi apa yang dilakukan prosesor sebagai respons terhadap reset atau siklus daya tidak dapat diubah, dan tidak dapat melakukan banyak hal, dan kami tidak ingin prosesor secara otomatis menyalin ratusan megabyte atau gigabyte ke dalam memori yang mungkin tidak ada atau mungkin tidak diinisialisasi, dan yang bisa memakan waktu lama sekali.

Jadi....

Kami menyiapkan program kecil yang lebih kecil dari ukuran terkecil yang diizinkan di semua perangkat yang akan kami gunakan. Program itu disimpan di mana pun sesuatu membutuhkannya.

Terkadang program kecilnya adalah U-Boot. Kadang-kadang bahkan U-Boot terlalu besar untuk pemuatan awal, sehingga program kecil kemudian memuat U-Boot.

Intinya adalah apa pun yang dimuat oleh sesuatu , dapat dimodifikasi sesuai kebutuhan untuk sistem tertentu. Jika itu U-Boot, bagus, jika tidak, ia tahu di mana memuat sistem operasi utama atau di mana memuat U-Boot (atau bootloader lainnya).

U-Boot (berbicara tentang bootloader secara umum) kemudian mengonfigurasi perangkat minimal, memori, pengaturan chip, dll., untuk memungkinkan OS utama dimuat dan dimulai. Init OS utama menangani konfigurasi atau inisialisasi tambahan apa pun.

Jadi urutannya adalah:

  • Prosesor dihidupkan atau disetel ulang
  • Sesuatu memuat kode boot awal (atau bootloader tertanam gaya U-Boot)
  • Kode boot awal (mungkin tidak diperlukan)
  • U-Boot (atau bootloader tertanam umum lainnya)
  • init Linux

Bootloader utama biasanya dibangun di dalam silikon dan melakukan pemuatan kode USER pertama yang akan dijalankan di sistem.

Bootloader ada karena tidak ada protokol standar untuk memuat kode pertama, karena bergantung pada chip. Terkadang kode dapat dimuat melalui port serial, memori flash, atau bahkan hard drive. Ini adalah fungsi bootloader untuk menemukannya.

Setelah kode pengguna dimuat dan dijalankan, bootloader tidak lagi digunakan dan ketepatan eksekusi sistem menjadi tanggung jawab pengguna.

Dalam rantai linux tersemat, bootloader utama akan mengatur dan menjalankan Uboot. Kemudian Uboot akan menemukan kernel linux dan memuatnya.


Linux
  1. Mengapa kebutuhan saya akan kontrol membuat saya beralih ke Linux

  2. Mengapa saya tetap menggunakan xterm

  3. Memboot Linux lebih cepat

  1. Mengapa kita membutuhkan file .so.1 di Linux?

  2. Mengapa MLO diperlukan pada langkah boot?

  3. Mengapa partisi boot ext2 100MB direkomendasikan untuk linux?

  1. Bagaimana cara memasang perangkat di Linux?

  2. Bagaimana cara menyebabkan reset pengawas perangkat Linux tertanam saya

  3. Mengapa Linux harus memiliki `/dev/cdrom` dan `/media/cdrom`?