Kernel Linux

Mengelola Modul Kernel Linux

Mengelola Modul Kernel Linux

Memahami kernel Linux

Kernel Linux adalah inti dari sistem operasi Linux. Ini berisi komponen utama untuk menangani perangkat keras dan memungkinkan komunikasi dan interaksi antara pengguna dan perangkat keras. Kernel Linux bukanlah sistem monolitik tetapi cukup fleksibel, dan kernel diperluas dengan apa yang disebut modul kernel.

Apa itu modul kernel?

Secara umum, modul kernel adalah “sepotong kode yang dapat dimuat dan dibongkar ke dalam kernel sesuai permintaan. Mereka memperluas fungsionalitas kernel tanpa perlu me-reboot sistem” [1]. Ini mengarah pada fleksibilitas yang sangat besar selama operasi.

Selanjutnya, “modul kernel dapat dikonfigurasi sebagai built-in atau dapat dimuat. Untuk memuat atau menghapus modul secara dinamis, modul tersebut harus dikonfigurasi sebagai modul yang dapat dimuat dalam konfigurasi kernel” [1]. Ini dilakukan di file sumber kernel /usr/src/linux/.konfigurasi [2]. Modul bawaan ditandai dengan "y" dan modul yang dapat dimuat dengan "m". Sebagai contoh, daftar 1 menunjukkan ini untuk modul SCSI:

Daftar 1: Deklarasi penggunaan modul SCSI

CONFIG_SCSI=y # modul bawaan
CONFIG_SCSI=m # modul yang dapat dimuat
# CONFIG_SCSI # variabel tidak disetel

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

Perintah modul

Sistem Linux dilengkapi dengan sejumlah perintah berbeda untuk menangani modul kernel. Ini termasuk daftar modul yang saat ini dimuat ke kernel Linux, menampilkan informasi modul, serta memuat dan membongkar modul kernel. Di bawah ini kami akan menjelaskan perintah-perintah ini secara lebih rinci.

Untuk kernel Linux saat ini, perintah berikut disediakan oleh paket kmod [3]. Semua perintah adalah tautan simbolis ke kmod.

Daftar modul yang saat ini dimuat dengan lsmod

Kita mulai dengan perintah lsmod. lsmod menyingkat "daftar modul" dan menampilkan semua modul yang saat ini dimuat ke dalam kernel Linux dengan memformat konten file /proc/modules dengan baik. Listing 2 menunjukkan outputnya yang terdiri dari tiga kolom: nama modul, ukuran yang digunakan dalam memori, dan modul kernel lain yang menggunakan yang spesifik ini.

Daftar 2: Menggunakan lsmod

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

$

Temukan modul yang tersedia untuk kernel Anda saat ini

Mungkin ada modul kernel yang tersedia yang belum Anda ketahui. Mereka disimpan di direktori /lib/modules. Dengan bantuan find, dikombinasikan dengan perintah uname, Anda dapat mencetak daftar modul-modul ini. "uname -r" hanya mencetak versi kernel Linux yang sedang berjalan. Daftar 3 menunjukkan ini untuk 3 yang lebih tua.16.0-7 Linux
kernel, dan menunjukkan modul untuk IPv6 dan IRDA.

Listing 3: Menampilkan modul yang tersedia (pilihan)

$ temukan /lib/modules/$(uname -r) -nama '*.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/net/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

$

Tampilkan informasi modul menggunakan modinfo

Perintah modinfo memberi tahu Anda lebih banyak tentang modul kernel yang diminta ("informasi modul"). Sebagai parameter, modinfo memerlukan jalur modul lengkap atau hanya nama modul. Daftar 4 menunjukkan ini untuk modul kernel IrDA yang berhubungan dengan tumpukan protokol Akses Langsung Inframerah.

Daftar 4: Tampilkan informasi modul

$ /sbin/modinfo irda
nama file: /lib/modules/3.16.0-7-amd64/kernel/net/irda/irda.ko
alias: net-pf-23
lisensi: GPL
deskripsi: Tumpukan Protokol IrDA Linux
penulis: Dag Brattli & Jean Tourrilhes
tergantung: crc-ccitt
vermagic: 3.16.0-7-amd64 SMP mod_unload modversions
$

Outputnya berisi bidang informasi yang berbeda seperti path lengkap untuk modul kernel, nama aliasnya, lisensi perangkat lunak, deskripsi modul, penulis, serta internal kernel. Bidang "tergantung" menunjukkan modul kernel lain yang bergantung padanya.

Bidang informasi berbeda dari modul ke modul. Untuk membatasi output ke bidang informasi tertentu, modinfo menerima parameter "-F" (kependekan dari "-bidang") diikuti dengan nama bidang. Di Listing 5, output terbatas pada informasi lisensi yang tersedia menggunakan bidang lisensi.

Listing 5: Menampilkan bidang tertentu saja.

$ /sbin/modinfo -F lisensi irda
GPL
$

