设备与模块:

设备类型:块设备(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. mysql状态分析之show global status(转)

    mysql> show global status;可以列出MySQL服务器运行各种状态值,我个人较喜欢的用法是show status like '查询值%';一.慢查询mysql> sh ...

  2. win10 文件扩展名的更改

    win10 文件扩展名的改 随便打开一个文件夹,最好是"此电脑",  第二行是 "     文件  -   计算机  -  查看   " 在查看里面就可以更改了 ...

  3. 【NOIP2017D2T3】列队

    Description Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵.Sylvia所在的方阵中有n × m名学生,方阵的行数为 n, ...

  4. 踏得网互联网新技术垂直搜索服务和分享 - HTML5动效/特效/动画搜索

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/iefreer/article/details/34917729 当前主流搜索引擎在解决互联网技术创意 ...

  5. UVa 11846 - Finding Seats Again

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  6. 详解PHP操作Memcache缓存技术提高响应速度的方法

    本文转载http://blog.csdn.net/zhihua_w  不错的博客,仅供本人学习之用 一般来说,如果并发量不大的情况,使不使用缓存技术并没有什么影响,但如果高并发的情况,使用缓存技术就显 ...

  7. Qt 编程指南 8 显示静态小图片和动态大图片

    显示控件概览 图片浏览示例 第一行是一个标签控件,objectName 为 labelShow,文本内容清空,因为是用来显示图片用的. 主界面第二行的控件是四个普通按钮 第一个按钮文本是 " ...

  8. Drool实战系列(一)之入门程序

    Drools官网地址为:https://www.drools.org/ maven环境 入门程序例子如下: 项目结构截图: 一.导入pom文件 <project xmlns="http ...

  9. 邻接表&链式前向星

    链式前向星: 适合点多.边少的情况 不适用于大量遍历出边的题目(因为cache miss) 邻接表: 如果用邻接表来实现的话,一般就用vector嘛,我们都知道vector都是自动扩容的,在空间满了以 ...

  10. ubuntu 设置github秘钥

    github的SSH配置如下: 一 . 设置Git的user name和email: $ git config --global user.name "AmyOrz" $ git ...