设备模型的核心部分就是kobject,下面就是它的结构体<linux/kobject.h>,

它也是设备模型的基本结构,它所处理的任务和代码也越来越多: 对象引用计数、sysfs表述、数据结构关联、热插事件处理

struct kobject { const char *k_name; //指向kobject名称的起始位置 char name[KOBJ_NAME_LEN]; /*如果名称长度小于KOBJ_NAME_LEN(20)字节,则kobject的名称便存放到name数组中,k_name指向数组头,如果大于,则动态分配一个足够大的缓冲区来存放kobject的名称,这是k_name指向缓冲区*/         struct kref kref; /*引用计数*/ struct list_head entry; /*在所挂到链表的连接体*/         struct kobject *parent;   /*指向kobject的父对象,以此来在内核中构造一个对象层次结构,并且可以将多个对象之间的关系表现初来,这就是sysfs的真相:一个用户空间的文件系统,用来表示内核中kobject对象的层次结构*/
     struct kset * kset; /*指向所属的kset*/      struct kobj_type * ktype;      struct dentry * dentry; /*目录项, 指向dentry结构体,在sysfs中该结构体就表示这个kobject */   

}; 

首先写一个简单的模块

  1 #include <linux/platform_device.h>                                                                                                2 #include <linux/init.h>3 #include <linux/module.h>4 5 static int __init test_probe(struct platform_device *pdev){6     int err = 0;7     return err;8 }9 10 static int test_remove(struct platform_device *pdev){11     return 0;12 }13 14 static struct platform_device test_device = {15     .name = "test_ts",16     .id = -1,17 };18 19 static struct platform_driver test_driver = {20     .probe = test_probe,21     .remove = test_remove,22     .driver = {23         .name = "test_ts",24         .owner = THIS_MODULE,25     },26 };27 28 static int __init test_init(void){29     platform_device_register(&test_device);30     return platform_driver_register(&test_driver);31 }32 33 static int __exit test_exit(void){34     platform_device_unregister(&test_device);35     platform_driver_unregister(&test_driver);36 }37 38 module_init(test_init);39 module_exit(test_exit);40 41 MODULE_AUTHOR("mine");42 MODULE_LICENSE("GPL");43 MODULE_ALIAS("test");        

insmod后,现在到sys目录中查看我们的设备是否已经加载上了

首先是/sys/bus/platform/devices/
在devices下,每一个连接文件都代表了一个设备
ls可看见test_ts,进入test_ts,ls可发现driver这个链接文件,ls-l查看,发现这个文件是连到/sys/bus/platform/drivers/test_ts的
这里需要说明的是连接的含义,并不是driver驱动存在于test_ts这个设备中,而是test_ts使用的驱动为/sys/bus/platform/drivers/test_ts
现在换到/sys/bus/platform/drivers这个目录下
ls查看会发现这里的文件都为目录,而非连接文件,说明这是驱动真正放置的位置
现在进入test_ts目录,然后ls,发现有一个test_ts的连接文件,ls –l查看可发现该文件连接到/sys/devices/platform/test_ts下
回到/sys/bus/platform/devices/下ls –l也会发现test_ts连接到/sys/devices/platform/test_ts
为什么test_ts这个设备放置于/sys/devices/platform下,而不是/sys/bus/platform/devices下呢
我认为和直观性有关,在sys下有这么几个目录block  bus  class  dev  devices  firmware  kernel  module  fs power 
devices很直观的说明了设备在这个目录下,便于大家查找
而/sys/bus/platform/devices下的连接是为了分类查找

转载于:https://www.cnblogs.com/isisyangyang/p/3964686.html

