Kernel Linux

Menguruskan Modul Kernel Linux

Menguruskan Modul Kernel Linux

Memahami kernel Linux

Kernel Linux adalah teras sistem operasi Linux. Ia mengandungi komponen utama untuk menangani perkakasan dan memungkinkan komunikasi dan interaksi antara pengguna dan perkakasan. Kernel Linux bukan sistem monolitik tetapi cukup fleksibel, dan kernel diperluas oleh modul kernel yang disebut.

Apa itu modul kernel?

Secara umum, modul kernel adalah "potongan kode yang dapat dimuat dan dimuat ke dalam kernel berdasarkan permintaan. Mereka memperluas fungsi kernel tanpa perlu menghidupkan semula sistem ”[1]. Ini menyebabkan fleksibiliti yang sangat besar semasa operasi.

Selanjutnya, "modul kernel dapat dikonfigurasi sebagai built-in atau loadable. Untuk memuat atau mengeluarkan modul secara dinamis, modul harus dikonfigurasi sebagai modul yang dapat dimuat dalam konfigurasi kernel ”[1]. Ini dilakukan dalam fail sumber kernel / usr / src / linux /.konfigurasi [2]. Modul terbina dalam ditandai dengan "y" dan modul yang boleh dimuat dengan "m". Sebagai contoh, senarai 1 menunjukkan ini untuk modul SCSI:

Penyenaraian 1: Deklarasi penggunaan modul SCSI

CONFIG_SCSI = y # modul terbina dalam
CONFIG_SCSI = m # modul yang boleh dimuat
Pembolehubah # CONFIG_SCSI # tidak ditetapkan

Kami tidak mengesyorkan mengedit file konfigurasi secara langsung, tetapi menggunakan perintah "make config", "make menuconfig", atau "make xconfig" untuk menentukan penggunaan modul yang sesuai dalam kernel Linux.

Perintah modul

Sistem Linux dilengkapi dengan sejumlah perintah yang berbeza untuk menangani modul kernel. Ini termasuk menyenaraikan modul yang saat ini dimuat ke kernel Linux, memaparkan maklumat modul, serta memuat dan memunggah modul kernel. Di bawah ini kami akan menerangkan arahan ini dengan lebih terperinci.

Untuk kernel Linux semasa, arahan berikut disediakan oleh pakej kmod [3]. Semua arahan adalah pautan simbolik ke kmod.

Senarai yang dimuatkan modul dengan lsmod

Kita mulakan dengan arahan lsmod. lsmod menyingkat "senarai modul" dan memaparkan semua modul yang sedang dimuat ke kernel Linux dengan memformat isi fail / proc / modul dengan baik. Penyenaraian 2 menunjukkan outputnya yang terdiri dari tiga lajur: nama modul, ukuran yang digunakan dalam memori, dan modul kernel lain yang menggunakan yang khusus.

Penyenaraian 2: Menggunakan lsmod

$ lsmod
Saiz Modul Digunakan oleh
ctr 12927 2
ccm 17534 2
snd_hrtimer 12604 1
snd_seq 57112 1
snd_seq_device 13132 1 snd_seq

$

Cari modul yang tersedia untuk kernel anda sekarang

Mungkin terdapat modul kernel yang belum anda ketahui. Mereka disimpan dalam direktori / lib / modul. Dengan bantuan mencari, digabungkan dengan perintah yang tidak disebutkan namanya, anda dapat mencetak senarai modul ini. "Uname -r" hanya mencetak versi kernel Linux yang sedang berjalan. Penyenaraian 3 menunjukkan ini untuk 3 yang lebih tua.16.0-7 Linux
kernel, dan menunjukkan modul untuk IPv6 dan IRDA.

Penyenaraian 3: Memaparkan modul yang tersedia (pilihan)

$ cari / lib / modul / $ (uname -r) -name '*.ko '
/ lib / modul / 3.16.0-7-amd64 / kernel / net / ipv6 / ip6_vti.ko
/ lib / modul / 3.16.0-7-amd64 / kernel / net / ipv6 / xfrm6_tunnel.ko
/ lib / modul / 3.16.0-7-amd64 / kernel / net / ipv6 / ip6_tunnel.ko
/ lib / modul / 3.16.0-7-amd64 / kernel / net / ipv6 / ip6_gre.ko
/ lib / modul / 3.16.0-7-amd64 / kernel / net / irda / irnet / irnet.ko
/ lib / modul / 3.16.0-7-amd64 / kernel / net / irda / irlan / irlan.ko
/ lib / modul / 3.16.0-7-amd64 / kernel / bersih / irda / irda.ko
/ lib / modul / 3.16.0-7-amd64 / kernel / net / irda / ircomm / ircomm.ko
/ lib / modul / 3.16.0-7-amd64 / kernel / net / irda / ircomm / ircomm-tty.ko

