生活随笔
收集整理的這篇文章主要介紹了
Linux下的第一个驱动程序
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
makefile文件:
[cpp]?view plaincopy
KERN_DIR?=?/home/youshan/linux-2.6.32.2?? ?? all:?? ????????make?-C?$(KERN_DIR)?M=`pwd`?modules??? ?? clean:?? ????????make?-C?$(KERN_DIR)?M=`pwd`?modules?clean?? ????????rm?-rf?modules.order?? ?? obj-m???+=?first_drv.o??
驅動程序:
[cpp]?view plaincopy
? ? ? ? ? ? ? ? ? ? ?? #include?<linux/module.h>?? #include?<linux/types.h>?? #include?<linux/fs.h>?? #include?<linux/errno.h>?? #include?<linux/mm.h>?? #include?<linux/sched.h>?? #include?<linux/init.h>?? #include?<linux/cdev.h>?? #include?<asm/io.h>?? #include?<asm/system.h>?? #include?<asm/uaccess.h>?? #include?<linux/device.h>???????/*?device_create()?*/?? ?? static?struct?class?*firstdrv_class;?? static?struct?class_device?*firstdrv_class_dev;?? static?int?major;?? ?? static?int?first_drv_open(struct?inode?*inode,?struct?file?*file)?? {?? ????printk("First_drv_open\n");?? ????return?0;?? }?? ?? static?ssize_t?first_drv_read(struct?file?*file,?const?char?__user?*buf,?size_t?count,?loff_t?*?ppos)?? {?? ????printk("First_drv_read\n");?? ????return?0;?? }?? ?? static?ssize_t?first_drv_write(struct?file?*file,?const?char?__user?*buf,?size_t?count,?loff_t?*?ppos)?? {?? ????printk("First_drv_write\n");?? ????return?0;?? }?? ?? static?int?first_drv_release(struct?inode?*inode,?struct?file?*file)?? {?? ????printk("First_drv_release\n");?? ????return?0;?? }?? ?? static?struct?file_operations?first_drv_fops?=?{?? ????.owner?=?THIS_MODULE,?? ????.open?=?first_drv_open,?? ????.read?=?first_drv_read,?? ????.write?=?first_drv_write,?? ????.release?=?first_drv_release,?? };?? ?? static?int?__init?first_drv_init(void)?? {?? ?????? ????major?=?register_chrdev(0,?"first_drv_proc",?&first_drv_fops);???? ?????? ?????? ????firstdrv_class?=?class_create(THIS_MODULE,?"first_drv_sys");?????? ????if?(IS_ERR(firstdrv_class))?? ????????return?PTR_ERR(firstdrv_class);?? ?? ?????? ????firstdrv_class_dev?=?device_create(firstdrv_class,?NULL,?MKDEV(major,?0),?NULL,?"first_drv_dev");????? ????if?(unlikely(IS_ERR(firstdrv_class_dev)))?? ????????return?PTR_ERR(firstdrv_class_dev);?? ?? ????return?0;?? }?? ?? static?void?__exit?first_drv_exit(void)?? {?? ????unregister_chrdev(major,?"first_drv_proc");?? ????device_unregister(firstdrv_class_dev);?? ????class_destroy(firstdrv_class);?? }?? ?? module_init(first_drv_init);?? module_exit(first_drv_exit);?? ?? MODULE_AUTHOR("WHUT-ShiGuang");?? MODULE_DESCRIPTION("Mini2440?Test?Driver");?? MODULE_VERSION("1.0");?? MODULE_LICENSE("GPL");??
測試程序:
[cpp]?view plaincopy
? ? ? ? ? ? ? ? ? ? ?? #include<stdio.h>?? #include<stdlib.h>?? #include<fcntl.h>?? #include<sys/types.h>?? #include<sys/stat.h>?? ?? int?main()?? {?? ????int?fd;?? ????int?val?=?1;?? ????fd?=?open("/dev/first_drv_dev",?O_RDWR);?? ????printf("fd?=?%d\n",?fd);?? ????write(fd,?&val,?4);?? ????read(fd,?&val,?4);?? ????close(fd);?? ????return?0;?? }??
測試結果:
[root@FriendlyARM /home]#?
[root@FriendlyARM /home]# ls /dev/first_drv_dev -l
crw-rw---- ? ?1 root ? ? root ? ? 253, ? 0 Jan ?1 08:31 /dev/first_drv_dev
[root@FriendlyARM /home]#?
[root@FriendlyARM /home]# cat /proc/devices | grep first_drv ? ?
253 first_drv_proc
[root@FriendlyARM /home]#?
[root@FriendlyARM /home]# ls /sys/class/first_drv_sys/
first_drv_dev
[root@FriendlyARM /home]#?
[root@FriendlyARM /home]#?
[root@FriendlyARM /home]# ./app?
First_drv_open
fd = 3
First_drv_write
First_drv_read
First_drv_release
[root@FriendlyARM /home]#?
[root@FriendlyARM /home]#?
?OVER! THANK YOU !
總結
以上是生活随笔為你收集整理的Linux下的第一个驱动程序的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。