Linux设备驱动学习笔记
之前研究Linux设备驱动时做的零零散散的笔记,整理出来,方便以后复习。
1.1驱动程序的的角色
提供机制
例如:unix图形界面分为X服务器和窗口会话管理器
X服务器理解硬件及提供统一的接口给用户程序
窗口管理器实现了特别的策略但对硬件一无所知
目标:实现对策略透明
1.2划分内核
进程管理
负责创建和销毁进程,并处理它们与外部的联系(输入和输出)。
实现了多个进程在一个单个或几个CPU之上的抽象。
内存管理
为每一个进程在有限的可用资源上建立了虚拟地址空间。
文件系统
在非结构化的硬件之上建立了一个结构化的文件系统。
设备控制
全部设备的控制操作都由特定的寻址设备相关的代码来进行。
网络
系统负责在程序和网络接口之间递送数据报文。
1.2.1可加载模块
Linux特性:可以在运行时扩展由内核提供的特性,可以在系统正
运行的时候增加内核的功能(也可以去除)。
每块可以在运行时添加到内核的代码被称为一个模块。
通过insmod和rmmod程序去连接。
1.3设备和模块的分类
字符设备
字符(char)设备是一种可以当作字节流来存取的设备。
这样的驱动常常实现open,close,read,write系统调用。
例如:文本控制台(/dev/console),串口(/dev/ttyS0)
块设备
通过位于/dev目录的文件系统节点来存取,可以驻有文件系统。
与字符设备的区别在于内部管理数据的方式上--块设备允许一次
传送任意数据的字节。
网络接口
负责发送和接收数据报文
1.4安全问题
小心对待输入,未初始化的内存等
从内核获取的任何内存应当清零或者在其可用之前进行初始化。
1.5版本编号
Linux系统中使用的每一个软件包存有自己的发行版本号
它们之间存在相互依赖性。
1.6版权条款
3-字符驱动
scull
Simple Character Utility for Loading Localities
设备编号
[oxy@centos ~]$ ll /dev
total 0 主编号,次编号
drwxr-xr-x. 2 root root 640 May 12 22:24 block
crw-------. 1 root root 10, 234 May 12 22:24 btrfs-control
drwxr-xr-x. 3 root root 60 May 12 22:24 bus
lrwxrwxrwx. 1 root root 3 May 12 22:24 cdrom -> sr0
drwxr-xr-x. 3 root root 80 May 12 22:24 cpu
crw-rw----. 1 root root 10, 62 May 12 22:24 crash
drwxr-xr-x. 6 root root 120 May 12 22:24 disk
brw-rw----. 1 root disk 253, 0 May 12 22:24 dm-0
drwxr-xr-x. 2 root root 60 May 12 22:24 dri
lrwxrwxrwx. 1 root root 3 May 12 22:24 fb -> fb0
crw-rw----. 1 root root 29, 0 May 12 22:24 fb0
crw-rw-rw-. 1 root root 1, 7 May 12 22:24 full
主编号标识设备相连的驱动
次编号被内核用来决定引用哪个设备
Linux设备驱动学习笔记的更多相关文章
- linux设备驱动学习笔记(1)
学习了将近半个月的设备驱动程序的编写,也有一些体会,这里写下来也给学习做一个总结,为后面的学习做更好的准备. 首先,个人感觉驱动程序的设计是很有套路的,最基本的要求就是要掌握这些套路.所谓的套路就是一 ...
- linux设备驱动学习笔记--内核调试方法之printk
1,printk类似于用户态的printf函数,但是比printf函数多了一个日志级别,内核中最常见的日志输出都是通过调用printk来实现的,其打印级别有8种可能的记录字串, 在头文件 <Li ...
- linux字符设备驱动学习笔记(一):简单的字符设备驱动
最近在鼓捣lnux字符设备驱动,在网上搜集的各种关于linux设备驱动的代码和注释,要么是针对2.4的,要么是错误百出,根本就不能运行成功,真希望大家在发博客的时候能认真核对下代码的正确性,特别是要把 ...
- 精通linux设备驱动开发 笔记
3.2.7 错误处理 #include <linux/err.h> char * collect_data(char *userbuffer) { char *buffer; /* ...
- linux设备驱动概述,王明学learn
linux设备驱动学习-1 本章节主要学习有操作系统的设备驱动和无操作系统设备驱动的区别,以及对操作系统和设备驱动关系的认识. 一.设备驱动的作用 对设备驱动最通俗的解释就是“驱使硬件设备行动” .设 ...
- Linux设备驱动程序学习----目录
目录 设备驱动程序简介 1.设备驱动程序简介 构造和运行模块 2.内核模块和应用程序的对比 3.模块编译和装载 4.模块的内核符号表 5.模块初始化和关闭 6.模块参数 7.用户空间编写驱动程序 ...
- linux 驱动学习笔记01--Linux 内核的编译
由于用的学习材料是<linux设备驱动开发详解(第二版)>,所以linux驱动学习笔记大部分文字描述来自于这本书,学习笔记系列用于自己学习理解的一种查阅和复习方式. #make confi ...
- (笔记)linux设备驱动--LED驱动
linux设备驱动--LED驱动 最近正在学习设备驱动开发,因此打算写一个系列博客,即是对自己学习的一个总结,也是对自己的一个督促,有不对,不足,需要改正的地方还望大家指出,而且希望结识志同道合的朋友 ...
- Hasen的linux设备驱动开发学习之旅--时钟
/** * Author:hasen * 參考 :<linux设备驱动开发具体解释> * 简单介绍:android小菜鸟的linux * 设备驱动开发学习之旅 * 主题:时钟 * Date ...
随机推荐
- jvm学习笔记:一、类的加载、连接、初始化
在JAVA代码中,类型的加载.连接与初始化过程都是程序运行期间完成的. 类型的加载:将已经存在的class从硬盘加载到内存. 类型的连接:将类与类之间的关系确定好. 类型的初始化:类型 静态的变量进行 ...
- (public丶private丶protected) 的理解
public(公有):公有的类成员可以在任何地方被访问. protected(受保护):受保护的类成员则可以被其自身以及其子类和父类访问. private(私有):私有的类成员则只能被其定义所在的类访 ...
- C++运算符重载总结(真的很详细了w(゚Д゚)w)
C++运算符重载总结(真的很详细了w(゚Д゚)w) 概述 运算符重载可以使得一些特殊类型参与运算,我是这样理解的. 使用友元形式的运算符重载 //一般形式 class x{ friend 返回类型 o ...
- zabbix-3.4.6安装
先安装myql和phpmysql5.7.17: http://www.cnblogs.com/cjsblogs/p/8116782.htmlphp7.2.1: http://www.cnblogs.c ...
- C++ 对象构造顺序、构析函数、临时对象。
对象的构造顺序: 1.对于局部对象,构造顺序是根据程序执行流进行构造,从上到下. #include <stdio.h> class Test { int mi; public: Test( ...
- php运行结果设置无缓存
修改配置php.ini vim /usr/local/php/lib/php.ini opcache.enable= 重启php服务 service php-fpm restart done! 参考地 ...
- python如何判断字符串是否以某个字母或者数字结尾
1.如果是对某个确定的字符或者数字进行判断,可以直接使用endswith()方法 # 判断str_a是否以‘A’结尾 str_a = '20190813A' print(str_a.endswith( ...
- 腾讯地图JSAPI开发demo 定位,查询
1.IP定位切换 2.点击坐标获取地点 3.查询地点切换坐标 <!DOCTYPE html> <html> <head> <meta http-equiv=& ...
- jquery重复绑定
jquery可以重复绑定一个事件handler,如果一个button绑定了3次onclick,那么点一下按钮就触发三次事件处理程序的调用. 所以如果想动态地变更控件绑定的处理程序,只要unbind() ...
- Linux和Windows双系统下Windows系统插入耳机没有声音
我的笔记本装了Windows7和Debian双系统后,在Windows7下,插入耳机竟然没有声音. 按常规思路分析:首先考虑是耳机问题还是笔记本电脑问题.确定耳机没问题后问题就在笔记本身上了.而问题在 ...