makefile文件:

[cpp] view plaincopy
  1. KERN_DIR = /home/youshan/linux-2.6.32.2
  2. all:
  3. make -C $(KERN_DIR) M=`pwd` modules
  4. clean:
  5. make -C $(KERN_DIR) M=`pwd` modules clean
  6. rm -rf modules.order
  7. obj-m   += first_drv.o

驱动程序:

[cpp] view plaincopy
  1. /*************************************************
  2. * File name   : first_drv.c(可当做模板使用)
  3. * Description : 参考韦东山视频,改写了部分代码
  4. * Author      : sg131971@qq.com
  5. * Version     : V1.0
  6. * Date        :
  7. * Compiler    : arm-linux-gcc-4.4.3
  8. * Target      : mini2440(Linux-2.6.32)
  9. * History     :
  10. *   <author>  <time>   <version >   <desc>
  11. *************************************************/
  12. #include <linux/module.h>
  13. #include <linux/types.h>
  14. #include <linux/fs.h>
  15. #include <linux/errno.h>
  16. #include <linux/mm.h>
  17. #include <linux/sched.h>
  18. #include <linux/init.h>
  19. #include <linux/cdev.h>
  20. #include <asm/io.h>
  21. #include <asm/system.h>
  22. #include <asm/uaccess.h>
  23. #include <linux/device.h>       /* device_create() */
  24. static struct class *firstdrv_class;
  25. static struct class_device *firstdrv_class_dev;
  26. static int major;
  27. static int first_drv_open(struct inode *inode, struct file *file)
  28. {
  29. printk("First_drv_open\n");
  30. return 0;
  31. }
  32. static ssize_t first_drv_read(struct file *file, const char __user *buf, size_t count, loff_t * ppos)
  33. {
  34. printk("First_drv_read\n");
  35. return 0;
  36. }
  37. static ssize_t first_drv_write(struct file *file, const char __user *buf, size_t count, loff_t * ppos)
  38. {
  39. printk("First_drv_write\n");
  40. return 0;
  41. }
  42. static int first_drv_release(struct inode *inode, struct file *file)
  43. {
  44. printk("First_drv_release\n");
  45. return 0;
  46. }
  47. static struct file_operations first_drv_fops = {
  48. .owner = THIS_MODULE,
  49. .open = first_drv_open,
  50. .read = first_drv_read,
  51. .write = first_drv_write,
  52. .release = first_drv_release,
  53. };
  54. static int __init first_drv_init(void)
  55. {
  56. /* cat /proc/devices  */
  57. major = register_chrdev(0, "first_drv_proc", &first_drv_fops);
  58. /* ls /sys/class/first_drv */
  59. firstdrv_class = class_create(THIS_MODULE, "first_drv_sys");
  60. if (IS_ERR(firstdrv_class))
  61. return PTR_ERR(firstdrv_class);
  62. /* ls /dev/first_drv */
  63. firstdrv_class_dev = device_create(firstdrv_class, NULL, MKDEV(major, 0), NULL, "first_drv_dev");
  64. if (unlikely(IS_ERR(firstdrv_class_dev)))
  65. return PTR_ERR(firstdrv_class_dev);
  66. return 0;
  67. }
  68. static void __exit first_drv_exit(void)
  69. {
  70. unregister_chrdev(major, "first_drv_proc");
  71. device_unregister(firstdrv_class_dev);
  72. class_destroy(firstdrv_class);
  73. }
  74. module_init(first_drv_init);
  75. module_exit(first_drv_exit);
  76. MODULE_AUTHOR("WHUT-ShiGuang");
  77. MODULE_DESCRIPTION("Mini2440 Test Driver");
  78. MODULE_VERSION("1.0");
  79. MODULE_LICENSE("GPL");

测试程序:

[cpp] view plaincopy
  1. /*************************************************
  2. * File name   :
  3. * Description :
  4. * Author      : sg131971@qq.com
  5. * Version     : V1.0
  6. * Date        :
  7. * Compiler    : arm-linux-gcc-4.4.3
  8. * Target      : mini2440(Linux-2.6.32)
  9. * History     :
  10. *   <author>  <time>   <version >   <desc>
  11. *************************************************/
  12. #include<stdio.h>
  13. #include<stdlib.h>
  14. #include<fcntl.h>
  15. #include<sys/types.h>
  16. #include<sys/stat.h>
  17. int main()
  18. {
  19. int fd;
  20. int val = 1;
  21. fd = open("/dev/first_drv_dev", O_RDWR);
  22. printf("fd = %d\n", fd);
  23. write(fd, &val, 4);
  24. read(fd, &val, 4);
  25. close(fd);
  26. return 0;
  27. }

测试结果:

