一、设备类型

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内核设计与实现读书笔记——设备和模块相关推荐

  1. Linux内核设计与实现 读书笔记

    第二章 Linux内核 1 内核开发特点 1)内核编译时不能访问C库: 2)浮点数很难使用: 3)内核只有一个定长堆栈: 4)注意同步和并发. 第三章 进程管理 1 current宏:查找当前运行进程 ...

  2. linux内核设计与实现看不懂,Linux内核设计与实现读书笔记

    Unix强大的根本原因: Unix简洁, 提供几百个系统调用, 设计目的明确 Unix中 所有东西都被当做文件对待 Unix内核和相关系统工具是用C语言开发的, 移植能力强大 Unix进程创建迅速, ...

  3. 进程调度(一)--linux内核设计与实现读书笔记

    进程的调度程序是保证进程能有效工作的一个内核子系统.调度程序负责决定将哪个进程投入运行,何时运行以及运行多少时间.简单的来说,调度程序就是在给一堆就绪的进程分配处理器的时间,调度程序是多任务操作系统的 ...

  4. Linux内核设计与实现读书笔记

    1.进程管理 内核通过task_struct管理进程. 2.进程调度 1.可执行队列runqueue. 2.用户抢占.从中断返回或者系统调用返回的时候发生. 3.系统调用 1.系统调用参数放在寄存器里 ...

  5. Linux内核设计与实现学习笔记目录

    **注:**这是别人的笔记,我只是把目录抄过来 <Linux内核设计与实现学习笔记> 1.<Linux内核设计与实现>读书笔记(一)-内核简介 2.<Linux内核设计与 ...

  6. 领域驱动设计DDD之读书笔记

    查看文章   领域驱动设计DDD之读书笔记  转载原地址:http://hi.baidu.com/lijiangzj 2007-08-17 16:53 一.当前Java软件开发中几种认识误区 Hibe ...

  7. Redis 设计与实现 读书笔记(菜鸟版)

    Redis 设计与实现 读书笔记(简略版) 写在前面 第一章(内部数据结构) SDS List Dictionary Rehash Rehash 与 COW 渐进式Rehash 字典收缩 Skipli ...

  8. 初探内核之《Linux内核设计与实现》笔记上

    内核简介  本篇简单介绍内核相关的基本概念. 主要内容: 单内核和微内核 内核版本号 1. 单内核和微内核   原理 优势 劣势 单内核 整个内核都在一个大内核地址空间上运行. 1. 简单. 2. 高 ...

  9. 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 目前存在 ...

最新文章

  1. Python使用datetime中的timedelta模块实现时间增减:python计算100天后是哪年那月那日?
  2. oracle_dataGuard_11G
  3. Chrome浏览器内部协议Chrome://收集
  4. Mysql源码学习——源码目录结构
  5. 三十一、Vue框架赶紧来了解一下
  6. 递归与分治——斐波那契数列非递归,递归,与优化后的递归算法
  7. linux 文件大小_整理 | Linux下列出目录内容命令
  8. linux oracle删除恢复数据恢复,Linux下Oracle误删除数据文件恢复操作
  9. 对编码通俗易懂的介绍
  10. 7-16 求符合给定条件的整数集
  11. 前Facebook面试官告诉你如何才能顺利通过编程面试
  12. Citrix XenDesktop 虚拟桌面 每用户/设备 许可手动释放
  13. VirtualBox启动失败,The VM session was aborted.
  14. 德国铁路公司基于模型的铁路系统设计路线图 - 基于模型的系统开发在铁路部门的应用
  15. C语言中字符串转数字的方法
  16. 流形学习t-SNE,LLE,Isomap
  17. gb和gib的区别_高端存储手册里面的KiB,MiB,GiB是啥意思?
  18. 随机生成50道加减算术题
  19. Win10安装Selenium+Chrome+ChromeDriver(应用代码无需设置路径)
  20. JDK里的“SPI”是什么意思

热门文章

  1. 无代码时代下,程序员不够用了!
  2. 200 个工具分析机器学习十年:前途未卜、工程师是核心!
  3. 世界名校、大厂人才汇聚,“马栏山杯”算法大赛打造 AI 视频竞技场
  4. 腾讯云 AI 在新基建领域下一盘什么大棋
  5. 云原生开发环境初探 | CSDN 博文精选
  6. 三管齐下!TB 级文件的上传性能瞬间被优化 100 倍!
  7. Java 跌落神坛,Python 继续夺冠....凭啥?
  8. 华为发布全球首款 5G 汽车通讯硬件;今日头条系产品大裁员;三星手机推迟上市 | 极客头条...
  9. 微信的 Bug 差点让我被老板炒鱿鱼!
  10. 引起 Edge 浏览器远程代码漏洞的幕后黑手已出现!