Linux çekirdeği

Linux Çekirdek Modüllerini Yönetme

Linux Çekirdek Modüllerini Yönetme

Linux çekirdeğini anlamak

Linux çekirdeği, Linux işletim sisteminin çekirdeğidir. Donanıma hitap eden ana bileşenleri içerir ve kullanıcı ile donanım arasında hem iletişimi hem de etkileşimi sağlar. Linux çekirdeği monolitik bir sistem değil, oldukça esnektir ve çekirdek, çekirdek modülleri olarak adlandırılanlarla genişletilir.

çekirdek modülü nedir?

Genel olarak, bir çekirdek modülü, “istek üzerine çekirdeğe yüklenebilen ve boşaltılabilen bir kod parçasıdır. Sistemi yeniden başlatmaya gerek kalmadan çekirdeğin işlevselliğini genişletiyorlar” [1]. Bu, çalışma sırasında çok büyük esnekliğe yol açar.

Ayrıca, “bir çekirdek modülü yerleşik veya yüklenebilir olarak yapılandırılabilir. Bir modülü dinamik olarak yüklemek veya kaldırmak için, çekirdek yapılandırmasında yüklenebilir bir modül olarak yapılandırılmalıdır” [1]. Bu, /usr/src/linux/ çekirdek kaynak dosyasında yapılır.yapılandırma [2]. Yerleşik modüller “y” ile ve yüklenebilir modüller “m” ile işaretlenmiştir. Örnek olarak, liste 1, SCSI modülü için bunu göstermektedir:

Liste 1: SCSI modülü kullanım beyanı

CONFIG_SCSI=y # yerleşik modül
CONFIG_SCSI=m # yüklenebilir modül
# CONFIG_SCSI # değişken ayarlanmadı

Konfigürasyon dosyasını doğrudan düzenlemenizi önermiyoruz, ancak Linux çekirdeğinde ilgili modülün kullanımını tanımlamak için “make config”, “make menuconfig” veya “make xconfig” komutunu kullanmanızı öneririz.

Modül komutları

Linux sistemi, çekirdek modüllerini işlemek için bir dizi farklı komutla birlikte gelir. Bu, şu anda Linux çekirdeğine yüklenen modüllerin listelenmesini, modül bilgilerinin görüntülenmesini ve ayrıca çekirdek modüllerinin yüklenmesi ve boşaltılmasını içerir. Aşağıda bu komutları daha ayrıntılı olarak açıklayacağız.

Mevcut Linux çekirdekleri için aşağıdaki komutlar kmod paketi [3] tarafından sağlanmaktadır. Tüm komutlar kmod'a sembolik bağlantılardır.

Şu anda lsmod ile yüklü modüllerin listesi

lsmod komutuyla başlıyoruz. lsmod, "list modülleri" kısaltır ve /proc/modules dosyasının içeriğini güzel bir şekilde biçimlendirerek Linux çekirdeğine yüklenmiş olan tüm modülleri görüntüler. Liste 2, üç sütundan oluşan çıktısını gösterir: modül adı, bellekte kullanılan boyut ve bu belirli olanı kullanan diğer çekirdek modülleri.

Liste 2: lsmod Kullanımı

$ lsmod
Kullanılan Modül Boyutu
hedef 12927 2
ccm 17534 2
snd_hrtimer 12604 1
snd_seq 57112 1
snd_seq_device 13132 1 snd_seq

$

Mevcut çekirdeğiniz için mevcut modülleri bulun

Henüz farkında olmadığınız kullanılabilir çekirdek modülleri olabilir. /lib/modules dizininde saklanırlar. uname komutuyla birlikte find yardımı ile bu modüllerin bir listesini yazdırabilirsiniz. "uname -r" sadece şu anda çalışan Linux çekirdeğinin sürümünü yazdırır. Liste 3, bunu daha eski bir 3 için göstermektedir.16.0-7 Linux
çekirdek ve IPv6 ve IRDA için modülleri gösterir.

Liste 3: Kullanılabilir modülleri görüntüleme (seçim)

$ find /lib/modules/$(uname -r) -name '*.ko'
/lib/modüller/3.16.0-7-amd64/kernel/net/ipv6/ip6_vti.ko
/lib/modüller/3.16.0-7-amd64/kernel/net/ipv6/xfrm6_tunnel.ko
/lib/modüller/3.16.0-7-amd64/kernel/net/ipv6/ip6_tunnel.ko
/lib/modüller/3.16.0-7-amd64/kernel/net/ipv6/ip6_gre.ko
/lib/modüller/3.16.0-7-amd64/kernel/net/irda/irnet/irnet.ko
/lib/modüller/3.16.0-7-amd64/kernel/net/irda/irlan/irlan.ko
/lib/modüller/3.16.0-7-amd64/kernel/net/irda/irda.ko
/lib/modüller/3.16.0-7-amd64/kernel/net/irda/ircomm/ircomm.ko
/lib/modüller/3.16.0-7-amd64/kernel/net/irda/ircomm/ircomm-tty.ko

