设备与模块:

设备类型:块设备(blkdev)、字符设备(cdev)、网络设备;

模块:

分析hello,world模块代码。Hello_init是模块的入口点,通过module_init()注册到系统中,在内核装载时被调用,是一个宏调用,唯一的参数是模块的初始化函数。模块初始化函数格式:int my_init(void);,可标记为static类型。初始化成功,返回值为0,不成功返回一个非零值。Init函数还会注册资源、初始化硬件、分配数据结构等。

hello_exit()函数是模块的出口函数,它由module_exit()例程注册到系统,在模块从内存卸载时,内核会调用hello_exit()。退出函数必须符合以下形式:void my_exit(void);MODULE_LICENSE()和MODULE_AUTHOR()都是模块的简要描述。

构建模块:

1、放在内核源代码树中(这个不详细介绍)

2、放在内核代码外:

在自己的源代码树目录中建立一个Makefile文件,只需要一行指令:obj-m := xx.o(如果有多个源文件,则用obj-m := xx.o  xx-objs := xx-main.o xx-line.o),编译生成xx.ko。同时,还要告诉make如何找到内核源码文件和基础Makefile文件:make –C /kernel/source/location SUBDIRS=$PWD modules

安装模块:make

载入模块:insmod xx.ko

卸载模块:rmmod xx.ko

模块参数:module_param(name,type,perm);

导出符号表:EXPORT_SYMBOL()和EXPORT_SYMBOL_GPL().导出的内核符号表被看做导出的内核接口,甚至称为内核API。

设备模型:

Kobject(kernel object)由struct kobject结构体。Kobject是可以创建对象的层次结构。Ktype是kobject对象被关联到一种特殊的类型。Ktype的存在是为了描述一族kobject所具有的普遍特性。Kset是kobject对象的集合体。Kobject、kytpe、kset三者的关系:kobject与一个特别的ktype对象关联,kobject归入称为kset的集合。

管理和操作kobject:

Kobject通过函数kobject_init进行初始化, 接下来调用kobject_create()创建kobject。

引用计数:

Kobject的主要功能就是提供一个统一的引用计数系统。

Sysfs:

Sysfs文件系统是一个处于内存中的虚拟文件系统,为我们提供kobject对象的层次结构的视图。

《Linux课本》读书笔记 第十七章 模块的更多相关文章

  1. 20135337——Linux内核分析:第十七章 模块与设备

    第17章 模块与设备 设备类型:在所有 Unix 系统中为了统一普通设备的操作所采用的分类. 模块: Linux 内核中用于按需加载和卸载目标码的机制. 内核对象:内核数据结构中支持面向对象的简单操作 ...

  2. 《Linux内核设计与实现》读书笔记 第十七章 设备与模块

    一.设备类型 1. Unix系统 - 块设备 - 字符设备 - 网络设备 2. 块设备 通常缩写为blkdev,它是可寻址的,寻址以块为单位,块大小随设备不同而不同:块设备通常支持重定位操作,也就是对 ...

  3. 《linux内核设计与实现》读书笔记第十七章

    第17章 设备与模块 四种内核成分 设备类型:在所有 Unix 系统中为了统一普通设备的操作所采用的分类. 模块: Linux 内核中用于按需加载和卸载目标码的机制. 内核对象:内核数据结构中支持面向 ...

  4. 《Linux内核》课本读书笔记 第三章

  5. 《Linux内核设计与实现》第八周读书笔记——第四章 进程调度

    <Linux内核设计与实现>第八周读书笔记——第四章 进程调度 第4章 进程调度35 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配 ...

  6. 《Linux内核设计与实现》 第八周读书笔记 第四章 进程调度

    20135307 张嘉琪 第八周读书笔记 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统.只有 ...

  7. 《Linux内核分析》读书笔记(四章)

    <Linux内核分析>读书笔记(四章) 标签(空格分隔): 20135328陈都 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行 ...

  8. 《LINUX内核设计与实现》第三周读书笔记——第一二章

    <Linux内核设计与实现>读书笔记--第一二章 20135301张忻 估算学习时间:共2小时 读书:1.5 代码:0 作业:0 博客:0.5 实际学习时间:共2.5小时 读书:2.0 代 ...

  9. 《Linux内核设计与实现》第四周读书笔记——第五章

    <Linux内核设计与实现>第四周读书笔记--第五章 20135301张忻 估算学习时间:共1.5小时 读书:1.0 代码:0 作业:0 博客:0.5 实际学习时间:共2.0小时 读书:1 ...

随机推荐

  1. 30个最常用的Linux系统命令行

    1.cd命令这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径.如:cd /root/Docements # 切换到目录 ...

  2. activiti5.14版本在线流程设计器的国际化中文支持

    参考了前辈的一些国际化支持做法,加上自己对流程的一些理解,做了activiti5.14版本的国际化支持.发现有若干bug,比如属性设置弹出窗口里的grid里的下拉列表不支持显示中文(要修改oryx.d ...

  3. D - C Looooops POJ - 2115 欧几里德拓展

    题意:就是看看for(; ;)多久停止. 最让我蛋疼的是1L和1LL的区别!让我足足wa了12发! 1L 是long类型的, 1LL为long long类型的! 思路: 这就是欧几里德扩展的标准式子了 ...

  4. 关于使用spring mvc前后端上传数据日期格式

    前端页面传入数据到后台,String,int等等类型都很友好,但是Date类型不能直接上传到服务器.否则会报异常![在这里插入图片描述](https://img-blog.csdnimg.cn/201 ...

  5. go标准库的学习-encoding/xml

    参考:https://studygolang.com/pkgdoc 导入方式: import "encoding/xml" 实现的简单的理解XML命名空间的XML 1.0编译器 f ...

  6. java 学习------helloword 程序测试

    1.新建一个helloword.java  文件 2.在新建的helloword.java 文件中添加以下代码 class helloWord { public static void main(St ...

  7. Javascript 对象复制

    如果对象只是一个数据集,可采用json化再反json化的方式克隆一个对象,这个过程会丢失对象的方法.效率比较低. 可以采用如下递归的方式复制一个对象. function clone(target) { ...

  8. LOJ6089 小Y的背包计数问题 背包、根号分治

    题目传送门 题意:给出$N$表示背包容量,且会给出$N$种物品,第$i$个物品大小为$i$,数量也为$i$,求装满这个背包的方案数,对$23333333$取模.$N \leq 10^5$ $23333 ...

  9. svg画弧

    http://www.pindari.com/svg-arc.html https://jsfiddle.net/8robssa0/ http://jsbin.com/giyotacuxu/edit? ...

  10. WPF中的DoubleAnimation

    原文:WPF中的DoubleAnimation WPF中的DoubleAnimation                                                         ...