Saat Anda perlu mengkompilasi kernel Anda sendiri

Saat Anda perlu mengkompilasi kernel Anda sendiri

Jadi, Anda telah memutuskan untuk mencoba hal ini yang Anda dengar orang lain, yang disebut 'menyusun kernel khusus'. Jika Anda mencoba ini sebagai hobi, atau karena Anda ingin belajar keterampilan baru, sangat baik - baca terus.

Namun, sebelum kita mulai, kita akan mencoba menjelaskan situasi ketika kebutuhan ini muncul dan bagaimana menghadapinya. Perhatikan bahwa ini adalah subjek luas yang membutuhkan lebih banyak dalam hal ruang daripada yang akan kami berikan di sini. Anda akan mempelajari dasar -dasarnya, apa yang Anda butuhkan, apa yang harus dilakukan dan apa yang akan Anda capai.

Untuk info lebih lanjut, seperti biasa, Google adalah teman Anda; Juga, dokumentasi yang tinggal di pohon sumber kernel akan menjawab banyak pertanyaan. Jadi, mari kita mulai dengan awal, dengan catatan terakhir: jika perlu muncul, kami akan menerbitkan lebih banyak artikel yang terkait dengan kernel yang dikompilasi yang berkaitan dengan distro lainnya.

Saat Anda perlu mengkompilasi kernel Anda sendiri

Situasi pertama adalah saat Anda membutuhkan kernel yang lebih baru dari yang disediakan distro Anda, terutama saat Anda menjalankan distribusi yang stabil (e.G. Debian stabil, centos), karena kernel Anda tidak mendukung beberapa fitur/driver yang Anda butuhkan, atau hanya karena Anda merasa ingin mencoba yang terbaru dan terhebat.

Namun, peringatan: Jika Anda ingin menjalankan kernel tepi pendarahan, pastikan itu akan kompatibel dengan komponen kunci lain dari sistem Anda (seperti GLIBC), ingatlah bahwa lebih baru berarti pengujian yang lebih sedikit dan (mungkin) lebih banyak ketidakstabilan; Pemelihara kernel distribusi Anda biasanya melakukan pekerjaan yang baik untuk mendukung beberapa fitur baru ke kernel yang lebih tua dan lebih stabil, jadi pastikan Anda benar-benar membutuhkan pendarahan. Saran kami bukan untuk menggunakan kernel ini (kernel jangka panjang akan membuat pengecualian di sini) pada sistem produksi. Seperti yang dikatakan, percayalah pada pemelihara distro Anda.

Situasi kedua adalah Anda merasa menjalankan kernel yang membengkak, dengan banyak komponen yang tidak dibutuhkan. Sementara kernel hanya memuat modul yang cocok dengan sepotong perangkat keras yang ada, jejak kaki yang lebih kecil dari kernel biasanya membantu mempercepat dan waktu boot.

# lspci -vv # lsusb # hwinfo # cat /proc /cpuinfo 

Perintah di atas membantu Anda untuk lebih mengetahui perangkat keras Anda. Tuliskan apa yang Anda temukan dan pastikan Anda menjalankan perintah LS* di atas sebagai root, untuk informasi tambahan.

Situasi lain adalah Anda ingin membantu menguji kernel dengan menjalankan yang terbaru di sistem Anda. Peringatan yang sama seperti di atas berlaku: lakukan itu pada sistem pengujian, tetap berhubungan dengan hulu jika Anda menemukan bug (LKML.org adalah milis kernel utama - lalu lintas tinggi) dan cobalah untuk menjadi sebanyak mungkin saat diminta informasi.Ini tidak dapat cukup ditekankan: Baca dokumentasi, baik karena Anda menemukan diri Anda dalam situasi yang tidak menyenangkan, ingin melaporkan bug atau hanya memiliki pertanyaan.

Selanjutnya, Anda mungkin ingin menjadi anak keren di blok dan menjalankan yang terbaru dan terhebat, mungkin melirik sumbernya (asalkan Anda menyukai ini dan Anda memiliki beberapa pengetahuan C dan ASM) dan bahkan mengirimkan tambalan. Anda mungkin ingin melihat lebih dulu jika distribusi Anda belum menawarkan paket kernel yang lebih baru, misalnya Anda dapat menginstal kernel dari Debian Experimental pada sistem pengujian, jika Anda mengubah sumber Anda.daftar sesuai. Sekali lagi, bekerja dengan pengelola jika Anda tersandung pada bug.

