歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux教程

Linux模塊編程

在達到能直接修改linux內核的程度之前,我們寫的代碼都需要以模塊的方式添加到內核中去運行。本節就介紹最簡單的模塊編寫和加載方法。

1、首先創建一個目錄modules,以存放以後編寫的模塊。再在其下創建一個子目錄hello,最為本節創建模塊的位置。

2、編寫源文件hello.c,代碼如下。

  1. #include <linux/init.h>   
  2. #include <linux/module.h>   
  3.   
  4. MODULE_LICENSE("Dual BSD/GPL");  
  5.   
  6. static int hello_init(void)  
  7. {  
  8.     printk(KERN_INFO "Hello, world!\n");  
  9.     return 0;  
  10. }  
  11.   
  12. static void hello_exit()  
  13. {  
  14.     printk(KERN_INFO "Hello, exit!\n");  
  15. }  
  16.   
  17. module_init(hello_init);  
  18. module_exit(hello_exit);  

3、編寫Makefile文件,如下。

  1. KERNEL_DIR := /lib/modules/$(shell uname -r)/build  
  2. PWD := $(shell pwd)  
  3.   
  4. module-objs := hello.o  
  5.   
  6. obj-m := module.o  
  7.   
  8. default:  
  9.     $(MAKE) -C $(KERNEL_DIR) M=$(PWD) modules 

這裡先把hello.c編譯為hello.o,再把hello.o合並到module.o,最後生成可加載模塊module.ko。其實也可以不通過module.o,直接用hello.o生成可加載模塊。只是linux習慣的做法是先把所有的目標文件合並到一個目標文件,再進行其它操作。 

4、編譯並加載模塊。

  1.      $make   

編譯生成module.ko

  1.      $sudo insmod module.ko  

將module.ko加入內核模塊

  1.       $lsmod  

查看已加載的模塊列表,包括module模塊

  1.       $sudo rmmod module  

      卸載module模塊

  1.       $dmesg | less  
打印最近的5條記錄,會看到在hello_init和hello_exit中打印的信息。  

現在我們已經完全了解了模塊編譯加載的流程,相當於打開了進入內核的大門。以後會接觸到越來越多的內核API,我們能做的事也會越來越多。

Copyright © Linux教程網 All Rights Reserved