歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Tiny6410 簡單的設備驅動helloworld_driver

Tiny6410 簡單的設備驅動helloworld_driver

日期:2017/3/1 10:26:41   编辑:Linux編程

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

  1. #include <linux/init.h>
  2. #include <linux/module.h>
  3. //代碼遵守的license:BSD GPL
  4. MODULE_LICENSE("Dual BSD/GPL");
  5. //代碼作者聲明
  6. MODULE_AUTHOR("yf210yf");
  7. //模塊初始化
  8. static int __init hello_init(void)
  9. {
  10. printk(KERN_ALERT "Hello world!\n");
  11. return 0;
  12. }
  13. //模塊退出
  14. static void __exit hello_exit(void)
  15. {
  16. printk(KERN_ALERT "Goodbye world!\n");
  17. }
  18. module_init(hello_init);
  19. 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. PWD :=$(shell pwd)
  3. modules:
  4. $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
  5. modules_install:
  6. $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
  7. obj-m:=helloworld_driver.o
  8. clean:
  9. 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