Apabila anda perlu menyusun kernel anda sendiri

Apabila anda perlu menyusun kernel anda sendiri

Oleh itu, anda telah memutuskan untuk mencuba perkara ini yang anda dengar orang lain bercakap tentang, yang dipanggil 'menyusun kernel tersuai'. Sekiranya anda mencuba ini sebagai hobi, atau kerana anda ingin mempelajari kemahiran baru, sangat baik - baca.

Walau bagaimanapun, sebelum kita memulakan, kita akan cuba menjelaskan situasi apabila keperluan ini timbul dan bagaimana menanganinya. Perhatikan bahawa ini adalah subjek yang luas yang memerlukan lebih banyak dari segi ruang daripada yang akan kami sediakan di sini. Anda akan mempelajari asas -asas, apa yang anda perlukan, apa yang perlu dilakukan dan apa yang akan anda capai.

Untuk maklumat lanjut, seperti biasa, Google adalah rakan anda; Juga, pemastautin dokumentasi di pokok sumber kernel akan menjawab banyak soalan. Oleh itu, mari kita mulakan dengan permulaan, dengan nota terakhir: jika perlu timbul, kami akan menerbitkan lebih banyak artikel yang berkaitan dengan penyusunan kernel yang berkaitan dengan distro lain.

Apabila anda perlu menyusun kernel anda sendiri

Keadaan pertama adalah apabila anda memerlukan kernel yang lebih baru daripada distro anda, terutamanya apabila anda menjalankan pengedaran yang stabil (e.g. Debian Stable, Centos), kerana kernel anda tidak menyokong beberapa ciri/pemandu yang anda perlukan, atau hanya kerana anda merasakan anda ingin mencuba yang terbaru dan paling hebat.

Amaran, bagaimanapun: Jika anda ingin menjalankan kernel pendarahan, pastikan ia akan bersesuaian dengan komponen utama sistem anda (seperti GLIBC), ingat bahawa lebih baru bermakna kurang ujian dan (mungkin) lebih banyak ketidakstabilan; Penyelenggara kernel pengedaran anda biasanya melakukan kerja yang baik untuk kembali beberapa ciri baru kepada biji yang lebih tua, lebih stabil, jadi pastikan anda benar-benar memerlukan pendarahan. Nasihat kami adalah untuk tidak menggunakan biji ini (kernel jangka panjang akan membuat pengecualian di sini) mengenai sistem pengeluaran. Seperti yang dikatakan, percayakan penyelenggara distro anda.

Keadaan kedua ialah anda merasakan anda menjalankan kernel kembung, dengan banyak komponen yang tidak diperlukan. Walaupun kernel hanya memuat modul yang sepadan dengan sekeping perkakasan yang ada, jejak memori yang lebih kecil dari kernel biasanya membantu kelajuan dan masa boot.

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

Perintah di atas membantu anda untuk mengetahui perkakasan anda dengan lebih baik. Tuliskan apa yang anda dapati dan pastikan anda menjalankan arahan ls* di atas sebagai akar, untuk maklumat tambahan.

Keadaan lain adalah anda ingin membantu menguji kernel dengan menjalankan terbaru pada sistem anda. Amaran yang sama seperti di atas memohon: Lakukan itu pada sistem ujian, terus berhubung dengan hulu sekiranya anda menemui pepijat (LKML.org adalah senarai mel kernel utama - trafik yang tinggi) dan cuba semoga dapat membantu apabila diminta maklumat.Ini tidak dapat ditekankan cukup: Baca dokumentasi, sama ada kerana anda mendapati diri anda dalam keadaan jahat, ingin melaporkan pepijat atau hanya ada soalan.

Seterusnya, anda mungkin mahu menjadi anak yang sejuk di blok dan menjalankan yang terbaru dan paling hebat, mungkin melirik sumbernya (dengan syarat anda berada dalam ini dan anda mempunyai pengetahuan C dan ASM) dan bahkan menyerahkan patch. Anda mungkin ingin melihat terlebih dahulu jika pengedaran anda belum menawarkan pakej kernel yang lebih baru, contohnya anda boleh memasang kernel dari Debian Experimental pada sistem ujian, jika anda mengubah sumber anda.Senarai dengan sewajarnya. Sekali lagi, bekerjasama dengan penyelenggara jika anda tersandung pada pepijat.

Terminologi

