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将事件从内核空间传递到用户控件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值