কার্নেল মডিউলটি কোনও ডিভাইস ড্রাইভার নাও হতে পারে।
"কার্নেল ড্রাইভার" একটি ভাল সংজ্ঞায়িত শব্দ নয়, তবে আসুন এটির শট দিন।
এটি একটি কার্নেল মডিউল যা কোনও হার্ডওয়্যার চালায় না এবং সুতরাং এটি "ডিভাইস ড্রাইভার" হিসাবে যুক্তিসঙ্গত বিবেচনা করা যায় না:
#include <linux/module.h>
#include <linux/kernel.h>
MODULE_LICENSE("GPL");
static int myinit(void)
{
printk(KERN_INFO "hello init\n");
return 0;
}
static void myexit(void)
{
printk(KERN_INFO "hello exit\n");
}
module_init(myinit)
module_exit(myexit)
নির্মাণের পরে, আপনি এটি ব্যবহার করতে পারেন:
insmod hello.ko
এবং এটি ছাপে hello initকরতে dmesg।
তবে, কার্নেল মডিউলগুলি ডিভাইস ড্রাইভার নয়, তবে প্রকৃতপক্ষে দরকারী, উদাহরণস্বরূপ, মডিউলগুলি যা কার্নেল ডিবাগিং / পারফরম্যান্সের তথ্য প্রকাশ করে।
ডিভাইস ড্রাইভাররা সাধারণত কার্নেল মডিউলও থাকে।
"ডিভাইস ড্রাইভার" এমন কোনও জিনিসের উদাহরণ উত্পন্ন করা কিছুটা শক্ত, কারণ এটি চালনার জন্য একটি হার্ডওয়্যার প্রয়োজন হয় এবং হার্ডওয়্যার বর্ণনা জটিল হতে থাকে।
কিউইএমইউ বা অন্যান্য এমুলেটর ব্যবহার করে তবে আমরা আসল বা সরলীকৃত হার্ডওয়্যারগুলির সফ্টওয়্যার মডেল তৈরি করতে পারি, যা হার্ডওয়ারের সাথে কীভাবে কথা বলতে হয় তা শেখার একটি দুর্দান্ত উপায়। এখানে ন্যূনতম পিসিআই ডিভাইস ড্রাইভারের একটি সাধারণ উদাহরণ: https://github.com/cirosantilli/linux-kernel-module-cheat/blob/6788a577c394a2fc512d8f3df0806d84dc09f355/kernel_module/hello.c
তারপরে আমরা দেখতে পাই যে x86 এ, হার্ডওয়্যারের সাথে কথা বলার সময় নেমে আসে:
এই অপারেশনগুলি সাধারণভাবে ব্যবহারকারীল্যান্ড থেকে করা যায় না, যেমন এখানে ব্যাখ্যা করা হয়েছে: ব্যবহারকারীর স্থান এবং কার্নেল স্পেসের মধ্যে পার্থক্য কী? তবে কিছু ব্যাতিক্রম রয়েছে: https://stackoverflow.com/questions/7986260/linux-interrupt-handling-in-user-space ।
কার্নেল এর পরে এ জাতীয় হার্ডওয়্যার মিথস্ক্রিয়াটিকে আরও সহজ এবং আরও বহনযোগ্য করতে উচ্চ স্তরের এপিআই সরবরাহ করে:
request_irq বাধা হ্যান্ডেল করতে
ioreadX এবং আইও মেমরি ম্যাপিং
- এমনকি পিসিআই এবং ইউএসবি এর মতো জনপ্রিয় প্রোটোকলের জন্য উচ্চ স্তরের ইন্টারফেস