读书笔记(chapter17)

设备类型:在所有Unix系统中为了统一普通设备的操作所采用的分类

模块:Linux内核中用于按需加载和卸载目标码的机制

内核对象:内核数据结构中支持面对对象的简单操作,还支持维护对象之间的父子关系

 

17.1设备类型

  1.在Linux以及所有Unix系统中,设备被分为以下三种类型:

                            块设备;字符设备;网络设备;

    块设备通常缩写为blkdev,它是可寻址的,以块为单位,块大小随设备不同而不同;块设备支持重定位操作,也就是对数据的随机访问;例子有光盘、蓝光光碟等.

    字符设备通常缩写为cdev,它是不可寻址的,仅提供数据的流式访问,就是一个个字符;例子有键盘、鼠标、打印机,还有大部分伪设

    网络设备最常见的类型有时以以太网设备来称呼,它提供了对网络的访问,这是通过一个物理适配器和一种特定的协议进行的。它不是通过设备节点来访问的,而是通过套接字API这样的特殊接口来访问.

    *杂项设备通常简写为miscdev,实际上是一个简化的字符设备

    *伪设备是虚拟的,仅仅提供访问内核功能而已

 

17.2模块

  1.Linux内核是模块化组成的,它允许内核在运行时动态地向其中插入或从中删除代码(这些代码被一并组合在一个单独的二进制镜像中,即所谓的模块中)

  2.调用module_init()实际上不是真正的函数调用,而是一个宏调用,唯一的参数便是模块的初始化参数。模块的所有初始化参数必须符合int my_init(void);

  3.exit函数负责对Init函数以及在模块生命周期过程中所做的一切事情进行撤销工作,在退出函数返回后,模块就被卸载了;退出函数必须符合void my_exit(void);

  4.构建模块的两种方法:放在内核源代码树中;放在内核代码外

  5.安装模块(make_modules_install),通常需要以root权限运行

  6.Linux模块之间存在依赖性(依赖关系存放在lib/modules/version/modules.dep)

  7.载入模块最简单的方法是通过insmod命令,这是一个功能很有限的命令,它能做的就是请求内核载入指定的模块;加载模块的最佳机制是modprobe命令,不但会加载

指定的模块,而且会自动加载任何它所依赖的有关模块.(也可以从内核卸载模块,当然需要以root身份运行);

  8.管理配置选项、模块参数、导出符号表

 

17.3设备模型

  1.设备模型的核心部分就是kobject,它有struct_kobject结构体表示,定义于文件<linux/kobject.h>中

  2.ktype的存在是为了描述一族kobject所具有的普遍特性

  3.kset是kobject对象的集合体,有两个功能:第一,其中嵌入的kobject作为kobeject组的基类;第二,kset将相关的kobject集合在一起

  4.kobject通过函数kobject_init进行初始化,用kobject_creat()创建kobject

  5.kobject的主要功能之一是提供统一的引用计数系统

 

17.4sysfs

  1.sysfs文件系统就是处于内存中的虚拟文件系统,它为我们提供了kobject对象层次结构的视图;sysfs的根目录至少有十个,其中最重要的目录是devices,该目录模型导到用户空间.

  2.sysfs中添加和删除kobject

  3.添加文件:1.默认属性;创建新属性;删除新属性;sysfs约定

  4.内核事件层实现了内核到用户的消息通知系统

 

 

 

 

 

 

 

 

 

 

 

 

  

 

posted on 2016-04-28 19:52  20135325  阅读(177)  评论(0编辑  收藏  举报

导航