Modul kernel mungkin bukan driver perangkat sama sekali.
"Driver kernel" bukan istilah yang didefinisikan dengan baik, tetapi mari kita coba.
Ini adalah modul kernel yang tidak menggerakkan perangkat keras apa pun, dan dengan demikian tidak dapat dianggap sebagai "driver perangkat":
#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)
Setelah membangun, Anda dapat menggunakannya dengan:
insmod hello.ko
dan itu mencetak hello init
ke dmesg
.
Namun, ada modul kernel yang bukan driver perangkat, tetapi sebenarnya berguna, misalnya modul yang mengekspos informasi kinerja / debugging kernel.
Driver perangkat biasanya juga merupakan modul kernel.
Contoh dari sesuatu yang merupakan "driver perangkat" sedikit lebih sulit untuk dihasilkan, karena memerlukan perangkat keras untuk dikendarai, dan deskripsi perangkat keras cenderung rumit.
Namun, dengan menggunakan QEMU atau emulator lain, kita dapat membuat model perangkat lunak dari perangkat keras yang nyata atau yang disederhanakan, yang merupakan cara yang bagus untuk mempelajari cara berbicara dengan perangkat keras. Berikut adalah contoh sederhana dari pengandar perangkat PCI minimal: https://github.com/cirosantilli/linux-kernel-module-cheat/blob/6788a577c394a2fc512d8f3df0806d84dc09f355/kernel_module/hello.c
Kita kemudian melihat bahwa di x86, berbicara dengan perangkat keras turun ke:
Operasi-operasi itu secara umum tidak dapat dilakukan dari userland, seperti yang dijelaskan di: Apa perbedaan antara ruang pengguna dan ruang kernel? Namun ada beberapa pengecualian: https://stackoverflow.com/questions/7986260/linux-interrupt-handling-in-user-space .
Kernel kemudian menawarkan API tingkat lebih tinggi untuk membuat interaksi perangkat keras seperti itu lebih mudah dan lebih portabel:
request_irq
untuk menangani interupsi
ioreadX
dan pemetaan memori IO
- antarmuka tingkat lebih tinggi untuk protokol populer seperti PCI dan USB