$

Paparkan maklumat modul menggunakan modinfo

Modinfo arahan memberitahu anda lebih banyak mengenai modul kernel yang diminta ("maklumat modul"). Sebagai parameter, modinfo memerlukan jalan modul penuh atau hanya nama modul. Penyenaraian 4 menunjukkan ini untuk modul kernel IrDA yang berurusan dengan tumpukan protokol Akses Langsung Inframerah.

Penyenaraian 4: Paparkan maklumat modul

$ / sbin / modinfo irda
nama fail: / lib / modul / 3.16.0-7-amd64 / kernel / bersih / irda / irda.ko
alias: net-pf-23
lesen: GPL
keterangan: Tumpukan Protokol IrDA Linux
pengarang: Dag Brattli & Jean Tourrilhes
bergantung: crc-ccitt
vermagik: 3.16.0-7-amd64 SMP mod_unload modversions
$

Hasilnya mengandungi bidang maklumat yang berbeza seperti jalur penuh untuk modul kernel, nama aliasnya, lesen perisian, perihalan modul, pengarang, dan juga inti kernel. Medan "bergantung" menunjukkan modul kernel lain yang bergantung kepadanya.

Bidang maklumat berbeza dari modul ke modul. Untuk membatasi output ke bidang informasi tertentu, modinfo menerima parameter "-F" (singkatan dari "-field") diikuti dengan nama bidang. Dalam Penyenaraian 5, keluarannya terbatas pada maklumat lesen yang tersedia menggunakan bidang lesen.

Penyenaraian 5: Paparkan bidang tertentu sahaja.

$ / sbin / modinfo -F irda lesen
GPL
$

Dalam kernel Linux yang lebih baru, terdapat ciri keselamatan yang berguna. Ini merangkumi modul kernel yang ditandatangani secara kriptografi. Seperti yang dijelaskan di laman web projek kernel Linux [4], “ini memungkinkan peningkatan keamanan kernel dengan tidak membenarkan pemuatan modul atau modul yang tidak ditandatangani
ditandatangani dengan kunci yang tidak sah. Penandatanganan modul meningkatkan keselamatan dengan menjadikannya lebih sukar untuk memuatkan modul jahat ke kernel. Pemeriksaan tandatangan modul dilakukan oleh kernel sehingga tidak perlu memiliki bit pengguna yang dipercayai."Gambar di bawah menunjukkan ini untuk
modul parport_pc.

Tunjukkan konfigurasi modul menggunakan modprobe

Setiap modul kernel dilengkapi dengan konfigurasi tertentu. Modprobe arahan diikuti dengan pilihan "-c" (singkatan dari "-showconfig") menyenaraikan konfigurasi modul. Dalam kombinasi dengan grep, output ini terhad kepada simbol tertentu. Penyenaraian 6 menunjukkan ini untuk pilihan IPv6.

Penyenaraian 6: Tunjukkan konfigurasi modul

$ / sbin / modprobe -c | grep ipv6
alias net_pf_10_proto_0_type_6 dccp_ipv6
alias net_pf_10_proto_33_type_6 dccp_ipv6
alias nf_conntrack_10 nf_conntrack_ipv6
alias nf_nat_10 nf_nat_ipv6
alias nft_afinfo_10 nf_tables_ipv6
alias nft_chain_10_nat nft_chain_nat_ipv6
alias nft_chain_10_route nft_chain_route_ipv6
alias nft_expr_10_reject nft_reject_ipv6
simbol alias: nf_defrag_ipv6_dayakan nf_defrag_ipv6
simbol alias: nf_nat_icmpv6_reply_translation nf_nat_ipv6
simbol alias: nft_af_ipv6 nf_tables_ipv6
simbol alias: nft_reject_ipv6_eval nft_reject_ipv6
$

Tunjukkan kebergantungan modul

Kernel Linux dirancang untuk menjadi modular, dan fungsi diedarkan ke sejumlah modul. Ini membawa kepada beberapa kebergantungan modul yang dapat ditampilkan menggunakan modprobe sekali lagi. Penyenaraian 7 menggunakan pilihan "-show-tergantung" untuk menyenaraikan kebergantungan untuk modul i915.

Penyenaraian 7: Tunjukkan kebergantungan modul

