设备与模块:

设备类型:块设备(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. 建立标准编码规则(一)-自定义C#代码分析器

    1.下载Roslyn的Visual Studio分析器模板插件(VS2015 或VS2017) https://marketplace.visualstudio.com/items?itemName= ...

  2. SpringMVC 使用JSR-303进行校验 @Valid

    注意:1 public String save(@ModelAttribute("house") @Valid House entity, BindingResult result ...

  3. 解决python中 .to_csv() 的乱码问题

    解决方法:添加参数 encoding='utf_8_sig' df.to_csv('users.csv', encoding='utf_8_sig')

  4. 装饰器 以及 django 中的应用

    装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓存.权 ...

  5. python之面向对象进阶2

    封装.property装饰器 封装分为3种情况:封装对象的属性.封装类的属性.封装方法. 封装对象的属性:(在属性名前加双下划线__) class Person: def __init__(self, ...

  6. 【洛谷】【计数原理+Floyed】P1037 产生数

    [题目描述:] 给出一个整数 n \((n<10^{30})\) 和 k 个变换规则\((k≤15)\) . 规则: 一位数可变换成另一个一位数: 规则的右部不能为零. 例如: n=234 .有 ...

  7. 在环中(Going in Cycle!!, UVa 11090)

    [题目描述] 给定一个 n 个点 m 条边的加权有向图,求平均权值最小的回路. [输入格式] 输入第一行为数据组数 T .每组数据第一行为图的点数 n 和边数 m (n ≤ 50).以下 m 行每行3 ...

  8. Linux操作系统中打开文件数量的查看方法

    Linux操作系统中打开文件数量的查看方法ulimit -n 4096也就是限制用户的最大文件打开数为4096个 在网上查了关于怎么查看文件打开数的文章大致有两种说法/proc/sys/fs/file ...

  9. 对Promise的理解?

    ES6原生提供了promise对象 所谓Promise,就是一个对象,用来传递异步操作的消息.它代表了某个未来才会知道结果的事件(通过是一个异步操作),并且这个事件提供统一的API,可供进一步处理 P ...

  10. 转载 三、并行编程 - Task同步机制。TreadLocal类、Lock、Interlocked、Synchronization、ConcurrentQueue以及Barrier等

    随笔 - 353, 文章 - 1, 评论 - 5, 引用 - 0 三.并行编程 - Task同步机制.TreadLocal类.Lock.Interlocked.Synchronization.Conc ...