自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 106 class:设备管理

class:设备的大管家硬件设备分类管理与 udev 协作,自动创建设备文件上图中:classes_init() 在系统启动时在 sysfs根目录 /sys 下创建 /class 。class_create() 在 /sys/class 目录下创建子目录。/sys/class/xxx 代表某一类设备。device_create() 进一步创建 /sys/class/xxx/yyy, 不只创建了 yyy 目录项,也为 yyy 创建了属性文件,此属性文件记录了这个硬件设备的的设备号。kobj

2021-06-21 21:37:37 172

原创 105 uevent:内核消息的快递包

uevent机制kobject对象可以通过uevent机制往用户空间发送信息kobject_uevent:内核消息发送接口广播方式发送NETLINK:特殊的网络通信,本地主机使用。mdev / udev 负责监控此连接,有消息就获取。传统做法是内核执行 hotplug 程序 进行消息通知(效率低、不优雅)udev/mdev:用户空间守护进程,监听广播信息默认开机启动,systemdudevadm monitor:打印uevent事件。shell下输入此指令,udev

2021-06-18 23:08:59 308

原创 104 kset:驱动的骨架

kobject的容器,体现设备驱动的层次关系kset_create_and_add()函数lib/kobject.c负责产生一个 kset对象,并与 sysfs 中的一个目录项 关联起来。/* name:设置 kset 和 kset 对应的目录项的名称。 * uevent_ops:负责 kset 和用户空间通信的一系列函数接口。kobject 只能依靠上层 kset 对象来向用户空间发送消息。 * 用户空间的 mdev 或 udev 守护进程监测到 kset 发出的信息后,创建设备文

2021-06-18 00:08:00 275 1

原创 103 设备驱动模型试验 kobject 点灯

实验思路四部分:内核模块 + led驱动 + kobject + kobj_attribute内核模块动态加载功能led驱动控制硬件ledkobject在/sys创建目录项,并将它们关联起来kobj_attribute为kobject对象的属性文件提供独有的读写接口...

2021-06-15 22:29:23 346

原创 102 kobj_type

kobj_type:用户空间的法宝为kobject对象构建多个属性文件为每个属性文件设置具体操作接口vfs的inode对象与sysfs的kernfs_node对象的绑定过程重点关注属性文件具体操作接口的赋值过程关注open()、read()、write函数的底层机制第一阶段:属性文件操作接口赋值sysfs_create_group()函数fs/sysfs/group.cint sysfs_create_group(struct kobject *kobj, co

2021-06-13 23:46:29 397

原创 101 kobject:驱动的基石

kobject:驱动的基石构建一个kobject对象构建一个sysfs中的目录项(kernfs_node)把他们关联起来重点关注sysfs目录项与kobject对象的关联过程关注kobject对象默认的属性文件操作接口kobject_create_and_add()函数lib/kobject.cstruct kobject *kobject_create_and_add(const char *name, struct kobject *parent){ struct kobj

2021-06-13 22:21:19 709

原创 100 linux 设备驱动模型

为什么需要设备驱动模型早期内核(2.4之前)没有统一的设备驱动模型,但照样可以用。需要手动调用 mknod 指令创建设备文件,绑定了 file_operation 后才能调用驱动控制硬件,很不方便。2.4~2.6期间使用devfs,就是设备文件系统,挂载在/dev目录。需要在内核驱动中创建设备文件(devfs_register,参数为设备文件名),不再需要手动使用 mknod 指令来创建设备文件。但这种方式命名死板。2.6以后使用sysfs,挂载在/sys目录下。将设备分类、分层统一进行管理。

2021-06-13 21:59:43 307

原创 98 led字符设备驱动实验

led字符设备驱动实验驱动模块 = 内核模块(.ko)+ 驱动接口(file_operations)在内核模块入口函数里获取gpio相关寄存器并初始化构造 file_operations接口,并注册到内核哈希表 cdev_map->probes创建设备文件,绑定自定义file_operations接口应用程序echo通过写设备文件控制硬件led驱动模块初始化地址映射GPIO寄存器物理地址和虚拟地址映射arch/arm/include/asm/io.hvoid _

2021-06-13 14:16:25 166

原创 97 open函数如何查找file_operation接口

get_unused_fd_flags先在 struct file *fd_array[] 找到一个空闲的元素,为本次操作分配一个未使用过的文件描述符(就是空闲元素的数组下标)。do_file_open生成一个空白 struct file 结构体。从文件系统中查找到文件对应的 inode 。do_dentry_open/* 把文件对应的inode节点和上一步生成的struct file结构体 */static int do_dentry_open(struct file *f...

2021-06-11 11:26:02 1507 1

原创 96 如何创建一个设备文件

一、mknod引入用于创建指定类型的特殊文件。一般流程是创建一个设备文件,然后根据 mknod 指令中的设备号,将 struct inode 和 cdev_map->probes->cdev->file_operations 绑定起来。查看 mknod 指令使用帮助:mknod --help用法:mknod [选项]... 文件名称 类型 [主设备号 次设备号]Create the special file NAME of the given TYPE....当类型为"p"时

2021-06-10 20:38:04 704

原创 95 源码分析:如何保存file_operation接口

关键数据结构梳理struct cdev 结构体:专门用来管理字符设备,定义在:kernel/ebf-buster-linux/include/linux/cdev.h字符设备管理对象struct cdev { //内核驱动基本对象,让字符设备继承内核基本驱动对象 struct kobject kobj; //相关内核模块 struct module *owner; //设备驱动接口 const struct file_operations *ops; //链表节点,暂不

2021-06-09 21:00:16 118

原创 94 从源码看如何管理(分配)设备号

1、chrdevs哈希表用于管理设备号。定义在 ebf-buster-linux/fs/char_dev.c。static struct char_device_struct { // 指向下一个链表节点 struct char_device_struct *next; // 主设备号 unsigned int major; // 次设备号 unsigned int baseminor; // 次设备号的数量 int minorct; // 设备的名称

2021-06-07 22:19:35 195

原创 计网实验--wireshark

三个窗口:第一个窗口显示抓到的包的列表。第二个窗口是对选中的包的解析,这个解析信息在包中数据是看不到的。第三个窗口就是这个包的具体内容。wireshark 可以在捕获前筛选,也可以在捕获完成后过滤。在上面绿色的筛选栏中输入 tcp 回车 即可筛选出所有采用 tcp协议 或者 上层协议是 tcp 的包。输入 arp 回车 即可筛选出采用 arp 协议的包。输入 空格 回车 即可显示所有的包的列表。过滤器的技巧很多。如:1、过滤特定源地址的包,在过滤栏中输入:ip.src==172.

2021-06-05 20:41:27 3261 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除