驱动程序编写基本流程:
  1.首先是一些版本信息,没什么用,但是不能少
  #define __NO_VERSION__
  #include <linux/modules.h>
  #include <linux/version.h>
  char kernel_version[] = UTS_RELEASE;
  2.为了把系统调用和驱动程序关联起来,需要一个非常关键的数据结构:struct file_operations。file_operations结构的每一个成员的名字都对应着一个系统调用。用户进程利用系统调用在对设备文件进行诸如read/write操作时,系统调用通过设备文件的主设备号找到相应的设备驱动程序,然后读取这个数据结构相应的函数指针,接着把控制权交给该函数。这是linux的设备驱动程序工作的基本原理。编写设备驱动程序的主要工作就是编写子函数,并填充file_operations的各个域
  3.简单驱动程序的编写(test.c):
  a.包含一些基本的头文件。
  b.编写一些功能函数,比如read(),write()等。这些函数被调用时系统进入核心态。
  c.定义struct file_operations结构的对象,填充结构体。结构体中功能的顺序不能改变,若一些功能没有实现就用NULL填充,已经实现的功能如read()、write()分别添加到对应的位置。这步实现的是函数的注册。到这里驱动程序的主体可以说是写好了。现在需要把驱动程序嵌入内核。
  d.注册设备驱动程序,使用register_chrdev注册字符型设备。函数原型为:
  int register_chrdev(0, "test_name", &test_file_operations)
  函数返回主设备号,若注册成功返回值大于0。
  第一个参数:主设备号。第二个参数:注册的设备名。第三个参数:结构体名(设备相关操作方式,驱动程序实际执行操作的函数的指针)。
  这个函数由int init_module(void)函数调用,这个函数在系统启动时注册到内核时调用。
  e.在用rmmod卸载模块时,cleanup_module函数被调用,它释放字符设备test在系统字符设备表中占有的表项。
  void cleanup_module(void)
  {
  unregister_chrdev(test_major, "test");
  }
  到这里test.c基本就编写完成了。一个简单的字符设备可以说写好了。
  4.编译
  $ gcc -O2 -DMODULE -D__KERNEL__ -c test.o test.c
  得到文件test.o就是一个设备驱动程序。
  如果设备驱动程序有多个文件,把每个文件按上面的命令行编译,然后
  ld -r file1.o file2.o -o modulename
  驱动程序已经编译好了,现在把它安装到系统中去。
  $ insmod -f test.o
  安装成功在/proc/devices文件中就可以看到设备test,并可以看到主设备号。要卸载运行:
  $ rmmod test
  5.创建设备节点
  mkmod /dev/test c major minor
  c是指字符设备,major是主设备号,minor是从设备号,一般可以设置为0
  以上就是linux驱动编写的基本过程了

驱动程序编写基本流程相关推荐

  1. Linux驱动程序编写

    工作需要写了我们公司一块网卡的Linux驱动程序.经历一个从无到有的过程,深感技术交流的重要.Linux作为挑战微 软垄断的强有力武器,日益受到大家的喜爱.真希望她能在中国迅速成长.把程序文档贴出来, ...

  2. Linux网卡驱动程序编写

    Linux网卡驱动程序编写 [摘自 LinuxAID] 工作需要写了我们公司一块网卡的Linux驱动程序.经历一个从无到有的过程,深感技术交流的重要.Linux作为挑战微软垄断的强有力武器,日益受到大 ...

  3. linux驱动程序是什么,简述一个Linux驱动程序的主要流程与功能

    1. 简述一个Linux驱动程序的主要流程与功能. 2. 请列举一个软件中时间换空间或者空间换时间的例子. void swap(int a,int b) { int c; c=a;a=b;b=a; } ...

  4. windows驱动程序编写_如何在Windows中回滚驱动程序

    windows驱动程序编写 Updating a driver on your PC doesn't always work out well. Sometimes, they introduce b ...

  5. Linux操作系统网络驱动程序编写

    2019独角兽企业重金招聘Python工程师标准>>> Linux操作系统网络驱动程序编写 一.Linux系统设备驱动程序概述     1.1 Linux设备驱动程序分类     1 ...

  6. linux 3.6 内核驱动程序编写

    手头有本<操作系统 原理技术与编程>(蒋静,徐志伟著),做里面的驱动程序编写的例子,原书基于kernel 2.4,和现在相去甚远,所以又参考了<Linux设备驱动程序>(Jon ...

  7. Linux 平台下PCI 接口视频采集卡的驱动程序编写技术

    转自http://publishblog.blogchina.com/blog/tb.b?diaryID=2424186 Linux 平台下PCI 接口视频采集卡的驱动程序编写技术 李根深 邢汉承 0 ...

  8. STM32程序编写总流程及技巧

    STM32程序编写总流程及技巧 1 打开固件库工程模板(以点亮LED为例) 2 在固件库模板 User里新建LED文件夹及led.c和led.h 3 双击添加led.c文件到工程 4 main.c文件 ...

  9. linux的驱动开发——简单驱动程序编写

    1.字符设备驱动介绍 \qquad字符设备驱动是linux驱动中,最基本的一类设备驱动,字符设备就是按照一个字节一个字节的方式进行读写操作的设备.读写数据分先后顺序,我们常见的单片机外设,比如led灯 ...

最新文章

  1. mfc 两个工具栏合并_(海外观点)MFC,微型电商仓的新玩法?
  2. tortosiegit github
  3. vue click事件_Vue.js---实现前后端分离架构中前端页面搭建(二)
  4. 电子邮件乱码的解决方法
  5. Kerberos打开debug日志
  6. shader变体是什么_[Unity/shaderlab]关于着色器变体
  7. centos7安装最新稳定版nginx
  8. 2021.04.02学习记录列表
  9. matlab可以做什么,matlab仿真用来干什么
  10. python列表替换_Python 列表元素替换
  11. 百度地图API学习 - 点击地图显示为中心点
  12. 集合--1.集合的概念和结构
  13. Kotlin版本的新闻类APP 简闻
  14. 《面试集:自用》《待完善... ...》
  15. 接口测试实战项目02:根据接口文档测试
  16. 业务痛点、个人成长以及未来发展的一些思考
  17. 实习日记(5-18)Socket与MQTT
  18. 《计算机视觉和图像处理简介 - 中英双语 + 代码实践版》:使用动量优化 Momentum 的随机梯度下降训练神经网络
  19. seo编辑内容优化的苦恼:文章该多长才最适合
  20. 2023北京大学计算机考研信息汇总

热门文章

  1. kernel dump 分析
  2. Android 打开PDF,PPT等类型的文件方式
  3. 人们要怎样才能成为超级英雄?
  4. RMI部署详细过程for jdk6.0
  5. 垂直战略拿下电影之后,微博还会拿下哪些行业?
  6. CPU发现高危安全漏洞 修复要损失多达39%性能
  7. 宝宝专业智力测试软件,0-3岁6个月婴幼儿智能综合格塞尔Gesell智力测试工具包及软件...
  8. PT100铂电阻温度传感器
  9. BIM今年那么火,到底学不学(深度解析)
  10. C++ STL模板库用法查询及一些常见面试题(自用)