$

Modinfo kullanarak modül bilgilerini görüntüleyin

modinfo komutu, istenen çekirdek modülü hakkında size daha fazla bilgi verir (“modül bilgisi”). Bir parametre olarak modinfo, ya tam modül yolunu ya da sadece modül adını gerektirir. Liste 4, Kızılötesi Doğrudan Erişim protokol yığınıyla ilgilenen IrDA çekirdek modülü için bunu göstermektedir.

Liste 4: Modül bilgilerini görüntüleyin

$ /sbin/modinfo irda
dosya adı: /lib/modules/3.16.0-7-amd64/kernel/net/irda/irda.ko
takma ad: net-pf-23
lisans: GPL
tanım: Linux IrDA Protokol Yığını
yazar: Dag Brattli & Jean Tourrilhes
bağlıdır: crc-ccitt
vermagic: 3.16.0-7-amd64 SMP mod_unload mod sürümleri
$

Çıktı, çekirdek modülünün tam yolu, takma adı, yazılım lisansı, modül açıklaması, yazarlar ve ayrıca çekirdeğin dahili bilgileri gibi farklı bilgi alanlarını içerir. "Bağlıdır" alanı, hangi diğer çekirdek modüllerine bağlı olduğunu gösterir.

Bilgi alanları modülden modüle farklılık gösterir. Çıktıyı belirli bir bilgi alanıyla sınırlamak için modinfo, “-F” parametresini (“-field” kısaltması) ve ardından alan adını kabul eder. Liste 5'te çıktı, lisans alanı kullanılarak kullanıma sunulan lisans bilgileriyle sınırlıdır.

Liste 5: Yalnızca belirli bir alanı görüntüleyin.

$ /sbin/modinfo -F lisansı irda
GPL
$

Daha yeni Linux çekirdeklerinde kullanışlı bir güvenlik özelliği mevcuttur. Bu, kriptografik olarak imzalanmış çekirdek modüllerini kapsar. Linux çekirdek proje web sitesinde [4] açıklandığı gibi, “bu, imzasız modüllerin veya modüllerin yüklenmesine izin vermeyerek çekirdek güvenliğinin artmasına izin verir
geçersiz bir anahtarla imzalanmış. Modül imzalama, kötü amaçlı bir modülü çekirdeğe yüklemeyi zorlaştırarak güvenliği artırır. Modül imza denetimi, çekirdek tarafından yapılır, böylece "güvenilir kullanıcı alanı bitlerine" gerek kalmaz.Aşağıdaki şekil bunu göstermektedir
parport_pc modülü.

Modprobe kullanarak modül yapılandırmasını göster

Her çekirdek modülü belirli bir yapılandırmayla gelir. Modprobe komutu ve ardından “-c” seçeneği (“-showconfig” kısaltması) modül konfigürasyonunu listeler. grep ile birlikte, bu çıktı belirli bir sembolle sınırlıdır. Liste 6, bunu IPv6 seçenekleri için gösterir.

Liste 6: Modül yapılandırmasını göster

$ /sbin/modprobe -c | grep ipv6
takma ad net_pf_10_proto_0_type_6 dccp_ipv6
takma ad net_pf_10_proto_33_type_6 dccp_ipv6
takma ad nf_conntrack_10 nf_conntrack_ipv6
takma ad nf_nat_10 nf_nat_ipv6
takma ad nft_afinfo_10 nf_tables_ipv6
takma ad nft_chain_10_nat nft_chain_nat_ipv6
takma ad nft_chain_10_route nft_chain_route_ipv6
takma ad nft_expr_10_reject nft_reject_ipv6
takma ad sembolü:nf_defrag_ipv6_nf_defrag_ipv6'yı etkinleştir
takma ad sembolü:nf_nat_icmpv6_reply_translation nf_nat_ipv6
takma ad sembolü:nft_af_ipv6 nf_tables_ipv6
takma ad sembolü:nft_reject_ipv6_eval nft_reject_ipv6
$

Modül bağımlılıklarını göster

Linux çekirdeği modüler olacak şekilde tasarlanmıştır ve işlevsellik bir dizi modüle dağıtılmıştır. Bu, modprobe kullanılarak tekrar görüntülenebilen birkaç modül bağımlılığına yol açar. Liste 7, i915 modülünün bağımlılıklarını listelemek için “-show-depends” seçeneğini kullanır.

