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


成功!

这是最简单的设备驱动示例!

  • 1
  • 2
  • 下一页

相关内容