Sebelum kita menyelidiki apa -apa lagi ke dalam subjek yang agak rumit ini, kita harus membuat beberapa istilah asas yang jelas (ER); Ini penting untuk memahami bahagian utama ujian dan penyusun kernel.

  • kernel - Inti sistem operasi, yang bertanggungjawab dengan menguruskan sumber perkakasan (I/O, rangkaian, CPU, memori ...). Pada asasnya, ini adalah bahagian penting dari OS yang bertanggungjawab untuk semua kerja yang kotor. Program pengguna berkomunikasi dengan kernel, meminta masa CPU atau sumber lain oleh perpustakaan sistem yang bertindak sebagai perantara antara userland (lihat di bawah) dan kernel / perkakasan. Kernel boleh menjadi monolitik dan microkernels (untuk maklumat lanjut, jika anda berminat, lihat pendekatan reka bentuk kernel di Wikipedia.org . Microkernels (seperti minix) Gunakan skema reka bentuk yang membahagikan teras dari seluruh kernel, dan rehat itu dibahagikan kepada komponen, masing -masing melakukan sesuatu yang khusus: I/O, rangkaian, dll. Kernel monolitik (Linux, BSD, Solaris), seperti namanya, terdiri daripada kebanyakan kernel dalam satu unit, mempunyai fungsi tambahan (e.g. pemandu) disediakan oleh modul. Terdapat juga biji hibrid, gabungan antara kedua -dua, contoh yang baik adalah kernel Windows.
  • Userland - Segala -galanya dalam OS yang bukan sebahagian daripada kernel (perpustakaan, aplikasi) dikatakan sebagai sebahagian daripada userland. Nama itu jelas.
  • modul - Seperti yang ditunjukkan sebelum ini, modul kernel adalah sekeping perisian binari yang pada dasarnya "mengajar" kernel bagaimana "bercakap" dengan sekeping perkakasan atau menyediakan beberapa fungsi (e.g. NFS)
  • pengkompil - Pengkompil adalah aplikasi yang pada dasarnya mengambil kod bertulis, seperti yang dimuat turun oleh anda dari kernel.org, dan mengubahnya menjadi binari. Pengkompil yang terdapat dalam pengagihan Linux dipanggil 'GCC', dan yang bermaksud koleksi GNU Compiler, yang juga memerlukan komponen yang penting untuk membina perisian: utiliti yang terdapat dalam binutil seperti pemasangan (AS) atau perpustakaan Archiver (AR) .Pada Sistem Debian, atau Ubuntu, seseorang dapat mencari pakej mana yang dimiliki oleh fail dengan memasang dan menjalankan File Apt. Bercakap tentang itu, mari kita lihat apa pakej yang perlu kita pasang untuk membina kernel yang berjaya.
  • Kernel Vanilla - Ini adalah nama yang digunakan untuk kernel hulu, seperti yang terdapat di kernel.org, jadi tanpa patch khusus distro.

Sila ambil perhatian bahawa setiap kali anda melihat arahan dalam dokumen ini bermula dengan arahan '$' Ini bermakna arahan perlu dijalankan seperti biasa, pengguna setiap hari; Bila -bila masa anda melihat '#' segera, itu bermakna perintah itu akan dijalankan sebagai akar (kami menggunakan sudo, tetapi itu tidak wajib). Direktori semasa, melainkan dinyatakan sebaliknya, adalah yang memegang pokok sumber anda, dalam kes ini, Linux-2.6.

Apa yang anda perlukan untuk memasang

  • GCC - Sudah tentu, pengkompil itu penting
  • Binutils - Pakej ini mengandungi penghubung, pemasangan dan utiliti lain yang penting untuk menyusun program yang ditulis dalam C.
  • GCC -DOC - Halaman Manual dan Maklumat untuk GCC. Berguna jika anda ingin mendapatkan kotor dan mengubah suai beberapa bendera kompilasi. Berguna juga jika anda ingin menulis atau menyusun pakej C.
  • GDB - Debugger GNU. Tidak wajib tetapi berguna jika ada yang tidak kena. Gdb-doc juga akan membantu.
  • LibreadLine5-Dev-Untuk menggunakan antara muka berasaskan konfigurasi kernel. Anda boleh menggunakan antara muka lain (lihat di bawah).
  • membuat - akan dipasang sebagai kebergantungan, tetapi beberapa perkataan teratur. Rujuk manual atau buku, kerana ini bukan subjek yang dijelaskan ringan dalam ruang yang singkat. Buat adalah utiliti yang digunakan semasa menyusun program c/c ++, dan apa yang dilakukannya adalah kelihatan dalam makefile, yang mengandungi peraturan tentang bagaimana dan dalam perintah apa yang dibina harus terjadi, dan cuba melaksanakan arahan tersebut. Baca makefiles di pokok sumber untuk mendapatkan gambaran.
  • git-git adalah vcs (sistem kawalan versi), melakukan apa yang dilakukan oleh CVS atau subversi, iaitu menjaga anda terkini dengan pokok kernel terkini.

Mendapatkan sumber kernel

Sekiranya anda ingin memasang sumber dari pengedaran anda, gunakan

# apt-get memasang sumber linux-

di mana boleh dikumpulkan daripada mengeluarkan:

uname -r 

Gunakan ini jika anda ingin mengubah suai kernel anda yang sedia ada (menambah pemandu, pemangkasan, dll. ). Jika tidak, anda mahukan kernel vanila. Anda boleh mendapatkannya dari www.kernel.org (kami cadangkan wget atau curl di sini sebagai pengurus muat turun) atau, jika anda mahukan yang terkini, anda akan menggunakan git. Kami mengesyorkan menyimpan sumber dalam direktori rumah pengguna anda, dan arahan untuk mendapatkan pokok utama terkini adalah (lihat Man Git):

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

Pada masa lalu kami menjumpai mini-howto di http: // linux.YYZ.AS/Git-Howto.HTML berguna; Lihat juga KernelNewBies.org . Perintah di atas akan membuat folder dalam direktori semasa anda bernama Linux-2.6, yang boleh dikemas kini kemudian dengan cd'ing ke dalamnya dan mengeluarkan mudah

Buat bersih; tarik git 

Sekarang, setelah anda mempunyai sumber, kita perlu mengkonfigurasi kernel .

Konfigurasi dan Bangunan

Sekiranya anda mempunyai yang ada .Fail konfigurasi (fail yang memegang pilihan untuk bangunan kernel - apa yang masuk dan apa yang tidak), salinnya di linux -2.6 (dari /boot /config- atau /proc /config.GZ - Konfigurasi Semasa). Sekiranya anda tidak mahu mengubah suai yang ada .config, hanya mengeluarkan

$ membuat OldConfig 

Jika tidak, baca terus. Sekiranya anda ingin mengubah suai konfigurasi yang ada, masalah

$ membuat menuconfig 

(Cadangan: Anda boleh menggunakan Config untuk banyak soalan mengenai pilihan dalam kernel, atau membuat Xconfig, yang memerlukan perpustakaan QT, untuk menu yang lebih baik, menu grafik), dan pilih "Muatkan fail konfigurasi alternatif" dan tekan Enter untuk .Konfigurasi, nama lalai fail konfigurasi, atau taipkan nama fail alternatif yang telah disimpan di Linux-2.6.

Selepas itu, mulailah melalui menu untuk membuat perubahan yang diperlukan, peraturan ibu jari di sini adalah "jika anda tidak tahu apa yang dilakukannya, jangan main -main dengannya", sekurang -kurangnya sehingga anda mendapat pengalaman. Akhirnya, dari menu atas, pilih "Simpan fail konfigurasi alternatif", tekan Enter untuk nama lalai (.config - disyorkan) dan kemudian "keluar" dari bawah. Sekiranya anda ingin bermula dari awal, lupakan langkah "Muatkan fail konfigurasi alternatif" dan teruskan. Di kernel anda yang seterusnya, selepas membersihkan dan mengemas kini pokok, gunakan 'Buat OldConfig' seperti di atas untuk menggunakan konfigurasi lama. Ok, sekarang kita mempunyai konfigurasi yang disesuaikan dengan keperluan kita yang hanya menunggu untuk dibina. Membina kernel semudah mengkonfigurasinya (!). Taipkan hanya membuat dan output sepatutnya kelihatan seperti di bawah:

$ membuat skrip hostcc/asas/fixDep hostcc skrip/kconfig/conf.o skrip dihantar/kconfig/zconf.tab.C SCRIPTS/KCONFIG/ZCONF.Lex.C SCRIPTS/KCONFIG/ZCONF.hash.C Skrip Hostcc/KConfig/Zconf.tab.O Hostld Scripts/KConfig/Conf Chk termasuk/Linux/Versi.H UPD termasuk/linux/versi.h chk termasuk/dihasilkan/utsrelease.H UPD termasuk/dihasilkan/UTSRELEASE.H CC kernel/batas.s gen termasuk/dihasilkan/batas.H CC Arch/x86/kernel/ASM-offsets.s… 

Dan, selepas beberapa ketika, bergantung pada konfigurasi mesin dan kernel anda, ia akan dilakukan. Sekiranya anda ingin mempercepat perkara, gunakan bendera -jn untuk membuat, di mana n adalah bilangan pemproses/teras + 1. Berhati -hati bagaimanapun, yang boleh mendedahkan pepijat dalam kernel atau membina infrastruktur, jadi jika ada yang salah, cuba lagi dengan hanya menggunakan tanpa sebarang bendera. Jika selepas membaca manual GCC (dan jika anda masih waras), anda berasa petualang dan ingin mengubah suai beberapa bendera khusus perkakasan, atau merasa seperti mengoptimumkan kod, gunakan halaman manual membuat untuk mengetahui bagaimana (terutamanya COPT dan CFLAGS ). Walau bagaimanapun, pengoptimuman lebih besar daripada -O2 berisiko.

Berhati -hati dan mengharapkan kerosakan, kernel boleh dikumpulkan tanpa masalah, tetapi boleh bertindak pelik. Ingatlah untuk menaip semua arahan sebagai pengguna biasa. Tidak perlu membina sebagai akar dan pemaju kernel yang mengerutkan keningnya.

Pemasangan

Sekarang mari kita pasang modul: ini perlu dilakukan sebagai akar, kerana modul dipasang di /lib, dan pengguna biasa tidak mempunyai akses menulis di sana. Jadi,

# Buat modul_install 

Adakah itu, dan ini perlu dilakukan sebelum memasang kernel supaya modul dan kernel dipasang disegerakkan. Gunakan

# buat pemasangan 

Untuk memasang kernel ke /boot, maka

# DEPMOD 

dan bersiap sedia untuk membuat initramfs (sistem fail RAM awal), yang merupakan sistem fail sementara yang dimuatkan ke RAM pada peringkat boot awal, dan digunakan untuk menyediakan pemacu asas dan kemudahan lain agar sistem fail root dipasang. Maklumat lanjut boleh didapati halaman Initrd Wikipedia. Perintah yang diperlukan untuk tugas itu adalah kemas kini -initramfs (ini juga dipanggil setiap kali kernel baru dipasang, dicetuskan oleh pengurus pakej) yang boleh membuat initramfs (-c) atau mengemas kini yang sedia ada (-u) . Perintah lengkap adalah

# update -initramfs -c -k 

Versi adalah yang akan anda lihat selepas 'Buat Modules_install' selesai (baris terakhir outputnya akan menjadi "DEPMOD").Sekiranya anda ingin mempunyai nombor versi yang tepat dan lebih panjang, jadi anda boleh memberitahu pemaju apa "momen git" yang anda gunakan, pilih "Persediaan Umum" → "Sambungkan maklumat versi secara automatik ke rentetan versi" setelah mengeluarkan Menuconfig. Output pada sistem Ubuntu saya kelihatan seperti:

UPDATE-INITRAMFS: Menjana /Boot /Initrd.IMG-3.1.0-RC3+.. 

Kemas kini grub anda supaya ia memperhatikan kernel baru anda

# UPDATE-GRUB 

Pada mesin ujian Debian saya, output kelihatan seperti ini:

Menjana grub.CFG ... Imej latar belakang yang dijumpai:/usr/share/images/desktop-base/desktop-grub.PNG Found Linux Image: /boot /vmlinuz-3.0.0-1-amd64 ditemui initrd Image: /boot /initrd.IMG-3.0.0-1-AMD64 Ditemui Linux Imej: /boot /vmlinuz-3.0.0-RC6-AMD64 Ditemui Initrd Image: /boot /initrd.IMG-3.0.0-RC6-AMD64 Ditemui Linux Image: /boot /vmlinuz-2.6.39-07727-GBD1BFE4 Ditemui Initrd Imej: /boot /initrd.IMG-2.6.39-07727-GBD1BFE4 Ditemui Linux Imej: /boot /vmlinuz-2.6.39-2-AMD64 Ditemui Imej Initrd: /boot /initrd.IMG-2.6.39-2-AMD64 Ditemui Linux Imej: /boot /vmlinuz-2.6.39-RC7-AMD64 Ditemui Initrd Image: /boot /initrd.IMG-2.6.39-RC7-AMD64 Ditemui Linux Imej: /boot /vmlinuz-2.6.38.5 Ditemui Imej Initrd: /boot /initrd.IMG-2.6.38.5 Imej Linux yang dijumpai: /boot /vmlinuz-2.6.38.4-00001-GFAA8EE7 FOUND INITRD Imej: /boot /initrd.IMG-2.6.38.4-00001-GFAA8EE7 dijumpai Linux Imej: /boot /vmlinuz-2.6.38.4 dijumpai Imej initrd: /boot /initrd.IMG-2.6.38.4 Ditemui Linux Imej: /boot /vmlinuz-2.6.38-2-AMD64 Ditemui Imej Initrd: /boot /initrd.IMG-2.6.38-2-AMD64 Ditemui Linux Imej: /boot /vmlinuz-2.6.32-5-AMD64 Ditemui Imej Initrd: /boot /initrd.IMG-2.6.32-5-amd64 Ditemui Memtest86+ Imej: /Memtest86+.bin dijumpai memtest86+ multiboot Image: /memtest86+ _multiboot.Bin selesai 

Sudah tentu, output anda tidak akan kelihatan sama, tetapi garis besar harus sama; Akhirnya, ingat: jika anda mahu, edit/etc/lalai/grub untuk mengubah beberapa pilihan sebelum kemas kini grub dan, dengan jari melintasi, reboot mesin anda untuk menguji kernel baru.

Sekiranya ada yang tidak kena

Situasi yang paling biasa apabila kernel baru anda tidak dapat digunakan ialah anda tidak dapat bootnya di tempat pertama, atau ia tidak mempunyai beberapa pemacu penting (contohnya pemandu rangkaian). Biasanya, kemas kini grub melakukan pekerjaan yang baik dalam menulis fail menu grub, tetapi anda mungkin mahu menyemaknya. Sekiranya anda lulus grub, kemungkinan anda mendapat terlalu banyak dan mengawasi pemacu penting untuk sistem, seperti bahagian yang berkaitan dengan cakera (ATA, SATA, SCSI ...), atau mungkin NFS, jika anda mempunyai akar yang dipasang NFS. Boot kernel kerja dan menyusun semula, menggunakan Google dan kemungkinan sumber lain, seperti IRC .

Kemungkinan seseorang sudah tersandung masalah anda pada masa lalu dan anda mempunyai peluang untuk mencari jawapan. Sekiranya masalahnya lebih serius, dan anda yakin anda membaca tentang netiquette dan bagaimana hendak menghantar ke senarai mel kernel, tanya dengan baik. Terdapat banyak orang yang baik dan membantu di luar sana, tetapi mereka cenderung tidak begitu baik ketika anda belum membuat kerja rumah anda dan/atau membuang masa mereka. Sekiranya anda mempunyai berasingan /boot, ingatlah bahawa biasanya tidak terlalu besar dan ia mungkin mengisi dengan kernel dengan cepat. Juga /lib /modul cenderung mengumpulkan banyak ruang dalam /, jadi pastikan untuk melakukan pembersihan dari semasa ke semasa. Ingat bahawa kernel adalah perisian yang kompleks dan banyak sebab boleh menjadi akar masalah anda. Sekiranya anda tidak mempunyai masalah mengikuti panduan ini, anda sudah bersedia untuk konfigurasi kernel Linux yang lebih maju.

Tutorial Linux Berkaitan:

  • Perkara yang hendak dipasang di Ubuntu 20.04
  • Perkara yang perlu dilakukan setelah memasang ubuntu 20.04 Focal Fossa Linux
  • Pengenalan kepada Automasi, Alat dan Teknik Linux
  • Ubuntu 20.04 Panduan
  • Cara membuang biji lama di Ubuntu
  • Perkara yang perlu dilakukan setelah memasang Ubuntu 22.04 Jur -ubur Jammy ..
  • Mint 20: Lebih baik daripada Ubuntu dan Microsoft Windows?
  • Sistem Hung Linux? Cara melarikan diri ke baris arahan dan ..
  • Perkara yang perlu dipasang di Ubuntu 22.04
  • Pasang Arch Linux di Workstation VMware