Terminologi

Sebelum kita mempelajari lebih jauh ke dalam subjek yang agak misterius ini, kita harus membuat beberapa istilah dasar jelas (er); Ini penting untuk memahami bagian -bagian penting dari pengujian dan kompilasi kernel.

  • inti - Inti dari sistem operasi, yang bertanggung jawab dengan mengelola sumber daya perangkat keras (I/O, jaringan, CPU, memori ...). Pada dasarnya, ini adalah bagian penting dari OS yang bertanggung jawab atas semua pekerjaan kotor. Program Pengguna berkomunikasi dengan kernel, meminta waktu CPU atau sumber daya lain oleh perpustakaan sistem yang bertindak sebagai perantara antara Userland (lihat di bawah) dan kernel / perangkat keras. Kernel bisa menjadi monolitik dan microkernels (untuk informasi lebih lanjut, jika Anda tertarik, lihat pendekatan desain kernel di Wikipedia.org . Microkernels (seperti Minix) Gunakan skema desain yang membagi inti dari sisa kernel, dan istirahat itu dibagi menjadi komponen, masing -masing melakukan sesuatu yang spesifik: I/O, jaringan, dll. Kernel monolitik (Linux, BSD, Solaris), seperti namanya, terdiri dari sebagian besar kernel dalam satu unit, memiliki fungsionalitas ekstra (e.G. driver) disediakan oleh modul. Ada juga kernel hibrida, kombinasi antara keduanya, contoh yang baik menjadi kernel windows.
  • Userland - Segala sesuatu dalam OS yang bukan bagian dari kernel (perpustakaan, aplikasi) dikatakan sebagai bagian dari Userland. Namanya jelas.
  • modul - Seperti yang ditunjukkan sebelumnya, modul kernel adalah sepotong perangkat lunak biner yang pada dasarnya "mengajarkan" kernel bagaimana "berbicara" dengan sepotong perangkat keras atau memberikan beberapa fungsi (e.G. NFS)
  • penyusun - Kompiler adalah aplikasi yang pada dasarnya mengambil kode tertulis, seperti yang diunduh oleh Anda dari kernel.org, dan mengubahnya menjadi binari. Kompiler yang ditemukan dalam distribusi Linux disebut 'GCC', dan itu adalah singkatan dari GNU Compiler Collection, yang juga membutuhkan komponen yang penting untuk membangun perangkat lunak: utilitas yang ditemukan di binutil seperti assembler (AS) atau Library Archiver (AR) .Di Debian Systems, atau Ubuntu, orang dapat menemukan paket mana file milik dengan menginstal dan menjalankan apt-file. Berbicara tentang itu, mari kita lihat paket apa yang perlu kita instal untuk pembuatan kernel yang sukses.
  • kernel vanilla - Ini adalah nama yang digunakan untuk kernel hulu, seperti yang ditemukan di kernel.org, jadi tanpa tambalan khusus distro.

Harap perhatikan bahwa setiap kali Anda melihat perintah dalam dokumen ini dimulai dengan prompt '$' Itu berarti perintah harus dijalankan seperti biasa, pengguna sehari -hari; Kapanpun Anda melihat '#' Prompt, itu berarti perintah harus dijalankan sebagai root (kami menggunakan sudo, tetapi itu tidak wajib). Direktori saat ini, kecuali ditentukan lain, adalah yang memegang pohon sumber Anda, dalam hal ini, Linux-2.6.

Apa yang perlu Anda instal

  • GCC - Tentu saja, kompilernya sangat penting
  • Binutils - Paket ini berisi tautan, assembler, dan utilitas lainnya yang penting untuk menyusun program yang ditulis dalam C.
  • GCC -DOC - Halaman manual dan info untuk GCC. Berguna jika Anda ingin kotor dan memodifikasi beberapa bendera kompilasi. Berguna Pokoknya Jika Anda Ingin Menulis atau Mengompilasi Paket C.
  • GDB - Debugger GNU. Tidak wajib tetapi berguna jika terjadi kesalahan. GDB-DOC juga akan membantu.
  • LibrereDline5-Dev-Untuk menggunakan antarmuka berbasis konfigurasi kernel NCURES. Anda dapat menggunakan antarmuka lain (lihat di bawah).
  • Make - akan diinstal sebagai ketergantungan, tetapi sedikit kata. Konsultasikan manual atau buku, karena ini bukan subjek yang harus dijelaskan dengan ringan dalam ruang yang begitu singkat. Make adalah utilitas yang digunakan saat menyusun program C/C ++, dan apa yang dilakukannya adalah terlihat di Makefile, berisi aturan tentang bagaimana dan dalam urutan apa yang harus terjadi, dan mencoba untuk menjalankan arahan tersebut. Baca makefiles di pohon sumber untuk melihat sekilas.
  • Git-Git adalah VCS (Sistem Kontrol Versi), melakukan apa yang dilakukan CVS atau Subversion, yaitu membuat Anda tetap up-to-date dengan pohon kernel terbaru.

Mendapatkan Sumber Kernel

Jika Anda ingin menginstal sumber dari distribusi Anda, gunakan

# apt-get install linux-source-

di mana dapat dikumpulkan dari penerbitan:

uname -r 

Gunakan ini jika Anda ingin memodifikasi kernel yang ada (menambahkan driver, pemangkasan, dll. ). Jika tidak, Anda menginginkan kernel vanilla. Anda bisa mendapatkannya dari www.inti.org (kami sarankan wget atau curl di sini sebagai manajer unduhan) atau, jika Anda menginginkan yang terbaru, Anda akan menggunakan git. Kami sarankan menyimpan sumber di direktori home pengguna Anda, dan perintah untuk mendapatkan pohon arus utama terbaru adalah (lihat Man git):

$ git clone git: // git.inti.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.Git Linux-2.6 

Di masa lalu kami menemukan mini-howto di http: // linux.yyz.AS/git-howto.html berguna; Periksa juga kernelnewbies.org . Perintah di atas akan membuat folder di direktori Anda saat ini bernama Linux-2.6, yang dapat diperbarui nanti dengan cd'ing ke dalamnya dan mengeluarkan yang sederhana

Buatlah bersih; tarik git 

Sekarang, setelah Anda memiliki sumbernya, kami harus mengkonfigurasi kernel .

Konfigurasi dan Bangunan

Jika Anda memiliki yang ada .file konfigurasi (file yang menyimpan opsi untuk pembangunan kernel - apa yang masuk dan apa yang tidak), salin di Linux -2.6 (dari /boot /config- atau /proc /config.GZ - konfigurasi saat ini). Jika Anda tidak ingin memodifikasi yang ada .konfigurasi, keluarkan saja

$ Make oldconfig 

Jika tidak, baca terus. Jika Anda ingin memodifikasi konfigurasi yang ada, masalah

$ membuat Menuconfig 

(Rekomendasi: Anda dapat menggunakan Make Config untuk banyak pertanyaan tentang opsi di kernel, atau membuat xconfig, yang memerlukan pustaka QT, untuk menu grafis yang lebih bagus), dan pilih "Muat file konfigurasi alternatif" dan tekan ENTER for .Config, nama default file konfigurasi, atau ketik nama file alternatif yang sudah disimpan di Linux-2.6.

Setelah itu, mulailah melalui menu untuk membuat perubahan yang diperlukan aturan praktis di sini adalah "Jika Anda tidak tahu apa fungsinya, jangan main -main dengannya", setidaknya sampai Anda mendapatkan beberapa pengalaman. Di akhir, dari menu atas, pilih "Simpan file konfigurasi alternatif", tekan Enter untuk nama default (.config - disarankan) dan kemudian “keluar” dari bawah. Jika Anda ingin mulai dari awal, lupakan langkah "Muat file konfigurasi alternatif" dan lanjutkan. Pada kompilasi kernel Anda berikutnya, setelah membersihkan dan memperbarui pohon, gunakan 'buat oldconfig' seperti di atas untuk menggunakan konfigurasi lama. Oke, sekarang kami memiliki konfigurasi yang disesuaikan dengan kebutuhan kami yang hanya menunggu untuk dibangun. Membangun kernel sesederhana mengkonfigurasinya (!). Cukup ketik make dan outputnya akan terlihat seperti di bawah ini:

$ Make Hostcc Scripts/Basic/FixDep Hostcc Script/Kconfig/conf.o Script yang dikirim/kconfig/zconf.tab.C Script yang dikirim/kconfig/zconf.Lex.C Script yang dikirim/kconfig/zconf.hash.C Script hostcc/kconfig/zconf.tab.o Skrip hostld/kconfig/conf chk include/linux/versi.h up sertakan/linux/versi.h CHK termasuk/dihasilkan/utsrelease.h up sertakan/dihasilkan/utsrelease.H CC Kernel/Batas.S gen termasuk/dihasilkan/terikat.H CC Arch/X86/Kernel/Asm-Offset.S… 

Dan, setelah beberapa saat, tergantung pada konfigurasi mesin dan kernel Anda, itu akan dilakukan. Jika Anda ingin mempercepat sedikit, gunakan bendera -jn untuk dibuat, di mana N adalah jumlah prosesor/core + 1. Namun hati -hati, itu dapat mengekspos bug di kernel atau membangun infrastruktur, jadi jika ada yang salah, coba lagi dengan hanya menggunakan make tanpa bendera apapun. Jika setelah membaca manual GCC (dan jika Anda masih waras), Anda merasa petualang dan ingin memodifikasi beberapa bendera khusus perangkat keras, atau merasa seperti mengoptimalkan kode, gunakan halaman manual untuk mengetahui bagaimana (terutama Koptik dan CFLAGS ). Namun, optimisasi lebih besar dari -o2 berisiko.

Hati -hati dan harapkan kerusakan, kernel dapat dikompilasi tanpa masalah, tetapi itu bisa bertindak aneh. Ingatlah untuk mengetik semua perintah sebagai pengguna normal. Tidak perlu membangun sebagai root dan pengembang kernel mengerutkan kening.

Instalasi

Sekarang mari kita instal modul: ini perlu dilakukan sebagai root, karena modul diinstal di /lib, dan pengguna normal tidak memiliki akses menulis di sana. Jadi,

# buat modul_install 

melakukan hal itu, dan ini perlu dilakukan sebelum memasang kernel sehingga modul dan kernel yang diinstal dalam sinkronisasi. Menggunakan

# buat instal 

untuk menginstal kernel ke /boot, lalu

# Depmod 

dan bersiap untuk membuat initramfs (sistem file RAM awal), yang merupakan sistem file sementara yang dimuat ke RAM pada tahap boot awal, dan digunakan untuk menyediakan driver dasar dan fasilitas lainnya agar sistem file root dipasang. Informasi lebih lanjut dapat ditemukan halaman initrd Wikipedia. Perintah yang diperlukan untuk tugas ini adalah pembaruan -initramfs (ini juga dipanggil setiap kali kernel baru diinstal, dipicu oleh manajer paket) yang dapat membuat initramfs (-c) atau memperbarui yang sudah ada (-u) . Perintah lengkapnya adalah

# update -initramfs -c -k 

Versi ini adalah yang akan Anda lihat setelah 'Make Modules_install' selesai (baris terakhir dari outputnya adalah "Depmod").Jika Anda ingin memiliki nomor versi yang tepat dan lebih lama, maka Anda dapat memberi tahu pengembang "momen git" apa yang Anda gunakan, pilih "Pengaturan Umum" → "Secara otomatis menambahkan informasi versi ke string versi" setelah mengeluarkan Menuconfig. Output pada sistem ubuntu saya sepertinya:

Pembaruan-initramfs: menghasilkan /boot /initrd.IMG-3.1.0-rc3+… 

Perbarui grub Anda sehingga memperhatikan kernel baru Anda

# UPDATE-GRUB 

Di mesin pengujian Debian saya, output terlihat seperti ini:

Menghasilkan grub.CFG… ditemukan gambar latar belakang:/usr/share/gambar/desktop-base/desktop-grub.PNG Ditemukan Gambar Linux: /boot /vmlinuz-3.0.0-1-AMD64 Ditemukan gambar initrd: /boot /initrd.IMG-3.0.0-1-AMD64 Ditemukan Gambar Linux: /boot /vmlinuz-3.0.0-RC6-AMD64 Ditemukan Initrd Image: /Boot /Initrd.IMG-3.0.0-RC6-AMD64 Ditemukan gambar Linux: /boot /vmlinuz-2.6.39-07727-GBD1BFE4 Ditemukan gambar initrd: /boot /initrd.IMG-2.6.39-07727-GBD1BFE4 Ditemukan gambar Linux: /boot /vmlinuz-2.6.39-2-AMD64 Ditemukan gambar initrd: /boot /initrd.IMG-2.6.39-2-AMD64 Ditemukan Gambar Linux: /boot /vmlinuz-2.6.39-RC7-AMD64 Found Initrd Image: /Boot /Initrd.IMG-2.6.39-RC7-AMD64 Ditemukan gambar Linux: /boot /vmlinuz-2.6.38.5 ditemukan gambar initrd: /boot /initrd.IMG-2.6.38.5 Ditemukan gambar Linux: /boot /vmlinuz-2.6.38.4-00001-GFAA8EE7 Ditemukan gambar initrd: /boot /initrd.IMG-2.6.38.4-00001-GFAA8EE7 Ditemukan gambar Linux: /boot /vmlinuz-2.6.38.4 ditemukan gambar initrd: /boot /initrd.IMG-2.6.38.4 ditemukan gambar linux: /boot /vmlinuz-2.6.38-2-AMD64 Ditemukan gambar initrd: /boot /initrd.IMG-2.6.38-2-AMD64 Ditemukan Gambar Linux: /boot /vmlinuz-2.6.32-5-AMD64 Ditemukan gambar initrd: /boot /initrd.IMG-2.6.32-5-AMD64 Ditemukan memtest86+ gambar: /memtest86+.Bin Found memtest86+ gambar multiboot: /memtest86+ _multiboot.tempat sampah selesai 

Tentu saja, output Anda tidak akan terlihat persis sama, tetapi garis besarnya harus sama; Akhirnya, ingat: jika Anda mau, edit/etc/default/grub untuk mengubah beberapa opsi sebelum pembaruan-grub dan, dengan jari-jari disilangkan, reboot mesin Anda untuk menguji kernel baru.

Jika terjadi kesalahan

Situasi yang paling umum ketika kernel baru Anda tidak dapat digunakan adalah bahwa Anda tidak dapat mem -bootnya di tempat pertama, atau bahwa ia memotret dan tidak memiliki beberapa driver penting (misalnya driver jaringan). Biasanya, pembaruan-grub melakukan pekerjaan dengan baik dalam menulis file menu grub, tetapi Anda mungkin ingin memeriksanya. Jika Anda lulus grub, kemungkinan Anda menjadi terlalu bersemangat dan menikahi driver penting untuk sistem, seperti bagian terkait disk (ATA, SATA, SCSI ...), atau mungkin NFS, jika Anda memiliki akar yang dipasang di NFS yang dipasang di NFS. Boot kernel yang berfungsi dan mengonfigurasi ulang, menggunakan Google dan kemungkinan sumber lainnya, seperti IRC .

Kemungkinan seseorang sudah menemukan masalah Anda di masa lalu dan Anda memiliki kesempatan untuk menemukan jawaban. Jika masalahnya lebih serius, dan Anda yakin Anda membaca tentang netiquette dan cara memposting ke milis kernel, tanyakan dengan baik. Ada banyak orang yang baik dan membantu di luar sana, tetapi mereka cenderung tidak terlalu baik ketika Anda belum melakukan pekerjaan rumah Anda dan/atau membuang-buang waktu mereka. Jika Anda memiliki boot terpisah, perlu diingat bahwa biasanya tidak terlalu besar dan mungkin terisi dengan kernel dengan cepat. Juga /lib /modul cenderung mengumpulkan banyak ruang di /, jadi pastikan untuk melakukan pembersihan dari waktu ke waktu. Ingatlah bahwa kernel adalah perangkat lunak yang rumit dan banyak penyebab dapat menjadi akar masalah Anda. Jika Anda tidak punya masalah mengikuti panduan ini, Anda siap untuk konfigurasi kernel Linux yang lebih canggih.

Tutorial Linux Terkait:

  • Hal -hal yang harus diinstal pada ubuntu 20.04
  • Hal -hal yang harus dilakukan setelah menginstal ubuntu 20.04 FOSSA FOSSA Linux
  • Pengantar Otomatisasi Linux, Alat dan Teknik
  • Ubuntu 20.04 Panduan
  • Cara menghapus kernel lama di ubuntu
  • Hal -hal yang harus dilakukan setelah menginstal ubuntu 22.04 Jammy Jellyfish…
  • Mint 20: Lebih baik dari Ubuntu dan Microsoft Windows?
  • Sistem Linux Hung? Cara melarikan diri ke baris perintah dan…
  • Hal -hal yang harus diinstal pada Ubuntu 22.04
  • Instal Arch Linux di VMware Workstation