现在位置: 首页 > techbulo发表的所有文章
  • 06月
  • 19日
技术文章 ⁄ 共 4730字 Linux那些事儿之我是Sysfs(4)举例一lddbus已关闭评论 ⁄ 阅读 1,727 次
接下来我们从例子着手 localhost:/home/XX/examples/lddbus#insmod lddbus.ko 此时再看/sys/bus/ 这时就多了一个文件夹ldd。里面的文件构成是这样的 /sys/bus/ldd/ |--device |--driver `--version localhost:/sys/bus/ldd#cat version $Revision: 1.9$ 这表示系统中多了一种名叫ldd的总线类型。同时再看/sys/device/,也多出来一个ldd0的文件夹。这表示系统中多了一个名叫ldd0的硬件。 在lddbus.c中, 定义了一个总线和硬件类型 struct bus_type ldd_bus_type = { .name = "ldd", .match = ld......
阅读全文
  • 06月
  • 18日
技术文章 ⁄ 共 2364字 Linux那些事儿之我是Sysfs(3)设备模型上层容器已关闭评论 ⁄ 阅读 819 次
§1 bus 系统中总线由struct bus_type描述,定义为: struct bus_type { char * name; 总线类型的名称 struct subsystem subsys; 与该总线相关的subsystem struct kset drivers; 所有与该总线相关的驱动程序集合 struct kset devices; 所有挂接在该总线上的设备集合 struct bus attribute * bus_attrs; 总线属性 struct device attribute * dev_attrs; 设备属性 struct driver attribute * drv_attrs; 驱动程序属性 int (*match)(struct device * dev, struct device_driver * drv); int (*hotplug) (struct device *dev,......
阅读全文
  • 06月
  • 17日
技术文章 ⁄ 共 2735字 Linux 关于动态链接库以及静态链接库的一些概念已关闭评论 ⁄ 阅读 1,339 次
库简介 库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀。例如:libhello.so libhello.a 为了在同一系统中使用不同版本的库,可以在库文件名后加上版本号为后缀,例如: libhello.so.1.0,由于程序连接默认以.so为文件后缀名。所以为了使用这些库,通常使用建立符号连接的方式。 ln -s libhello.so.1.0 libhello.so.1 ln -s libhello.so.1 libhello.so 使用库  当 要使用静态的程序库时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,所以一旦连接成功,静态程序库也就不再需......
阅读全文
  • 06月
  • 16日
技术文章 ⁄ 共 3879字 Linux那些事儿之我是Sysfs(2)linux设备底层模型已关闭评论 ⁄ 阅读 1,292 次
关于linux设备模型网上有一些论述,有些东西我就用了拿来主义,进行了修改和整理。 §1 Kobject Kobject 是Linux 2.6引入的新的设备管理机制,在内核中由struct kobject表示。通过这个数据结构使所有设备在底层都具有统一的接口,kobject提供基本的对象管理,是构成Linux2.6设备模型的核心结构,它与sysfs文件系统紧密关联,每个在内核中注册的kobject对象都对应于sysfs文件系统中的一个目录。Kobject是组成设备模型的基本结构。类似于C++中的基类,它嵌入于更大的对象的对象中--所谓的容器--用来描述设备模型的组件。如bus,devices,......
阅读全文
  • 06月
  • 15日
技术文章 ⁄ 共 1187字 Linux那些事儿之我是Sysfs(1)sysfs初探已关闭评论 ⁄ 阅读 1,649 次
"sysfs is a ram-based filesystem initially based on ramfs. It provides a means to export kernel data structures, their attributes, and the linkages between them to userspace.” --- documentation/filesystems/sysfs.txt 可以先把documentation/filesystems/sysfs.txt读一遍。文档这种东西,真正读起来就嫌少了。Sysfs文件系统是一个类似于proc文件系统的特殊文件系统,用于将系统中的设备组织成层次结构,并向用户模式程序提供详细的内核数据结构信息。 去/sys看一看, localhost:/sys#ls /sys/ block/ b......
阅读全文
  • 06月
  • 14日
驱动开发 ⁄ 共 2484字 设备驱动基础1:设备模型之总线,驱动,设备已关闭评论 ⁄ 阅读 1,538 次
Kobject,kset 是设备模型的基本结构体,设备模型使用这两个结构体来完成设备的层次关系,但在实际的设备驱动编写中,我们基本上用不到kobject,kset这些结构 体,是因为这些结构体又被嵌入到更大的结构体中,原因在于kobject,kset结构体只能表征设备的层次关系,但是一个设备的驱动,并不是简单的一个 层次关系而已,因此,必需要把kobject,kset结构体嵌入到更大的结构体中,使用kobject,kset来表征层次关系,用其他的成员表示设备 驱动的具体功能。 在设备模型中,我们将看到,设备驱动主要是由总线,驱动程序,设备三个部分构成......
阅读全文
  • 06月
  • 13日
驱动开发 ⁄ 共 1628字 设备驱动基础0:设备模型之kobject,kset及其关系已关闭评论 ⁄ 阅读 1,972 次
Linux2.6以后的设备驱动,都是在设备模型的基础上构建的,因此,要编写linux下的设备驱动程序,不论是usb设备,pci设备等,都需要了解设备模型。 设备模型的基础结构体主要是kobject,kset这两个结构体: struct kobject { char * k_name; char name[KOBJ_NAME_LEN]; struct kref kref; struct list_head entry; struct kobject * parent; struct kset * kset; struct kobj_type * ktype; struct dentry * dentry; }; struct kset { struct subsystem * subsys; struct kobj_type * ktype; struct lis......
阅读全文
  • 06月
  • 12日
技术文章 ⁄ 共 6430字 关于linux设备模型kobject,kset,ktype已关闭评论 ⁄ 阅读 2,186 次
kobject 1 Kobject 1.1 简介 Kobject 是Linux 2.6 引入的新的设备管理机制,在内核中由struct kobject数据结构进行描述通过这个数据结构使所有设备在底层都具有统一的接口,kobject提供基本的对象管 理,是构成Linux2.6设备模型的核心结构,它与sysfs文件系统紧密关联,每个在内核中注 册的kobject对象都对应于sysfs文件系统中的一个目录。Kobject是组成设备模型的基本结 构。但是,它比较低调,从不单独使用,都是嵌套在别的数据结构中。类似于C++中的基 类,它嵌入于更大的对象的对象中–所谓的容器–用来描......
阅读全文
  • 05月
  • 23日
技术文章 ⁄ 共 2191字 Dijkstra算法(单源最短路径)已关闭评论 ⁄ 阅读 1,584 次
单源最短路径问题,即在图中求出给定顶点到其它任一顶点的最短路径。在弄清楚如何求算单源最短路径问题之前,必须弄清楚最短路径的最优子结构性质。 一.最短路径的最优子结构性质 该性质描述为:如果P(i,j)={Vi....Vk..Vs...Vj}是从顶点i到j的最短路径,k和s是这条路径上的一个中间顶点,那么P(k,s)必定是从k到s的最短路径。下面证明该性质的正确性。 假设P(i,j)={Vi....Vk..Vs...Vj}是从顶点i到j的最短路径,则有P(i,j)=P(i,k)+P(k,s)+P(s,j)。而P(k,s)不是从k到s的最短距离,那么必定存在另一条从k到s的最短路径P'(k,s),那么P'(i......
阅读全文
  • 05月
  • 22日
技术文章 ⁄ 共 2960字 二叉树的递归遍历(包括递归和非递归)已关闭评论 ⁄ 阅读 807 次
二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历中,前序和中序遍历的非递归算法都很容易实现,非递归后序遍历实现起来相对来说要难一点。 一.前序遍历 前序遍历按照“根结点-左孩子-右孩子”的顺序进行访问。 1.递归实现 void preOrder1(BinTree *root) //递归前序遍历 ......
阅读全文
  • 05月
  • 15日
技术文章 ⁄ 共 798字 Linux下printf输出字符串的颜色已关闭评论 ⁄ 阅读 1,696 次
格式: printf("\033[字背景颜色;字体颜色m字符串\033[0m" ); printf("\033[41;32m字体背景是红色,字是绿色\033[0m\n"); 41是字背景颜色, 32是字体的颜色, 字体背景是红色,字是绿色是字符串.  后面的\033[0m是控制码. 颜色代码: QUOTE: 字背景颜色范围: 40--49                   字颜色: 30--39 40: 黑                           30: 黑 41: 红                           31: 红 42: 绿                           32: 绿 43: 黄                           33: 黄 44: 蓝                  ......
阅读全文
  • 05月
  • 14日
技术文章 ⁄ 共 1593字 linux exec和文件描述符妙用技巧已关闭评论 ⁄ 阅读 1,503 次
对于 Linux 而言,所有对设备和文件的操作都使用文件描述符来进行的。 文件描述符是一个非负的整数,它是一个索引值,并指向内核中每个进程打开文件的记录表。 当打开一个现存文件或创建一个新文件时,内核就向进程返回一个文件描述符;当需要读写文件时,也需要把文件描述符作为参数传递给相应的函数。 通常,一个进程启动时,都会打开 3 个文件:标准输入、标准输出和标准出错处理。这3 个文件分别对应文件描述符为0、1和2也就是宏替换 STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO。 查看和设置LINUX文件描述符数 ulimit -n ulimi......
阅读全文
×