linux+模块与设备关系,linux内核设计与实现读书笔记——设备和模块
一、设备类型
1、块设备 blkdev:以块为单位寻址,支持重定位(数据随机访问),通过块设备节点来访问。
2、字符设备cdev:不可寻址,提供数据流访问,通过字符设备节点访问。
3、网络设备:对网络的访问,通过物理适配器和协议进行访问。
4)杂项设备miscdev:表示简单设备;伪设备
二、模块
可装载内核模块:单独的二进制镜像,允许内核在运行时i动态插入或删除代码。
ps 静态编译到内核镜像的区别
1、出入口点
入口点:init,出口点,一般用于注册资源、初始化硬件、分配数据结构等:exit:从内核中卸载。
如果编译到内核中,init存放在内核映像中,并且退出函数不会被包含和调用
2、构建模块(kbuild构建系统)
管理模块源码:
1)加入内核代码树(补丁或者代码):
设备驱动程序:内核源码树根目录/dirver:字符/char 块/block usb /usb
在树和自身makefile中加入位置和指令。
2)内核源代码树之外:
在自身源代码目录中建立makefile;通过make命令找到源代码和makefile
3、安装模块
以后的模块在/lib/modules/version/kernel对应位置中,make modules_install安装
4、模块依赖
depmod产生依赖信息生成在/lib/modules/version/modules.dep
5、载入模块
简单载入 insmod 名称.ko ·
modprobe:提供模块依赖性分析、智能差错、错误报告等 modprobe module 参数,会自动加载依赖模块
6、配置
kbuild系统配置:在kconfig文件中添加选项对应内核源码树。
可以配置 编译到内核还是模块形式,依赖关系,标志项等。
7、模块参数:驱动程序声明,用户在系统启动或者模块装载时指定参数值,通过宏module_param(name,type,perm)
8、导出符号表
只有被导出后的内核函数,才可以被模块调用,代码被配置为模块的时候必须确保接口全部被导出。
导出的内核符号表被看做导出的内核接口,内核API。
导出指令:EXPORT_SYMBOL()
三、设备模型
1、统一设备模型:系统中该设备拓扑关系的树结构。
1 )kobject
嵌入其它结构,使其成为对象层次架构中的一部分。
包含引用计数、父子关系、对象名称
2 )ktype
kobject对象被关联到类型,定义于,描述某种kobject的普遍特性
kobject相关的默认特性:西沟行为、sysfs行为等
3) kset
kobject对象的集合体,定义于,通过list链接集合的所有对象
嵌入的kobject作为kobject组的基类,在sysfs中,相关的object以独立目录的形式出现在文件系统中。
2、sysfs
处于内存中的文件系统,提供了kobject对象层次结构的视图,以文件的方式观察系统中设备的拓扑结构。
设备结构树导出为要给文件系统,sysfs挂载在sys目录下,把kobject对象映射为目录项。
1)包含目录:
block每个子目录对应系统中已经注册的设备;
bus:系统总线视图;
class:以高层功能罗技组织的系统设备视图;
dev:已注册设备节点的视图;
devices:系统设备拓扑结构视图,映射内核设备结构体的组织层次,
firmware:底层子系统的特殊树;
fs:已注册文件系统视图;
kernel:内核配置项和状态信息;
module:系统已加载模块信息;
power:系统范围的电源管理数据。
2)kobject操作
kobject导入sysfs:kobject_add,根据kobject对象层次结构中的位置设置目录位置;
目录中的文件:属性,默认为ktype提供。
3)内核事件层
供内核到用户的消息通知系统:从kobject对象出发,每个事件源是一个sysfs路径——>将事件模拟为信——>通过多点传送套接字netlink将事件从内核空间传递到用户控件。
linux+模块与设备关系,linux内核设计与实现读书笔记——设备和模块相关推荐
- Linux内核设计与实现 读书笔记
第二章 Linux内核 1 内核开发特点 1)内核编译时不能访问C库: 2)浮点数很难使用: 3)内核只有一个定长堆栈: 4)注意同步和并发. 第三章 进程管理 1 current宏:查找当前运行进程 ...
- linux内核设计与实现看不懂,Linux内核设计与实现读书笔记
Unix强大的根本原因: Unix简洁, 提供几百个系统调用, 设计目的明确 Unix中 所有东西都被当做文件对待 Unix内核和相关系统工具是用C语言开发的, 移植能力强大 Unix进程创建迅速, ...
- 进程调度(一)--linux内核设计与实现读书笔记
进程的调度程序是保证进程能有效工作的一个内核子系统.调度程序负责决定将哪个进程投入运行,何时运行以及运行多少时间.简单的来说,调度程序就是在给一堆就绪的进程分配处理器的时间,调度程序是多任务操作系统的 ...
- Linux内核设计与实现读书笔记
1.进程管理 内核通过task_struct管理进程. 2.进程调度 1.可执行队列runqueue. 2.用户抢占.从中断返回或者系统调用返回的时候发生. 3.系统调用 1.系统调用参数放在寄存器里 ...
- Linux内核设计与实现学习笔记目录
**注:**这是别人的笔记,我只是把目录抄过来 <Linux内核设计与实现学习笔记> 1.<Linux内核设计与实现>读书笔记(一)-内核简介 2.<Linux内核设计与 ...
- 领域驱动设计DDD之读书笔记
查看文章 领域驱动设计DDD之读书笔记 转载原地址:http://hi.baidu.com/lijiangzj 2007-08-17 16:53 一.当前Java软件开发中几种认识误区 Hibe ...
- Redis 设计与实现 读书笔记(菜鸟版)
Redis 设计与实现 读书笔记(简略版) 写在前面 第一章(内部数据结构) SDS List Dictionary Rehash Rehash 与 COW 渐进式Rehash 字典收缩 Skipli ...
- 初探内核之《Linux内核设计与实现》笔记上
内核简介 本篇简单介绍内核相关的基本概念. 主要内容: 单内核和微内核 内核版本号 1. 单内核和微内核 原理 优势 劣势 单内核 整个内核都在一个大内核地址空间上运行. 1. 简单. 2. 高 ...
- Linux 基础篇 -- Linux介绍(怎么读、是什么、创始人、吉祥物、发版本、目前存在的操作系统) Linux和Unix的关系 linux和Windows比较
文章目录 1. Linux介绍 1.1 Linux怎么读: 1.2 Linux是什么: 1.3 Linux创始人: 1.4 Linux 的吉祥物: 1.5 Linux的主要的发行版: 1.6 目前存在 ...
最新文章
- Python使用datetime中的timedelta模块实现时间增减:python计算100天后是哪年那月那日?
- oracle_dataGuard_11G
- Chrome浏览器内部协议Chrome://收集
- Mysql源码学习——源码目录结构
- 三十一、Vue框架赶紧来了解一下
- 递归与分治——斐波那契数列非递归,递归,与优化后的递归算法
- linux 文件大小_整理 | Linux下列出目录内容命令
- linux oracle删除恢复数据恢复,Linux下Oracle误删除数据文件恢复操作
- 对编码通俗易懂的介绍
- 7-16 求符合给定条件的整数集
- 前Facebook面试官告诉你如何才能顺利通过编程面试
- Citrix XenDesktop 虚拟桌面 每用户/设备 许可手动释放
- VirtualBox启动失败,The VM session was aborted.
- 德国铁路公司基于模型的铁路系统设计路线图 - 基于模型的系统开发在铁路部门的应用
- C语言中字符串转数字的方法
- 流形学习t-SNE,LLE,Isomap
- gb和gib的区别_高端存储手册里面的KiB,MiB,GiB是啥意思?
- 随机生成50道加减算术题
- Win10安装Selenium+Chrome+ChromeDriver(应用代码无需设置路径)
- JDK里的“SPI”是什么意思
热门文章
- 无代码时代下,程序员不够用了!
- 200 个工具分析机器学习十年:前途未卜、工程师是核心!
- 世界名校、大厂人才汇聚,“马栏山杯”算法大赛打造 AI 视频竞技场
- 腾讯云 AI 在新基建领域下一盘什么大棋
- 云原生开发环境初探 | CSDN 博文精选
- 三管齐下!TB 级文件的上传性能瞬间被优化 100 倍!
- Java 跌落神坛,Python 继续夺冠....凭啥?
- 华为发布全球首款 5G 汽车通讯硬件;今日头条系产品大裁员;三星手机推迟上市 | 极客头条...
- 微信的 Bug 差点让我被老板炒鱿鱼!
- 引起 Edge 浏览器远程代码漏洞的幕后黑手已出现!