$ / sbin / modprobe --show-tergantung i915
insmod / lib / modul / 3.16.0-7-amd64 / kernel / pemacu / i2c / i2c-core.ko
insmod / lib / modul / 3.16.0-7-amd64 / kernel / pemacu / i2c / algos / i2c-algo-bit.ko
insmod / lib / modul / 3.16.0-7-amd64 / kernel / pemacu / termal / termal_sys.ko
insmod / lib / modul / 3.16.0-7-amd64 / kernel / pemacu / gpu / drm / drm.ko
insmod / lib / modul / 3.16.0-7-amd64 / kernel / pemacu / gpu / drm / drm_kms_helper.ko
insmod / lib / modul / 3.16.0-7-amd64 / kernel / pemacu / acpi / video.ko
insmod / lib / modul / 3.16.0-7-amd64 / kernel / pemacu / acpi / butang.ko
insmod / lib / modul / 3.16.0-7-amd64 / kernel / pemacu / gpu / drm / i915 / i915.ko
$

Untuk menampilkan kebergantungan sebagai pohon yang serupa dengan perintah "pohon" atau "lsblk", projek modtree [5] dapat membantu (lihat gambar di bawah untuk pohon modul i915). Walaupun tersedia secara percuma di GitHub, ia memerlukan beberapa penyesuaian untuk mematuhi peraturan untuk perisian percuma dan menjadi sebahagian daripada distribusi Linux sebagai pakej.

Memuatkan modul

Memuat modul ke kernel yang berjalan dapat dilakukan dengan dua perintah - insmod ("insert module") dan modprobe. Ketahuilah bahawa terdapat sedikit perbezaan tetapi penting antara keduanya: insmod tidak menyelesaikan kebergantungan modul, tetapi modprobe lebih pintar dan melakukan itu.

Penyenaraian 8 menunjukkan cara memasukkan modul kernel IrDA. Harap maklum bahawa insmode berfungsi dengan jalur modul penuh, sedangkan modprobe gembira dengan nama modul dan melihatnya sendiri di pohon modul untuk kernel Linux semasa.

Penyenaraian 8: Memasukkan modul kernel

# insmod / lib / modul / 3.16.0-7-amd64 / kernel / bersih / irda / irda.ko

# modprobe irda

Memunggah modul

Langkah terakhir berkaitan dengan memunggah modul dari kernel yang sedang berjalan. Sekali lagi, terdapat dua arahan yang tersedia untuk tugas ini - modprobe dan rmmod ("remove module"). Kedua-dua arahan mengharapkan nama modul sebagai parameter. Penyenaraian 9 menunjukkan ini untuk mengeluarkan modul IrDA dari kernel Linux yang sedang berjalan.

Penyenaraian 9: Membuang modul kernel

# rmmod irda

# modprobe -r irda

Kesimpulannya

Mengendalikan modul kernel Linux bukanlah satu keajaiban. Hanya beberapa arahan untuk belajar, dan anda adalah ketua dapur.

Terima kasih

Penulis ingin mengucapkan terima kasih kepada Axel Beckert (ETH Zürich) dan Saif du Plessis (Hothead Studio Cape Town) atas bantuan mereka semasa menyiapkan artikel.

Pautan dan Rujukan

  • [1] Modul Kernel, Arch Linux wiki, https: // wiki.archlinux.org / indeks.php / Kernel_module
  • [2] Konfigurasi Kernel, https: // tldp.org / HOWTO / SCSI-2.4-HOWTO / kconfig.html
  • [3] kmod, https: // git.kernel.org / pub / scm / perkakas / kernel / kmod / kmod.git
  • [4] Kemudahan menandatangani modul Kernel, https: // www.kernel.org / doc / html / v4.15 / panduan pentadbir / modul-menandatangani.html
  • [5] modtree, https: // github.com / falconindy / modtree
Tiru klik Tetikus dengan melayang menggunakan Mouse Tanpa Klik di Windows 10
Menggunakan tetikus atau papan kekunci dalam keadaan salah penggunaan berlebihan boleh menyebabkan banyak masalah kesihatan, termasuk ketegangan, sind...
Tambahkan isyarat Tetikus ke Windows 10 menggunakan alat percuma ini
Dalam beberapa tahun kebelakangan ini komputer dan sistem operasi telah banyak berkembang. Ada saat ketika pengguna harus menggunakan perintah untuk m...
Mengawal & menguruskan pergerakan tetikus antara beberapa monitor di Windows 10
Pengurus Tetikus Paparan Dwi membolehkan anda mengawal & mengkonfigurasi pergerakan tetikus antara beberapa monitor, dengan memperlahankan pergerakann...