2 पॉइंट द्वारा GN⁺ 2024-07-28 | 1 टिप्पणियां | WhatsApp पर शेयर करें

परिचय

लेखक

  • Linux Kernel Module Programming Guide को सबसे पहले Ori Pomerantz ने Linux v2.2 के लिए लिखा था
  • Peter Jay Salzman ने इसे Linux v2.4 के लिए अपडेट किया
  • Michael Burian ने Linux v2.6 के लिए सह-मेंटेनेंस किया
  • Bob Mottram ने Linux v3.8 के बाद के वर्ज़नों के उदाहरण अपडेट किए
  • Jim Huang ने इसे हाल के Linux वर्ज़नों (v5.0 और बाद के) के लिए अपडेट किया और LaTeX दस्तावेज़ को संशोधित किया

आभार

  • कई योगदानकर्ताओं ने सुधार और सुझाव दिए

kernel module क्या है?

  • Linux kernel module ऐसा code segment है जिसे आवश्यकता के अनुसार kernel में dynamically load और unload किया जा सकता है
  • kernel module सिस्टम को reboot किए बिना kernel functionality को विस्तार देता है
  • module न होने पर हर नई functionality जोड़ने के लिए kernel को फिर से build करना और सिस्टम को reboot करना पड़ता है

kernel module package

  • Ubuntu/Debian: sudo apt-get install build-essential kmod
  • Arch Linux: sudo pacman -S gcc kmod

मेरे kernel में कौन-कौन से module हैं?

  • lsmod कमांड से वर्तमान kernel में loaded modules देखे जा सकते हैं
  • /proc/modules फ़ाइल में भी इन्हें देखा जा सकता है

क्या kernel डाउनलोड और compile करना ज़रूरी है?

  • इस guide का पालन करने के लिए kernel को डाउनलोड और compile करना आवश्यक नहीं है
  • test distribution पर examples चलाना सुरक्षित है

शुरू करने से पहले

  • module versioning, X Window System के उपयोग, SecureBoot आदि से जुड़ी सावधानियाँ

Header

  • kernel header files इंस्टॉल होना आवश्यक है
  • Ubuntu/Debian: sudo apt-get install kmod linux-headers-$(uname -r)
  • Arch Linux: sudo pacman -S linux-headers
  • Fedora: sudo dnf install kernel-devel kernel-headers

उदाहरण

  • सभी उदाहरण दस्तावेज़ की examples subdirectory में हैं

Hello World

सबसे सरल module

  • hello-1.c फ़ाइल बनाना और compile करना
  • module को load और unload करने का तरीका समझाया गया है

Hello और Goodbye

  • module_init और module_exit macro के उपयोग का उदाहरण

__init और __exit macro

  • __init macro initialization function पूरा होने के बाद memory मुक्त कर देता है
  • __exit macro module के kernel में built-in होने पर function को छोड़ देता है

license और module documentation

  • MODULE_LICENSE macro का उपयोग करके module का license निर्दिष्ट किया जाता है
  • MODULE_AUTHOR, MODULE_DESCRIPTION macro के उपयोग के उदाहरण

command line arguments पास करना

  • module_param macro का उपयोग करके module को command line arguments दिए जाते हैं
  • MODULE_PARM_DESC macro का उपयोग करके arguments का विवरण जोड़ा जाता है

कई फ़ाइलों में फैला module

  • कई source files में विभाजित kernel module का उदाहरण

precompiled kernel के लिए module build करना

  • precompiled kernel के लिए module build करने की विधि समझाई गई है

GN⁺ का सारांश

  • यह guide Linux kernel module programming के लिए एक व्यापक मार्गदर्शिका है, जो विभिन्न उदाहरणों के साथ kernel module के मूल सिद्धांतों से लेकर उन्नत विषयों तक को कवर करती है
  • kernel module के माध्यम से सिस्टम को reboot किए बिना kernel functionality का विस्तार किया जा सकता है, जो developers के लिए बड़ा लाभ है
  • module versioning, SecureBoot आदि जैसी सावधानियों को अच्छी तरह समझना और उनका पालन करना चाहिए
  • संबंधित परियोजनाओं में Linux Device Drivers, The Linux Programming Interface आदि शामिल हैं

1 टिप्पणियां

 
GN⁺ 2024-07-28
Hacker News टिप्पणियाँ
  • यह राय है कि "Detecting button presses" उदाहरण कठिन है क्योंकि इसके लिए RPi मॉड्यूल build करना पड़ता है
    • qemu kernel hacking का अनुभव लेने का एक अच्छा तरीका है
  • यह राय है कि Linux Foundation को LDD(linux device driver) और Linux kernel किताबों के अपडेट को sponsor करना चाहिए
  • एक यूज़र ने साझा किया कि उन्होंने इसे पहली बार 22 साल पहले पढ़ा था
  • खबर है कि The Linux Memory Manager किताब का नवीनतम अपडेट जुलाई की शुरुआत में था और यह फिलहाल संपादन में है
  • Linux kernel programming पर सामान्य सवाल हैं, जैसे file system या memory management hacking के बारे में
    • Robert Love की "Linux Kernel Development" किताब थी, लेकिन शायद अब उसका अपडेट नहीं होता
  • kernel module को सीधे build करने वाले विस्तृत और hands-on tutorial की प्रशंसा की गई है
  • यह सवाल है कि क्या लेखक ने टेक्स्ट लिखने या सुधारने के लिए LLM का इस्तेमाल किया था