Linux Kobject相关推荐

  1. LINUX设备驱动之设备模型一--kobject

    http://blog.csdn.net/yangzhu1982/article/details/6186016 Linux设备驱动之设备模型一kobject Eric Fang  2010-01-1 ...

  2. 认识Linux设备驱动模型和Kobject

    2.6内核增加了一个引人注目的新特性--统一设备模型(device model).设备模型提供了一个独立的机制专门来表示设备,并描述其在系统中的拓扑结构: Linux设备模型的核心是使用Bus.Cla ...

  3. linux设备模型bus,device,driver,(kobject、ktype、kset,bus_type、device、device_driver)

    1.1Linux设备驱动模型简介 1.什么是设备驱动模型 (1)类class.总线bus(负责将设备和驱动挂接起来).设备devices.驱动driver(可以看到在驱动源码中,不管是什么样的驱动,都 ...

  4. Linux 设备模型之 (kobject、kset 和 Subsystem)(二)

    1.kobject 结构 在Linux内核里,kobject是组成Linux设备模型的基础,一个kobject对应sysfs里的一个目录.从面向对象的角度来说,kobject可以看作是所有设备对象的基 ...

  5. linux内核中kset是什么意思,Linux内核之设备驱动-底层数据结构kobject/kset

    Linux内核之设备驱动-底层数据结构kobject/kset kobject kobject是组成device.driver.bus.class的基本结构.如果把前者看成基类,则后者均为它的派生产物 ...

  6. Linux中kobject的作用,Linux设备驱动模型-- 数据结构Kset/KObject

    前言 Kset和kobject是Linux设备驱动模型中的核心数据结构,其主要作用是将系统中的设备抽象出来,以树状结构组织,方便系统统一管理. 而这个统一管理的地方,就是sysfs,先放一张示例图,阐 ...

  7. Linux设备模型(2)——Kobject

    转载:http://www.wowotech.net/device_model/kobject.html 1. 前言 Kobject是Linux设备模型的基础,也是设备模型中最难理解的一部分(可参考D ...

  8. LINUX设备驱动之设备模型一kobject

    LINUX设备驱动之设备模型一kobject -------------------------------------------------------------- 转载请注明出处:http:/ ...

  9. Linux设备模型分析之kobject(基于3.10.1内核)

    一.kobject结构定义 kobject是Linux设备模型的最底层数据结构,它代表一个内核对象. kobject结构体定义在include/linux/kobject.h文件中: [cpp] vi ...

最新文章

  1. R语言glm拟合logistic回归模型:模型评估(模型预测概率的分组密度图、混淆矩阵、准确率、精确度、召回率、ROC、AUC)、PRTPlot函数获取logistic模型最优阈值(改变阈值以优化)
  2. ZendServer下安装Typecho需要注意问题
  3. java开发的增查改删_在Java中实现增、删、改、查功能?
  4. php 缺少 wordpress,Wordpress localhost安装错误 - 您的PHP安装似乎缺少WordPress所需的MySQL扩展程序...
  5. linux crontab 每5分钟执行一次_linux面试题:Linux定时任务必备技能有哪些?
  6. jquery的smartWizard插件使用方法
  7. Speex编解码手册
  8. Minimum Class Confusion for Versatile Domain Adaptation
  9. Java Session对象的钝化和活化
  10. 英语学习详细笔记(八)动名词
  11. 【飞桨PaddlePaddle】四天搞懂生成对抗网络(四)——CycleGAN的绝妙设计:双向循环生成的结构
  12. turtle画了一个皮卡丘
  13. 【华人学者风采】汪玉 清华大学
  14. php做到聊天发图片,网页聊天框发送表情图片实现方法
  15. 锥,凸锥,二阶锥,二阶锥规划
  16. 5G/NR 上行免授权
  17. DB2 HADR TSA切换
  18. 敲门代码python_适用于Linux笔记本电脑的基于敲门的命令
  19. 真不戳,基于C++泛型编程的职工管理系统
  20. 分享一个好用的串口调试助手

热门文章

  1. php 怎样让 键 值 反转,PHP 控制和反转
  2. python中多条件语句_Python中的带条件语句
  3. iphone11没有电池小组加件_iPhone 11系列工信部数据:全系4GB运存电池最大达3969mAh...
  4. kvm虚拟机设置万兆网卡_kvm已经设置桥接网卡的虚拟机无法连接宿主机?
  5. Web 浏览器相关的一些概念
  6. php网站模板怎么修改,自己做网站如何用好并自主修改网上的免费模板
  7. 1688.比赛中的配对次数-LeetCode
  8. 20200827:2020力扣第33周双周赛题解
  9. linux 优盘分区,怎么在Linux系统下使用NTFS的U盘或者是分区以及移动硬盘-使用工具NTFS-3G...
  10. 总结之前有道笔记的内容--对于Touch 的不同讲解