Liste 7: Modül bağımlılıklarını göster

$ /sbin/modprobe --show-i915'e bağlıdır
insmod /lib/modüller/3.16.0-7-amd64/kernel/drivers/i2c/i2c-core.ko
insmod /lib/modüller/3.16.0-7-amd64/çekirdek/sürücüler/i2c/algos/i2c-algo-bit.ko
insmod /lib/modüller/3.16.0-7-amd64/kernel/drivers/thermal/thermal_sys.ko
insmod /lib/modüller/3.16.0-7-amd64/çekirdek/sürücüler/gpu/drm/drm.ko
insmod /lib/modüller/3.16.0-7-amd64/kernel/drivers/gpu/drm/drm_kms_helper.ko
insmod /lib/modüller/3.16.0-7-amd64/çekirdek/sürücüler/acpi/video.ko
insmod /lib/modüller/3.16.0-7-amd64/çekirdek/sürücüler/acpi/düğme.ko
insmod /lib/modüller/3.16.0-7-amd64/çekirdek/sürücüler/gpu/drm/i915/i915.ko
$

Bağımlılıkları “ağaç” veya “lsblk” komutuna benzer bir ağaç olarak görüntülemek için modtree projesi [5] yardımcı olabilir (i915 modül ağacı için aşağıdaki şekle bakın). GitHub'da ücretsiz olarak mevcut olmasına rağmen, özgür yazılım kurallarına uymak ve paket olarak bir Linux dağıtımının parçası olmak için bazı uyarlamalar gerektirir.

Modüller yükleniyor

Çalışan bir çekirdeğe bir modül yüklemek iki komutla yapılabilir - insmod ("insert module") ve modprobe. Bu ikisi arasında küçük ama önemli bir fark olduğunu unutmayın: insmod modül bağımlılıklarını çözmez, ancak modprobe daha akıllıdır ve bunu yapar.

Liste 8, IrDA çekirdek modülünün nasıl yerleştirileceğini gösterir. Lütfen insmode'un tam modül yolu ile çalıştığını, modprobe'un modülün adından memnun olduğunu ve mevcut Linux çekirdeği için modül ağacında kendisini aradığını unutmayın.

Liste 8: Bir çekirdek modülü ekleme

# insmod /lib/modüller/3.16.0-7-amd64/kernel/net/irda/irda.ko

# modprobe irda

Boşaltma modülleri

Son adım, çalışan bir çekirdekten modüllerin boşaltılmasıyla ilgilidir. Yine, bu görev için kullanılabilecek iki komut vardır - modprobe ve rmmod (“modu kaldır”). Her iki komut da modül adını parametre olarak bekler. Liste 9 bunu, çalışan Linux çekirdeğinden IrDA modülünü kaldırmak için gösterir.

Liste 9: Bir çekirdek modülünü kaldırma

# rmmod irda

# modprobe -r irda

Sonuç

Linux çekirdek modüllerini kullanmak büyük bir sihir değil. Öğrenilmesi gereken birkaç komutla mutfağın ustası sizsiniz.

teşekkür ederim

Yazar, makaleyi hazırlarken yardımlarından dolayı Axel Beckert'e (ETH Zürich) ve Saif du Plessis'e (Hothead Studio Cape Town) teşekkür eder.

Bağlantılar ve Referanslar

  • [1] Çekirdek modülü, Arch Linux wiki, https://wiki.Archlinux.kuruluş/dizin.php/Kernel_module
  • [2] Çekirdek Yapılandırması, https://tldp.kuruluş/NASIL/SCSI-2.4-NASIL/kconfig.html
  • [3] kmod, https://git.çekirdek.org/pub/scm/utils/kernel/kmod/kmod.git
  • [4] Çekirdek modülü imzalama tesisi, https://www.çekirdek.kuruluş/doc/html/v4.15/yönetici kılavuzu/modül imzalama.html
  • [5] mod ağacı, https://github.com/falconindy/modtree
How to Change Mouse and Touchpad Settings Using Xinput in Linux
Most Linux distributions ship with “libinput” library by default to handle input events on a system. It can process input events on both Wayland and X...
Remap your mouse buttons differently for different software with X-Mouse Button Control
Maybe you need a tool that could make your mouse's control change with every application that you use. If this is the case, you can try out an applica...
Microsoft Sculpt Touch Wireless Mouse Review
I recently read about the Microsoft Sculpt Touch wireless mouse and decided to buy it. After using it for a while, I decided to share my experience wi...