之前研究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设备驱动学习笔记的更多相关文章

  1. linux设备驱动学习笔记(1)

    学习了将近半个月的设备驱动程序的编写,也有一些体会,这里写下来也给学习做一个总结,为后面的学习做更好的准备. 首先,个人感觉驱动程序的设计是很有套路的,最基本的要求就是要掌握这些套路.所谓的套路就是一 ...

  2. linux设备驱动学习笔记--内核调试方法之printk

    1,printk类似于用户态的printf函数,但是比printf函数多了一个日志级别,内核中最常见的日志输出都是通过调用printk来实现的,其打印级别有8种可能的记录字串, 在头文件 <Li ...

  3. linux字符设备驱动学习笔记(一):简单的字符设备驱动

    最近在鼓捣lnux字符设备驱动,在网上搜集的各种关于linux设备驱动的代码和注释,要么是针对2.4的,要么是错误百出,根本就不能运行成功,真希望大家在发博客的时候能认真核对下代码的正确性,特别是要把 ...

  4. 精通linux设备驱动开发 笔记

      3.2.7 错误处理   #include <linux/err.h> char * collect_data(char *userbuffer) { char *buffer; /* ...

  5. linux设备驱动概述,王明学learn

    linux设备驱动学习-1 本章节主要学习有操作系统的设备驱动和无操作系统设备驱动的区别,以及对操作系统和设备驱动关系的认识. 一.设备驱动的作用 对设备驱动最通俗的解释就是“驱使硬件设备行动” .设 ...

  6. Linux设备驱动程序学习----目录

    目录 设备驱动程序简介 1.设备驱动程序简介 构造和运行模块 2.内核模块和应用程序的对比 3.模块编译和装载 4.模块的内核符号表  5.模块初始化和关闭  6.模块参数  7.用户空间编写驱动程序 ...

  7. linux 驱动学习笔记01--Linux 内核的编译

    由于用的学习材料是<linux设备驱动开发详解(第二版)>,所以linux驱动学习笔记大部分文字描述来自于这本书,学习笔记系列用于自己学习理解的一种查阅和复习方式. #make confi ...

  8. (笔记)linux设备驱动--LED驱动

    linux设备驱动--LED驱动 最近正在学习设备驱动开发,因此打算写一个系列博客,即是对自己学习的一个总结,也是对自己的一个督促,有不对,不足,需要改正的地方还望大家指出,而且希望结识志同道合的朋友 ...

  9. Hasen的linux设备驱动开发学习之旅--时钟

    /** * Author:hasen * 參考 :<linux设备驱动开发具体解释> * 简单介绍:android小菜鸟的linux * 设备驱动开发学习之旅 * 主题:时钟 * Date ...

随机推荐

  1. C++调用windowsAPI实现目录zip压缩

    TCHAR zipname[] = "C:\\bcel"; TCHAR zipfile [FILENAME_MAX]; sprintf(zipfile, "%s.zip& ...

  2. java 寻找水仙花数

    题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个"水仙花数",因为153=1 ...

  3. 【3.2】【mysql基本实验】mysql GTID复制(基于空数据的配置)

    概述:本质上和传统异步复制没什么区别,就是加了GTID参数. 且可以用传统的方式来配置主从,也可以用GTID的方式来自动配置主从. 这里使用GTID的方式来自动适配主从. 需要mysql5.6.5以上 ...

  4. MYSQL—第一部分(简介和windows版本的安装)

    一.概述 1.什么是数据库 ? 答:数据的仓库,如:在自己编写的程序中我们创建了一个 db 目录,称其为数据库 2.什么是 MySQL.Oracle.SQLite.Access.MS SQLServe ...

  5. Spring添加声明式事务

    一.前言 Spring提供了声明式事务处理机制,它基于AOP实现,无须编写任何事务管理代码,所有的工作全在配置文件中完成. 二.声明式事务的XML配置方式 为业务方法配置事务切面,需要用到tx和aop ...

  6. 经典网络流题目模板(P3376 + P2756 + P3381 : 最大流 + 二分图匹配 + 最小费用最大流)

    题目来源 P3376 [模板]网络最大流 P2756 飞行员配对方案问题 P3381 [模板]最小费用最大流 最大流 最大流问题是网络流的经典类型之一,用处广泛,个人认为网络流问题最具特点的操作就是建 ...

  7. CSS3鼠标悬停翻转按钮

    在线演示 本地下载

  8. win10子系统Ubuntu重置

    重置: 在win10命令行下执行: lxrun /uninstall /full 安装: win+R打开bash 执行命令: lxrun /install /y

  9. CALL apoc.cypher.doIt创建动态节点的时候怎么指定多个标签?

    下面的创建节点实例,请教一下CALL apoc.cypher.doIt如何创建多个标签?现在的方式是只能指定一个标签! UNWIND [{name:"sdasdsad234fdgsasdfa ...

  10. pc和手机适应js代码

    如果是手机的话跳转到新的地址 <script type="text/javascript"> function IsPC() { var userAgentInfo = ...