
设备模型
文章平均质量分 81
qwaszx523
努力成长的小菜鸟
展开
-
platform_device的生成过程
kernel在引入dts前后,platform_device的生成方式是不同的。在引入设备树之前,platform_device变量是静态定义的。而引入设备树之后,kernel通过解析设备节点的信息生成platform_device。一、引入dts之前 add a platform-level deviceint platform_device_register(struct plat原创 2017-11-02 09:29:52 · 2060 阅读 · 0 评论 -
Linux解析设备树生成设备的过程
设备树的populate过程大致有如下几个阶段一、根据设备树创建device node链表start_kernel ---> setup_arch ---> unflatten_device_tree在u-boot或者lk引导内核的时候,会将设备树在物理内存中的物理起始地址传递给Linux内核,然后Linux内核在函数unflatten_device_原创 2017-10-31 16:50:04 · 2487 阅读 · 0 评论 -
uevent
uevent是sysfs向用户空间发出的消息。比如,device_add函数中,会调用kobject_uevent(&dev->kobj, KOBJ_ADD); 这里kobj是发消息的kobj,KOBJ_ADD是发出的事件。uevent的事件在kobject_action中定义:enum kobject_action { KOBJ_ADD, KOBJ_REMOV转载 2017-06-07 17:36:11 · 583 阅读 · 0 评论 -
sysfs 创建属性文件的方法
1、sysfs_create_groupDEVICE_ATTR(disp_connect, S_IWUGO | S_IRUGO, show_connect, store_connect);DEVICE_ATTR(gamma, S_IWUGO | S_IRUGO, show_gamma, store_gamma);DEVICE_ATTR(polling, S_IWUGO | S_IR原创 2017-05-25 16:25:45 · 1450 阅读 · 0 评论 -
kobject.c 添加注释
/** * populate_dir - populate directory with attributes. * @kobj: object we're working on. * * Most subsystems have a set of default attributes that * are associated with an objec转载 2017-06-07 15:41:55 · 362 阅读 · 0 评论 -
字符设备的组织形式与设备号的注册分配
在kernel中字符设备用结构体struct char_device_struct表示,其定义如下:#define CHRDEV_MAJOR_HASH_SIZE 255 /*kernel/include/linux/fs.h*/ static struct char_device_struct{/*kernel/fs*/原创 2017-11-14 10:37:32 · 297 阅读 · 0 评论 -
字符设备初始化
一个 cdev 一般它有两种定义初始化方式:静态的和动态的。 静态内存定义初始化: struct cdev my_cdev; cdev_init(&my_cdev, &fops); my_cdev.owner = THIS_MODULE;动态内存定义初始化: struct cdev *my_cdev = cdev_alloc(); my_cdev->ops = &fops; my_原创 2017-11-14 14:00:40 · 365 阅读 · 0 评论 -
cdv_add
内核中每个字符设备都对应一个 cdev结构的变量,下面是它的定义:kernel/include/linux/cdev.hstruct cdev { structkobject kobj; // 每个 cdev都是一个 kobject structmodule *owner; /原创 2017-11-14 14:32:06 · 322 阅读 · 0 评论 -
kernel解析设备树生成设备节点过程
/** * unflatten_device_tree - create tree of device_nodes from flat blob * * unflattens the device-tree passed by the firmware, creating the * tree of struct device_node. It also fills the "name"原创 2017-11-06 10:25:46 · 3365 阅读 · 0 评论 -
sys目录devices、dev等目录的创建
static void __init do_basic_setup(void){ cpuset_init_smp(); usermodehelper_init(); shmem_init(); driver_init(); init_irq_proc(); do_ctors(); us原创 2017-11-06 10:56:36 · 610 阅读 · 0 评论 -
i2c、spi设备展开过程
const struct of_device_id of_default_bus_match_table[] = { { .compatible = "simple-bus", }, { .compatible = "simple-mfd", }, #ifdef CONFIG_ARM_AMBA { .compatible = "arm,amba-bus",原创 2017-11-27 19:47:04 · 500 阅读 · 0 评论 -
Linux设备和驱动的匹配过程
Linux设备驱动注册过程如下所示:xxxx_driver_register()----->driver_register()----->bus_add_driver()----->driver_attach()-----> __driver_attach()Linux设备添加过程如下所示:xxxx_device_add()----->device_add()----->bus_add_devic原创 2017-03-24 18:04:45 · 7531 阅读 · 0 评论 -
map.c 添加注释
/* * linux/drivers/base/map.c * * (C) Copyright Al Viro 2002,2003 * Released under GPL v2. * * NOTE: data structure needs to be changed. It works, but for large dev_t * it will be too slow转载 2017-06-07 15:23:09 · 441 阅读 · 0 评论 -
char_dev.c 添加中文注释
/* * linux/fs/char_dev.c * * Copyright (C) 1991, 1992 Linus Torvalds */#include #include #include #include #include #include #include #include #include #include #include #include转载 2017-06-07 15:21:54 · 1021 阅读 · 0 评论 -
3.x版本内核中platform_device的生成
转自http://blog.youkuaiyun.com/mcgrady_tracy/article/details/42777969内核版本:Linux-3.18.2在3.x版本内核中platform_device不再静态定义,而是通过device tree来动态生成,例如(arch/arm/mach-s3c24xx/mach-sc2416-dt.c):[cpp] view pl转载 2016-10-13 15:15:15 · 557 阅读 · 0 评论 -
linux下/dev、/sys/devices 和 /sys/dev 之间区别
/dev,设备文件存储目录,应用程序通过对这些文件的读写和控制,可以访问实际的设备;/sys/devices ,内核设备按总线类型分层放置的目录结构,按照设备挂接的总线类型,组织成层次结构,保存了系统所有的设备。/sys/dev 下有两个子目录block和char,存放的是块设备和字符设备的主次号码,形式为(major:minor),它指向 /sys/devices 目原创 2017-01-10 09:47:56 · 1857 阅读 · 0 评论 -
linux驱动之--fops的关联
转自http://blog.youkuaiyun.com/zssmcu/article/details/67467701.各种驱动形式不过是表象,本质还是把fops注册到inode中。2.一直没有找到确实的“证据”不过还是有点线索的:device_create->device_create_vargs-> dev_set_drvdata(dev, drvdata)把fops设置到了dev->p->转载 2017-01-12 14:38:23 · 4521 阅读 · 0 评论 -
字符设备文件的打开操作 open()
转自http://blog.youkuaiyun.com/pan0755/article/details/51690540字符设备文件的打开操作(1)作为例子,这里假定前面对应于/dev/demodev设备节点的驱动程序在自己的代码里实现了如下的struct file_operations对象fops:static struct file_operations fops = {转载 2017-03-08 10:20:27 · 3827 阅读 · 0 评论 -
platform_set_drvdata和platform_get_drvdata
1、platform_set_drvdatakernel\linux-3.10.y\include\linux\platform_device.h:static inline void platform_set_drvdata(struct platform_device *pdev, void *data){ dev_set_drvdata(&pdev->dev, d原创 2016-10-13 12:46:29 · 537 阅读 · 0 评论 -
LINUX设备驱动之设备模型一--kobject
LINUX 设备驱动驱动程序模型的核心数据结构是 kobject , kobject 数据结构在 /linux/kobject.h 中定义:struct kobject { const char *name; struct list_head entry; struct kobject转载 2017-05-23 13:53:33 · 342 阅读 · 0 评论 -
设备模型之文件节点
设备模型相关的文件:设备文件:/dev/xxx设备属性文件:/sys/devices/xxxx/deviceName/attributeName设备类目录:/sys/class/subsystemName设备目录:/sys/class/subsystemName/deviceName 一般为/sys/devices/xxxx/deviceName链接。原创 2017-05-23 16:38:23 · 319 阅读 · 0 评论 -
文件节点写函数xxxx_store返回值
如果返回值为0,会不停的给文件节点写原创 2017-05-17 19:00:06 · 468 阅读 · 0 评论 -
/sys 目录
sys目录描述了设备驱动模型的层次关系。documentation/filesystems/sysfs.txt主要描述/sys目录的创建及其属性,需要看一下。block:所有块设备devices:系统所有设备(块设备特殊),对应struct device的层次结构bus:系统中所有总线类型(指总线类型而不是总线设备,总线设备在devices下),bus的每个子目录都包含原创 2017-05-19 14:38:34 · 450 阅读 · 0 评论 -
linux设备模型
Linux设备模型的目的:为内核建立一个统一的设备模型,从而有一个对系统结构的一般性抽象描述。换句话说,Linux设备模型提取了设备操作的共同属性,进行抽象,并将这部分共同的属性在内核中实现,而为需要新添加设备或驱动提供一般性的统一接口,这使得驱动程序的开发变得更简单了,而程序员只需要去学习接口就行了。原创 2017-05-19 14:41:02 · 279 阅读 · 0 评论 -
linux设备驱动模型
Linux设备模型学习分为:Linux设备底层模型,描述设备的底层层次实现(kobject);Linux上层容器,包括总线类型(bus_type)、设备(device)和驱动(device_driver)。 ==== Linux设备底层模型 ==== 谨记:像上面看到的一样,设备模型是层次的结构,层次的每一个节点都是通过kobject实现的。在文件上则体现转载 2017-05-19 15:45:04 · 358 阅读 · 0 评论 -
mdev的基本工作原理
mdev的基本原理: a、执行mdev -s命令时,mdev扫描/sys/block(块设备保存在/sys/block目录下,内核2.6.25版本以后,块设备也保存在/sys /class/block目录下。mdev扫描/sys/block是为了实现向后兼容)和/sys/class两个目录下的dev属性文件,从该dev 属性文件中获取到设备编号(dev属性文件以"major:m转载 2017-05-19 16:39:51 · 381 阅读 · 0 评论 -
class.c 添加中文注释(1)
/* * class.c - basic device class management * * Copyright (c) 2002-3 Patrick Mochel * Copyright (c) 2002-3 Open Source Development Labs * Copyright (c) 2003-2004 Greg Kroah-Hartman * Copyright转载 2017-06-07 15:18:59 · 474 阅读 · 0 评论 -
class.c 添加中文注释(2)
/* Class Device Stuff */int class_device_create_file(struct class_device * class_dev, const struct class_device_attribute * attr){ int error = -EINVAL; /* [cgw]: class转载 2017-06-07 15:19:58 · 310 阅读 · 0 评论 -
class.c 添加中文注释(3)
int class_device_register(struct class_device *class_dev){ /* [cgw]: 初始化一个struct class_device */ class_device_initialize(class_dev); /* [cgw]: 添加一个struct class_device */ return class_转载 2017-06-07 15:20:55 · 272 阅读 · 0 评论 -
resource
linux采用struct resource结构体来描述一个挂接在cpu总线上的设备资源(32位cpu的总线地址范围是0~4G/usr/src/linux-2.6.21.5/include/linux/ioport.hstruct resource { resource_size_t start; resource_size_t end; cons原创 2016-10-13 14:59:21 · 584 阅读 · 0 评论