
Linux
文章平均质量分 84
AndroidBBC
这个作者很懒,什么都没留下…
展开
-
open流程分析
open系统调用在内核中的流程分析 分三步走,力求讲得比较清楚。 一)驱动注册open函数都干了些什么? register_chrdev -> cdev_add -> kobj_map file: fs/char_dev.c int register_chrdev(unsigned ...转载 2016-08-25 16:09:28 · 846 阅读 · 0 评论 -
linux内核组件分析之--设备驱动模型之bus
http://blog.youkuaiyun.com/bingqingsuimeng/article/details/7929225 前面我们分析了设备驱动模型中的device和driver,device和driver本来是不相关的东西,只因为bus的存在,才被联系到了一起。本节就来看看设备驱动模型中起枢纽作用的bus。本节的头文件在include/linux/device.h和drivers/...转载 2016-04-15 11:16:17 · 1045 阅读 · 0 评论 -
linux内核组件分析之---设备驱动模型之driver
http://blog.youkuaiyun.com/bingqingsuimeng/article/details/7929219 上节我们分析设备驱动模型中的device,主要是drivers/base/core.c,可以说是代码量最大的一个文件。本节要分析的驱动driver,就要相对简单很多。原因也很简单,对于driver,我们能定义的公共部分实在不多,能再sysfs中表达的也很少。本节的...转载 2016-04-15 11:13:52 · 1247 阅读 · 0 评论 -
linux内核部件分析之----设备驱动模型之device
http://blog.youkuaiyun.com/bingqingsuimeng/article/details/7929211linux的设备驱动模型,是建立在sysfs和kobject之上的,由总线、设备、驱动、类所组成的关系结构。从本节开始,我们将对linux这一设备驱动模型进行深入分析。 头文件是include/linux/device.h,实现在drivers/base目录中。本节...转载 2016-04-15 11:12:12 · 1420 阅读 · 0 评论 -
在驱动模块初始化函数中实现设备节点的自动创建
我们写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点,实际上Linux内核为我们提供了一组函数,可以用来在模块加载的时候自动在/dev目录下创建相应设备节点,并在卸载模块时删除该节点,当然前提条件是用户空间移植了udev。内核中定义了struct class结构体,一个struct class结构体类型变量对应一个类,内核同时提供了class_create(…)函...原创 2015-09-16 16:41:27 · 515 阅读 · 0 评论 -
linux 内核移植和根文件系统的制作
http://www.cnblogs.com/hnrainll/archive/2011/06/09/2076214.html1.1 Linux内核基础知识在动手进行Linux内核移植之前,非常有必要对Linux内核进行一定的了解,下面从Linux内核的版本和分类说起。1.1.1 Linux版本Linux内核的版本号可以从源代码的顶层目录下的Makefile中看到,比如2.6.29.1...转载 2016-03-23 11:23:26 · 705 阅读 · 0 评论 -
linux-file_operations结构体分析记录
struct module *owner第一个 file_operations 成员根本不是一个操作; 它是一个指向拥有这个结构的模块的指针. 这个成员用来在它的操作还在被使用时阻止模块被卸载. 几乎所有时间中, 它被简单初始化为 THIS_MODULE, 一个在 <linux/module.h> 中定义的宏.loff_t (*llseek) (struct file *, l...原创 2016-03-23 11:35:58 · 519 阅读 · 0 评论 -
Linux 内核开发之网络设备驱动浅谈
转载自:http://www.ibm.com/developerworks/cn/linux/l-cn-networkdriver/本文介绍了网络设备的基本概念,并从 Linux 内核的角度出发,介绍了网络设备驱动的开发方法和开发中的注意事项。 网络设备介绍 网络设备是计算机体系结构中必不可少的一部分,处理器如果想与外界通信,通常都会选择网络设备作为通信接口。众所周知,在 OS...转载 2015-09-14 16:01:16 · 615 阅读 · 0 评论 -
linux库文件相关记录
linux下有两种库:动态库和静态库(共享库)二者的不同点在于代码被载入的时刻不同。静态库的代码在编译过程中已经被载入可执行程序,因此体积比较大。动态库(共享库)的代码在可执行程序运行时才载入内存,在编译过程中仅简单的引用,因此代码体积比较小。静态库和动态库的最大区别,静态情况下,把库直接加载到程序中,而动态库链接的时候,它只是保留接口,将动态库与程序代码独立,这样就可以提高代码的...原创 2016-03-29 15:21:47 · 443 阅读 · 0 评论 -
uboot目录结构分析
http://blog.youkuaiyun.com/ccccdddxxx/article/details/6800135 1、版本号变化:2008年8月及以前,按版本号命名:u-boot-1.3.4.tar.bz2(2008年8月更新)2008年8月以后均按日期命名。目前最新版本:u-boot-2011.06.tar.bz2(2011年6月更新)2、目录结构变化:u-boot目...转载 2016-03-23 11:02:44 · 3056 阅读 · 0 评论 -
linux内核组件分析之---设备驱动模型之device-driver
http://blog.youkuaiyun.com/bingqingsuimeng/article/details/7929230 前面我们分析了device、driver、bus三种类型,主要是三者的注册与注销,在sysfs中的目录与属性文件创建等内容。本节就来详细分析下,在设备注册到总线上时,总线是如何为其寻找对应的驱动的;在驱动注册到总线上时,总线又是如何为其寻找对应的设备的。本节的...转载 2016-04-15 11:17:43 · 1273 阅读 · 0 评论 -
linux内核部件分析之——设备驱动模型之class
http://blog.youkuaiyun.com/bingqingsuimeng/article/details/7929283 前面看过了设备驱动模型中的bus、device、driver,这三种都是有迹可循的。其中bus代表实际的总线,device代表实际的设备和接口,而driver则对应存在的驱动。但本节要介绍的class,是设备类,完全是抽象出来的概念,没有对应的实体。所谓设备类,是...转载 2016-04-15 11:19:08 · 581 阅读 · 0 评论 -
open系统调用
open()系统调用的服务例程为sys_open()函数,该函数接收的参数为:要打开的文件的路径名filename、访问模式的一些标志flags,以及如果该文件被创建所需要的许可位掩码mode。如果该系统调用成功,就返回一个文件描述符,也就是指向文件对象的指针数组current-> files-> fd_array或者current-> files-> fdtable.fd...转载 2016-08-25 15:55:56 · 2337 阅读 · 0 评论 -
没有公钥,无法验证下列签名
新安装的Ubuntu在使用sudo apt-get update更新源码的时候出现如下错误:[plain] view plain copy print?W: GPG 错误:http://ppa.launchpad.net precise Release: 由于没有公钥,无法验证下列签名: NO_PUBKEY 3EE66BD3F599ACE3 W: GPG 错误:http:...转载 2016-08-04 09:39:02 · 1581 阅读 · 0 评论 -
常用 Git 命令清单
一般来说,日常使用只要记住下图6个命令,就可以了。但是熟练使用,恐怕要记住60~100个命令。下面是我整理的常用 Git 命令清单。几个专用名词的译名如下。Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库一、新建代码库# 在当前目录新建一个Git代码库$ git init...转载 2016-08-03 15:12:05 · 334 阅读 · 0 评论 -
关于container_of和list_for_each_entry 及其相关函数的分析
Linux代码看的比较多了,经常会遇到container_of和list_for_each_entry,特别是list_for_each_entry比较多,因为Linux经常用到链表,虽然知道这些函数的大概意思,但一旦出现一个类似的函数比如list_for_each_entry_safe就又会感到头大,所以下定决心分析总结一下这些函数的用法,以后再看到这些面孔的时候也会轻松很多,读Li...转载 2016-07-22 15:55:51 · 494 阅读 · 0 评论 -
linux内核部件之---设备驱动模型的基石kobject
之前我们分析了引用计数kref,总结了sysfs提供的API,并翻译了介绍kobject原理及用法的文档。应该说准备工作做得足够多,kobject的实现怎么都可以看懂了,甚至只需要总结下API就行了。可我还是决定把kobject的实现代码从头分析一遍。一是因为kobject的代码很重要,会在设备驱动模型代码中无数次被用到,如果不熟悉的话可以说是举步维艰。二是为了熟悉linux的编码风格,为以后分析...转载 2016-04-15 11:25:23 · 1166 阅读 · 0 评论 -
linux内核部件之--记录生命周期的kref
kref是一个引用计数器,它被嵌套进其它的结构中,记录所嵌套结构的引用计数,并在计数清零时调用相应的清理函数。kref的原理和实现都非常简单,但要想用好却不容易,或者说kref被创建就是为了跟踪复杂情况下地结构引用销毁情况。所以这里先介绍kref的实现,再介绍其使用规则。kref的头文件在include/linux/kref.h,实现在lib/kref.c。闲话少说,上代码。struct ...转载 2016-04-15 11:24:36 · 717 阅读 · 0 评论 -
linux内核部件之---原子性操作atomic_t
在任何处理器平台下,都会有一些原子性操作,供操作系统使用,我们这里只讲x86下面的。在单处理器情况下,每条指令的执行都是原子性的,但在多处理器情况下,只有那些单独的读操作或写操作才是原子性的。为了弥补这一缺点,x86提供了附加的lock前缀,使带lock前缀的读修改写指令也能原子性执行。带lock前缀的指令在操作时会锁住总线,使自身的执行即使在多处理器间也是原子性执行的。xchg指令不带lock前...转载 2016-04-15 11:23:49 · 4575 阅读 · 0 评论 -
linux内核部件--链表之klist
前面我们说到过list_head,这是linux中通用的链表形式,双向循环链表,功能强大,实现简单优雅。可如果您认为list_head就是链表的极致,应该在linux链表界一统天下,那可就错了。据我所知,linux内核代码中至少还有两种链表能占有一席之地。一种就是hlist,一种就是本节要介绍的klist。虽然三者不同,但hlist和klist都可以看成是从list_head中发展出来的,用于特殊...转载 2016-04-15 11:22:55 · 575 阅读 · 0 评论 -
linux内核部件--通用双向链表list
在linux内核中,有一种通用的双向循环链表,构成了各种队列的基础。链表的结构定义和相关函数均在include/linux/list.h中,下面就来全面的介绍这一链表的各种API。struct list_head { struct list_head *next, *prev; }; 这是链表的元素结构。因为是循环链表,表头和表中节点都是这一结构。有prev和next两...转载 2016-04-15 11:22:10 · 581 阅读 · 0 评论 -
Netfilter的原理和实现浅析
关于Netfilter入门级概括性使用信息记录 转载自:http://blog.youkuaiyun.com/zhangskd/article/details/22678659 A. 概念描述 Netfilter为多种网络协议(IPv4、IPv6、ARP等)各提供了一套钩子函数。在IPv4中定义了5个钩子函数,这些钩子函数在数据包流经协议栈的5个关键点被调用。这就像有5个钓鱼台,在每...转载 2015-09-15 15:33:12 · 2348 阅读 · 0 评论