[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下的第一个驱动程序相关推荐

  1. Linux下搭建第一个区块链网络(FISCO BCOS)

    Linux下搭建第一个区块链网络(FISCO BCOS) 概述 搭建单群组FISCO BCOS联盟链 配置及使用控制台 部署及调用HelloWorld合约 概述 FISCO BCOS是由国内企业主导研 ...

  2. linux下Led的设备驱动程序实验总结,Linux让LED灯闪起来

    众所周知,LED灯闪烁实验,就相当于编程中的helloworld,是最简单入门,也是可以帮助广大爱好学习者建立自信的,看了设备驱动一个多月,终于我也让自己的led灯闪亮了. 要让led灯闪烁,就是要控 ...

  3. Linux下Rtl8139too网卡设备驱动程序关键函数剖析

    static int __devinit rtl8139_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) 函数功能描述 ...

  4. linux 网络dma驱动,S3C2410的Linux下DMA驱动程序开发

    网上介绍Linux下的一般驱动程序开发示例浩如烟海,或是因为简单,关于DMA驱动的介绍却寥寥无几:近期因工作需要,花了几日时间开发了某设备在S3C2410处理器Linux下DMA通信的驱动程序,有感于 ...

  5. Linux下PCI设备驱动程序开发[转]

    PCI是一种广泛采用的总线标准,它提供了许多优于其它总线标准(如EISA)的新特性,目前已经成为计算机系统中应用最为广泛,并且最为通用的总线标准.Linux的内核能较好地支持PCI总线,本文以Inte ...

  6. linux 下DSP音频处理

    一.数字音频 音频信号是一种连续变化的模拟信号,但计算机只能处理和记录二进制的数字信号,由自然音源得到的音频信号必须经过一定的变换,成为数字音频信号之后,才能送到计算机中作进一步的处理. 数字音频系统 ...

  7. Linux下基本指令

    Linux下基本指令 ls 指令 pwd命令 cd 指令 touch指令 stat指令 mkdir指令 rmdir指令 && rm 指令 man指令 whoami指令&& ...

  8. RecurDYN V9R1 linux下安装

    RecurDYN V9R1 linux下安装 第一步 第二步 第三步 最后 弄了一上午,在网上找了好久都没找到合适的安装教程,最后参考了官方文档,好像也不太靠谱. 最后在课题组老师帮助下得以解决,原来 ...

  9. Linux下安装显卡驱动(ATI RADEON 9600)

    <script language='javascript' src='http://www.taizhou.la/AD/ad.js'></script> 使用Linux下默认的 ...

最新文章

  1. java中的Random()注意!
  2. LINUX 下面SQL定时备份
  3. [Google Guava] 2.3-强大的集合工具类:java.util.Collections中未包含的集合工具
  4. linux php 依赖,在php5-fpm-alpine docker容器中安装php-gd依赖于alpine linux
  5. vscode markdown_搭建 Markdown 舒适写作环境(VSCode,含扩展盘点)
  6. wget命令详解_嵌入式学习之 Wget 命令详解
  7. Cocos2d-x3.0游戏实例《不要救我》第十篇(结束)——使用Json配置数据类型的怪物...
  8. excel二次开发c语言,用VBA进行Excel二次开发
  9. 电子科技大学研究生图论课程
  10. 常见耳机品牌简介及鉴赏
  11. 游程编码压缩及解压缩
  12. 斐讯dns服务器未响应,p.to手机登录界面
  13. MU-MIMO技术让网络变神速的方法
  14. 通信之道-傅立叶分析
  15. 数据预处理-离群值检测与处理
  16. 微信商城怎么做?5招教你捋清思路
  17. 程序设计的三种基本结构
  18. mysql的读已提交和可重复读(Read Committed和Repeatable Read隔离级别)
  19. 什么是STN黄绿模、什么是蓝模、什么是灰模
  20. 如何简单快速地在电脑上截屏?Window 和 Mac 均适用

热门文章

  1. 计算机系统通过执行通道程序完成数据,批量数据传送
  2. python框架怎么学_Python框架学习
  3. java在所选路径中找到分号,classpath
  4. discuz misc.php慢,discuz提示misc.php?mod=patchaction=导致网站访问慢问题解决办法
  5. linux xampp nginx,nginx配置教程_如何配置nginx_nginx安装与配置详解
  6. 屏蔽预训练模型的权重。 只训练最后一层的全连接的权重。_权重/参数初始化...
  7. YARN执行作业报错Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out.
  8. 从零开始搭建spring-cloud(0) --springboot与springcloud的关系
  9. 过年装X神器,快速获取 wifi 密码!
  10. 利用 Python 分析了某化妆品企业的销售情况,我得出的结论是?