linux设备驱动模型
xie0812
这个作者很懒,什么都没留下…
展开
-
Linux设备模型(1)_基本概念
1. 前言在“Linux内核的整体架构”中,蜗蜗有提到,由于Linux支持世界上几乎所有的、不同功能的硬件设备(这是Linux的优点),导致Linux内核中有一半的代码是设备驱动,而且随着硬件的快速升级换代,设备驱动的代码量也在快速增长。个人意见,这种现象打破了“简洁就是美”的理念,是丑陋的。它导致Linux内核看上去非常臃肿、杂乱、不易维护。但蜗蜗也知道,这不是Linux的错,Linux是一转载 2016-05-16 14:02:34 · 282 阅读 · 0 评论 -
Linux那些事儿之我是Sysfs(13)举例四:sysfs读入普通文件内容
跟上回一样,我用这个小程序来读#include stdio.h>#include fcntl.h>#include unistd.h>int main(){ char *name = "/sys/bus/ldd/version"; char buf[500]; int fd;转载 2016-05-17 17:50:34 · 359 阅读 · 0 评论 -
Linux那些事儿之我是Sysfs(final)后记
关于sysfs的介绍就到这里。文笔不如大哥甲幽默,希望我写的这些咚咚对大家有所启发,帮助。把东西看懂是一回事,写出来又是另一回事。写到想吐血...但是写得过程中,可以使自己的理解更深一层,更有逻辑。授人以鱼不如授人以渔,学习linux内核最好的方法就是Reading the f**king source code。 推荐用source insight看代码,外加KDB调试,挺方便的。另外,除了li转载 2016-05-17 17:51:37 · 245 阅读 · 0 评论 -
走马观花: Linux 系统调用 open 七日游(一)
友情提示:您需要一个 kernel 3.15.6,下载地址:https://www.kernel.org/pub/linux/kernel/v3.0/linux-3.15.6.tar.xz 我们将以 Linux 系统调用 open 为主线,参观游览 Kernel 的文件系统,一窥 Kernel 文件系统精妙的设计和严谨的实现。因受篇幅限制,我们此次观光只涉足 Kernel 的虚拟文件系统转载 2016-05-23 17:56:25 · 566 阅读 · 0 评论 -
走马观花: Linux 系统调用 open 七日游(二)
接着昨日的旅程,我们应该开始处理具体的子路径了:【fs/namei.c】sys_open->do_sys_open->do_filp_open->path_openat->link_path_walk点击(此处)折叠或打开 ... err = walk_component(nd,&next, LOOKUP_FOLLOW);转载 2016-05-23 17:57:55 · 1697 阅读 · 0 评论 -
走马观花: Linux 系统调用 open 七日游(三)
接着上回,当对“.”和“..”处理完成后就直接返回进入下一个子路径循环了,但如果当前子路径不是“.”或“..”呢?【fs/namei.c】sys_open > do_sys_open >do_filp_open >path_openat >link_path_walk > walk_component点击(此处)折叠或打开 ... e转载 2016-05-23 17:58:48 · 1569 阅读 · 0 评论 -
走马观花: Linux 系统调用 open 七日游(四)
现在,我们的“路径行走”只剩下最后一个小问题需要处理了——符号链接。【fs/namei.c】sys_open > do_sys_open >do_filp_open >path_openat >link_path_walk点击(此处)折叠或打开 ... if (err){ err = nested转载 2016-05-23 17:59:44 · 1271 阅读 · 0 评论 -
走马观花: Linux 系统调用 open 七日游(五)
回到 path_openat:【fs/namei.c】sys_open > do_sys_open >do_filp_open >path_openat点击(此处)折叠或打开 ... error = do_last(nd,&path, file, op,&opened, pathname); while (unlikely(转载 2016-05-23 18:00:44 · 1842 阅读 · 0 评论 -
走马观花: Linux 系统调用 open 七日游(六)
还记得在上一个场景中,build_open_flags 里面有一个对标志位 O_PATH 的判断么?现在我们就来看看这个标志位是干啥的:【场景二】open(pathname, O_PATH) 这个 O_PATH 似乎是不常用的,咱们先看看它的使用说明:【open(2)】http://man7.org/linux/man-pages/man2/open.2.htmlO_转载 2016-05-23 18:01:47 · 1338 阅读 · 0 评论 -
走马观花: Linux 系统调用 open 七日游(七)
【场景三】open(pathname, O_WRONLY | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR) 在这个场景中我们希望创建一个新文件(O_CREAT),并赋予该文件用户可读(S_IRUSR)和用户可写(S_IWUSR)的权限,然后以只写(O_WRONLY)的方式打开这个文件。O_EXCL 在这里保证该文件必须被创建,如果该文件已经存在则失败返回。转载 2016-05-23 18:03:11 · 644 阅读 · 0 评论 -
LINUX热插拔
有 2 个不同角度来看待热插拔: 从内核角度看,热插拔是在硬件、内核和内核驱动之间的交互。 从用户角度看,热插拔是内核和用户空间之间,通过调用用户空间程序(如hotplug、udev 和 mdev)的交互。 当需要通知用户内核发生了某种热插拔事件时,内核才调用这个用户空间程序。 现在的计算机系统,要求 Linux 内核能够在硬件从系统中增删时,可靠稳定地运行。这就对设备驱动作者增...转载 2018-04-07 22:15:41 · 3247 阅读 · 0 评论 -
Linux那些事儿之我是Sysfs(12)举例三:sysfs读入文件夹内容
上回我们说到,如何创建文件夹和文件。我们发现,在sysfs中,inode并不那么重要。这是因为我们所要读写的信息已经就在内存中,并且已经形成了层次结构。我们只需有dentry,就可以dentry->fsdata,就能找到我们读些信息的来源 --- sysfs_dirent结构。这也是我觉得有必要研究 sysfs的原因之一,因为它简单,而且不涉及具体的硬件驱动,但是从这个过程中,我们可以把文件系统转载 2016-05-17 17:49:01 · 647 阅读 · 0 评论 -
Linux那些事儿之我是Sysfs(11)sysfs 创建普通文件
最近彭宇的案件炒得沸沸扬扬,究竟这个社会怎么了?sysfs文件系统中,普通文件对应于kobject中的属性。用sysfs_create_file(),参数如下:sysfs_create_file(struct kobject * kobj, const struct attribute * attr) 传给它的参数是kobj和attr,其中,kobject对应的是文件夹,attribu转载 2016-05-17 17:48:07 · 443 阅读 · 0 评论 -
Linux设备模型(2)_Kobject
1. 前言Kobject是Linux设备模型的基础,也是设备模型中最难理解的一部分(可参考Documentation/kobject.txt的表述)。因此有必要先把它分析清楚。2. 基本概念由“Linux设备模型(1)_基本概念”可知,Linux设备模型的核心是使用Bus、Class、Device、Driver四个核心数据结构,将大量的、不同功能的硬件设备(以及驱动该硬件设备的方法),转载 2016-05-16 14:56:59 · 289 阅读 · 0 评论 -
Linux那些事儿之我是Sysfs(1)sysfs初探
"sysfs is a ram-based filesystem initially based on ramfs. It provides a meansto export kernel data structures, their attributes, and the linkages between them touserspace.” --- documentation/file转载 2016-05-17 17:36:39 · 1156 阅读 · 0 评论 -
Linux那些事儿之我是Sysfs(2)linux设备底层模型
关于linux设备模型网上有一些论述,有些东西我就用了拿来主义,进行了修改和整理。§1 KobjectKobject 是Linux 2.6引入的新的设备管理机制,在内核中由struct kobject表示。通过这个数据结构使所有设备在底层都具有统一的接口,kobject提供基本的对象管理,是构成Linux2.6设备模型的核心结构,它与sysfs文件系统紧密关联,每个在内核中注册的kobje转载 2016-05-17 17:37:38 · 401 阅读 · 0 评论 -
Linux那些事儿之我是Sysfs(3)设备模型上层容器
§1 bus系统中总线由struct bus_type描述,定义为:struct bus_type {char * name; 总线类型的名称struct subsystem subsys; 与该总线相关的subsystemstruct kset drivers; 所有与该总线相关的驱动程序集合struct kset devices; 所有挂接在该总线上的设备集合str转载 2016-05-17 17:38:33 · 372 阅读 · 0 评论 -
Linux那些事儿之我是Sysfs(4)举例一lddbus
对了,你得把ldd3的examples代码下下来。不然没法继续了。接下来我们从例子着手,localhost:/home/XX/examples/lddbus#insmod lddbus.ko此时再看/sys/bus/ 这时就多了一个文件夹ldd。里面的文件构成是这样的/sys/bus/ldd/|--device|--driver`--versionlocalhost转载 2016-05-17 17:39:29 · 401 阅读 · 0 评论 -
Linux那些事儿之我是Sysfs(5)举例二sculld
不妨再把sculld的代码也分析一下,先看初始函数sculld_init() -> register_ldd_driver() ->driver_register() ->bus_add_driver()转载 2016-05-17 17:40:24 · 392 阅读 · 0 评论 -
Linux那些事儿之我是Sysfs(6)文件系统
接下来,我们进入sysfs部分。看看kobject_add()->create_dir()->sysfs_create_dir()bus create file->sysfs create file(). . .这些sysfs函数的内幕。说白了,sysfs就是利用VFS的接口去读写kobject的层次结构,建立起来的文件系统。关于sysfs的内容就在fs/sysfs/下。 ko转载 2016-05-17 17:41:37 · 379 阅读 · 0 评论 -
Linux那些事儿之我是Sysfs(7)dentry与inode
我们在进程中要怎样去描述一个文件呢?我们用目录项(dentry)和索引节点(inode)。它们的定义如下:struct dentry {struct inode *d_inode; /* Where the name belongs to - NULL isstruct dentry转载 2016-05-17 17:42:56 · 516 阅读 · 0 评论 -
Linux那些事儿之我是Sysfs(8)一起散散步-pathwalk
前面说过,只要知道文件的索引节点号,就可以得到那个文件。但是我们在操作文件时,从没听说谁会拿着索引节点号来操作文件,我们只知道文件名而已。它们是如何"和谐"起来的呢?linux把目录也看成一种文件,里面记录着文件名与索引节点号的对应关系。比如在ext3文件系统中,如果文件是一个目录,那么它的内容就是一系列ext3_dir_entry_2的结构struct ext3_dir_entry_2转载 2016-05-17 17:44:00 · 316 阅读 · 0 评论 -
Linux那些事儿之我是Sysfs(9)sysfs文件系统模型
最近Linus炮轰C++,“C++是一种糟糕的(horrible)语言。而且因为有大量不够标准的程序员在使用而使许多真正懂得底层问题,而不会折腾那些白痴‘对象模型’”。牛人就是牛气冲天阿。在fs/sysfs/下面,除去makefile,还有8个文件。其中, bin.c, file.c, dir.c, symblink.c分别代表了在sysfs文件系统中当文件类型为二进制文件,普通文件,目录,符转载 2016-05-17 17:45:34 · 703 阅读 · 0 评论 -
Linux那些事儿之我是Sysfs(10)sysfs 创建目录
每当我们新增一个kobject结构的时候,同时会在/sys下创建一个目录。kobject_add() -> create_dir() -> sysfs_create_dir()此时,我还想重申,kernel代码的更新换代是很快的,我们的目的是懂得代码背后的原理,知识,或曰哲学。我不想讲的太细,因为关于sysfs的部分从2.6.10到现在2.6.22已经改了很多了。但其总体架构没变。写此转载 2016-05-17 17:46:46 · 350 阅读 · 0 评论