Bagaimana membangun kernel kustom dengan konfigurasi local yang mendukung perangkat keras dari beberapa mesin?

9

Saat mengkonfigurasi server untuk menjalankan satu tugas, seperti alat, mungkin ada kebutuhan untuk membangun kernel khusus. Misalnya untuk menghemat ruang disk.

Ubuntu Core 13.10 amd64 root filesystem adalah unduhan 38 MB , di mana paket meta "linux-image-generic" termasuk dependensi yang diperlukan akan mengunduh 79 MB arsip, dan ukuran paket kernel-image-xyz-generic masih 14 MB .

Untuk membangun kernel yang dilucuti dari modul yang tidak akan digunakan perangkat keras Anda, make localmodconfigperintahnya adalah alat yang tepat untuk pekerjaan itu. Namun mesin virtual Anda yang menjalankan lingkungan build dan test Anda memuat modul yang berbeda dari perangkat keras penyebaran target Anda. Dan / atau setelah beberapa saat perangkat keras penyebaran Anda mungkin menjadi eol, dan perangkat keras yang berbeda digunakan. Dan pada frekuensi di mana pembaruan kernel dirilis mungkin menjadi terlalu rumit untuk membangun kernel kustom untuk setiap konfigurasi perangkat keras yang berbeda.

Bagaimana cara cepat membangun kernel Linux kustom yang berjalan di beberapa kotak perangkat keras yang berbeda?

Pro Backup
sumber

Jawaban:

11

The make localmodconfigperintah masih alat yang tepat untuk pekerjaan itu. Bahkan make localmodconfigberjalanscripts/kconfig/streamline_config.pl .

Input file

Saat membaca streamline_config.plkode sumber (perl), ada fitur tidak berdokumen my $lsmod_file = $ENV{'LSMOD'};yang memungkinkan input file untuk deteksi modul yang dimuat alih-alih output dari lsmodperintah.

CD langsung

Karena localmodconfig menggunakan output lsmoduntuk mendeteksi modul yang dimuat. Kami menjalankan Ubuntu Live CD pada setiap pengaturan perangkat keras yang berbeda, membuka terminal ( Ctrl+ Alt+ T), menjalankan lsmoddan menyimpan hasilnya.

Output gabungan

Dengan menggabungkan lsmodfile output sambil menghapus garis header berturut-turut Anda dapat dengan cepat membuat file input yang mencakup semua modul kernel yang diperlukan. Kami ingin meninjau daftar modul dengan tangan dan menggunakan resep yang lebih manual:

  1. $ cd linux-3.11.0/
    atau buka direktori tempat Anda menjalankan perintah make Anda

  2. $ lsmod > lsmod.txt
    membuat file teks dengan modul yang dimuat

  3. $ nano lsmod.txt
    akan membuka editor teks nano, tentu saja Anda dapat menggunakan aplikasi editor favorit Anda

  4. Tambahkan modul yang Anda inginkan yang belum ada di sana, ke bagian bawah file ini (lihat contoh di bagian bawah anwer ini), dan simpan ketika Anda siap.
    Catatan: gunakan spasi bukan tab untuk mencocokkan posisi tabulator kolom.

  5. $ make LSMOD="lsmod.txt" localmodconfig
    ini akan memberi tahu localmodconfig untuk menggunakan file lsmod.txt Anda sebagai input untuk deteksi modul yang dimuat

Sehubungan dengan Steven Rostedt - penulis steamline_config.pl - untuk menyarankan notasi yang lebih pendek pada langkah 5.


Contoh untuk apa yang harus ditambahkan dan tidak ditambahkan ke lsmod.txt (langkah 4):

Karena papan utama Intel D33217CK memiliki sensor termal Intel yang ingin kami baca, kami menambahkan baris-baris ini:

x86_pkg_temp_thermal   13810  0
intel_powerclamp       14239  0

Tetapi kami tidak ingin menjalankan mesin virtual pada perangkat keras ini, itulah mengapa kami melewatkan baris ini:

kvm_intel             128218  0
kvm                   364766  1 kvm_intel

Ini memiliki adaptor ethernet Gibabit Apple (Broadcom) yang terhubung ke port Thunderboltnya, jadi kami menambahkan:

tg3                   152066  0
ptp                    18156  1 tg3
pps_core               18546  1 ptp

Kami pikir kami tidak perlu mirroring volume, dan karenanya tidak menambahkan:

dm_mirror              21715  0
dm_region_hash         15984  1 dm_mirror
dm_log                 18072  2 dm_region_hash,dm_mirror

Dan kami juga tidak perlu output grafis (teks akan dilakukan pada server tanpa kepala), jadi kami tidak menyertakan:

i915                  589697  3
i2c_algo_bit           13197  1 i915
drm_kms_helper         46867  1 i915
drm                   242354  4 i915,drm_kms_helper

Untuk komputer lain, kami memerlukan driver ethernet Realtek ini secara tradisional:

r8169                  61434  0
mii                    13654  1 r8169
Pro Backup
sumber