Di kernel Linux yang lebih baru, fitur keamanan yang berguna tersedia. Ini mencakup modul kernel yang ditandatangani secara kriptografis. Seperti yang dijelaskan di situs web proyek kernel Linux [4], “ini memungkinkan peningkatan keamanan kernel dengan melarang pemuatan modul atau modul yang tidak ditandatangani
ditandatangani dengan kunci yang tidak valid. Penandatanganan modul meningkatkan keamanan dengan mempersulit pemuatan modul berbahaya ke dalam kernel. Pengecekan tanda tangan modul dilakukan oleh kernel sehingga tidak perlu memiliki “bit ruang pengguna tepercaya”.Gambar di bawah menunjukkan ini untuk
modul parport_pc.

Tampilkan konfigurasi modul menggunakan modprobe

Setiap modul kernel dilengkapi dengan konfigurasi tertentu. Perintah modprobe diikuti oleh opsi "-c" (kependekan dari "-showconfig") mencantumkan konfigurasi modul. Dalam kombinasi dengan grep, output ini terbatas pada simbol tertentu. Daftar 6 menunjukkan ini untuk opsi IPv6.

Daftar 6: Tampilkan 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_aktifkan 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
$

Tampilkan dependensi modul

Kernel Linux dirancang untuk menjadi modular, dan fungsionalitas didistribusikan melalui sejumlah modul. Ini mengarah ke beberapa dependensi modul yang dapat ditampilkan menggunakan modprobe lagi. Listing 7 menggunakan opsi “-show-depends” untuk membuat daftar dependensi untuk modul i915.

Daftar 7: Tampilkan dependensi modul

$ /sbin/modprobe --show-depends i915
insmod /lib/modules/3.16.0-7-amd64/kernel/driver/i2c/i2c-core.ko
insmod /lib/modules/3.16.0-7-amd64/kernel/driver/i2c/algos/i2c-algo-bit.ko
insmod /lib/modules/3.16.0-7-amd64/kernel/driver/thermal/thermal_sys.ko
insmod /lib/modules/3.16.0-7-amd64/kernel/driver/gpu/drm/drm.ko
insmod /lib/modules/3.16.0-7-amd64/kernel/driver/gpu/drm/drm_kms_helper.ko
insmod /lib/modules/3.16.0-7-amd64/kernel/driver/acpi/video.ko
insmod /lib/modules/3.16.0-7-amd64/kernel/driver/acpi/tombol.ko
insmod /lib/modules/3.16.0-7-amd64/kernel/driver/gpu/drm/i915/i915.ko
$

Untuk menampilkan dependensi sebagai pohon yang mirip dengan perintah "pohon" atau "lsblk", proyek modtree [5] dapat membantu (lihat gambar di bawah untuk pohon modul i915). Meskipun tersedia secara bebas di GitHub, memerlukan beberapa adaptasi untuk mematuhi aturan perangkat lunak bebas dan untuk menjadi bagian dari distribusi Linux sebagai satu paket.

Memuat modul

Memuat modul ke kernel yang sedang berjalan dapat dilakukan dengan dua perintah - insmod ("masukkan modul") dan modprobe. Ketahuilah bahwa ada sedikit perbedaan penting antara keduanya: insmod tidak menyelesaikan dependensi modul, tetapi modprobe lebih pintar dan melakukan itu.

Daftar 8 menunjukkan cara memasukkan modul kernel IrDA. Harap dicatat bahwa insmode bekerja dengan jalur modul lengkap, sedangkan modprobe senang dengan nama modul dan mencarinya sendiri di pohon modul untuk kernel Linux saat ini.

Daftar 8: Memasukkan modul kernel

# insmod /lib/modules/3.16.0-7-amd64/kernel/net/irda/irda.ko

#modprobe irda

Bongkar modul

Langkah terakhir berkaitan dengan membongkar modul dari kernel yang sedang berjalan. Sekali lagi, ada dua perintah yang tersedia untuk tugas ini - modprobe dan rmmod ("hapus modul"). Kedua perintah mengharapkan nama modul sebagai parameter. Daftar 9 menunjukkan ini untuk menghapus modul IrDA dari kernel Linux yang sedang berjalan.

Daftar 9: Menghapus modul kernel

#rmmod irda

#modprobe -r irda

Kesimpulan

Menangani modul kernel Linux bukanlah keajaiban besar. Hanya beberapa perintah untuk dipelajari, dan Anda adalah penguasa 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 saat menyiapkan artikel.

Tautan dan Referensi

  • [1] Modul kernel, wiki Arch Linux, 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.inti.org/pub/scm/utils/kernel/kmod/kmod.git
  • [4] Fasilitas penandatanganan modul kernel, https://www.inti.org/doc/html/v4.15/panduan admin/penandatanganan modul.html
  • [5] modtree, https://github.com/falconindy/modtree
Instal Dolphin Emulator terbaru untuk Gamecube & Wii di Linux
Dolphin Emulator memungkinkan Anda memainkan game Gamecube & Wii pilihan Anda di Komputer Pribadi (PC) Linux. Menjadi emulator game sumber terbuka da...
Cara Menggunakan Cheat Engine GameConqueror di Linux
Artikel ini mencakup panduan tentang menggunakan mesin cheat GameConqueror di Linux. Banyak pengguna yang bermain game di Windows sering menggunakan a...
Emulator Konsol Game Terbaik untuk Linux
Artikel ini akan mencantumkan perangkat lunak emulasi konsol game populer yang tersedia untuk Linux. Emulasi adalah lapisan kompatibilitas perangkat l...