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

Tiny6410 簡單的設備驅動helloworld_driver

在自己的工作目錄下建立helloworld_driver.c

  1. #include <linux/init.h>   
  2. #include <linux/module.h>   
  3.   
  4. //代碼遵守的license:BSD GPL   
  5. MODULE_LICENSE("Dual BSD/GPL");  
  6.   
  7. //代碼作者聲明   
  8. MODULE_AUTHOR("yf210yf");  
  9.   
  10. //模塊初始化   
  11. static int __init hello_init(void)  
  12. {  
  13.     printk(KERN_ALERT "Hello world!\n");  
  14.     return 0;  
  15. }  
  16. //模塊退出   
  17. static void  __exit hello_exit(void)  
  18. {  
  19.     printk(KERN_ALERT "Goodbye world!\n");  
  20. }  
  21.   
  22. module_init(hello_init);  
  23. module_exit(hello_exit);  

補充下:

1. printk輸出跟輸出的日志級別有關系,當輸出日志級別比控制台的級別高時,就會顯示在控制台上,當比控制台低時,則會記錄在/var/log/message中。

2. printk()並不是設計用來同用戶交互的,雖然我們在 hello-1就是出於這樣的目的使用它!它實際上是為內核提供日志功能, 記錄內核信息或用來給出警告。因此,每

  個printk() 聲明都會帶一個優先級,就像你看到的<1>KERN_ALERT 那樣。內核總共定義了八個優先級的宏, 所以你不必使用晦澀的數字代碼,並且你可以從文

  件linux/kernel.h查看這些宏和它們的意義。如果你 不指明優先級,默認的優先級DEFAULT_MESSAGE_LOGLEVEL將被采用。

#define KERN_EMERG     "<0>"
#define KERN_ALERT    "<1>"
#define KERN_CRIT      "<2>"
#define KERN_ERR       "<3>"
#define KERN_WARNING   "<4>"
#define KERN_NOTICE    "<5>"
#define KERN_INFO      "<6>"
#define KERN_DEBUG     "<7>"



在同目錄下建立Makefile
  1. KERNELDIR :=/home/workdir/kernel/linux-2.6.38  
  2.   
  3. PWD :=$(shell pwd)  
  4.   
  5. modules:  
  6.     $(MAKE) -C $(KERNELDIR) M=$(PWD) modules  
  7.   
  8. modules_install:  
  9.     $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install      
  10.   
  11. obj-m:=helloworld_driver.o  
  12.   
  13. clean:  
  14.     rm -rf *.o *~core .depend .*.cmd *.ko *.mod.c .tmp_versions *.order *.symvers  

執行make modules生成helloworld_driver.ko文件。


將helloworld_driver.ko下載到開發板文件系統中,執行insmod helloworld_driver.ko加載驅動模塊,串口將打印如下信息:


成功!

卸載helloworld_driver.ko


成功!

這是最簡單的設備驅動示例!

Copyright © Linux教程網 All Rights Reserved