- 博客(25)
- 资源 (7)
- 收藏
- 关注
原创 platform总线--从设备找到驱动的过程
platform总线驱动的注册过程,和input设备 驱动注册过程很像,都是逐个遍历设备,检查是否和驱动匹配。 由此联想,platform总线加载设备的过程,应该也是遍历驱动,看是否和设备匹配。2.1 注册设备和总线注册设备使用的是 platform_device_add 函数---/driver/base/Platform.cint platform_device_ad
2017-09-29 11:03:30 496
原创 platform总线--驱动发现设备的过程
总线时物理存在,Linux系统提供了一种简单的总线flatform。 platform 不是物理存在的总线,而是逻辑概念。现代PC机提供了一条根总线(PCI 总线)管理设备,但是有些设备没有挂载在PCI总线上,不能由PCI总线管理,于是Linux内核虚拟了platform总线来统一管理这种设备。1、从驱动发现设备的过程 platform总线虽然简单,但有总线的通用功能。我
2017-09-29 09:30:04 616
原创 字符设备 和 input 设备--input设备架构
input设备本身是一个字符设备,input里面隐藏了众多的设备和驱动,input设备是 设备 和 驱动的封装。5.3.1 注册input设备的驱动 input_register_handler函数,作用是注册input设备的驱动,代码如下:/** * input_register_handler - register a new input handler * @h
2017-09-28 21:43:53 432 1
原创 字符设备 和 input 设备--input设备的注册
5.2 input设备的注册 input是一个虚拟的设备,在Linux系统中,键盘、鼠标、触摸屏 和 游戏杆 都要由input设备统一管理。 input设备是个字符设备,如何注册设备驱动,要 从input设备的初始化函数input_init开始。5.2.1 主从设备号 Linux系统通过设备号来区分不同的设备。设备号由两个部分组成: 主设备号 和 从设备号下面摘录了系统定
2017-09-28 15:52:38 1874
原创 字符设备 和 input 设备--文件如何变成设备
Linux操作系统把设备划分为字符设备和块设备【网络设备是单独一种类型】。 很多情况下把字符设备 当 系统控制的一种手段,通过字符设备的I/O control 函数与内涵 进行交换数据。 实际上,Linux内核系统很多时候是把字符设备当做一个框架来使用。5.1 文件如何变成设备 回顾aufs系统,通过aufs_get_inode为每个文件创建它的inode对象。对文件和目录
2017-09-28 09:58:23 870
原创 kmem_cache_create函数的源码分析
kmem_cache_create函数的源码如下:/** * kmem_cache_create - Create a cache. * @name: A string which is used in /proc/slabinfo to identify this cache. * @size: The size of objects to be created in this c
2017-09-27 15:44:26 1592 3
原创 sysfs系统--文件和目录的创建
sysfs是Linux的特殊文件系统,这个文件系统主要作用是在用户态展示设备的信息。 Linux计算机系统中,可以在根目录下面找到sys目录,这个目录就是利用sysfs文件系统进行创建的。 打开sys目录,可以看到设备的分类显示,如下所示:yxf@yxf-PC:sys$ lsblock bus class dev devices firmware fs hyper
2017-09-27 13:55:19 1307
原创 设备的概念和总体框架
整理资料,便于以后阅读 CPU、内存 和 设备 是计算机最重要的三个基础。 同常显卡网卡声卡等设备,都是插入计算机系统的PCI总线插槽,安装驱动之后,应用程序可以通过文件系统打开和读写设备文件。 这个过程可以通过3个层面进行理解1)设备本身的特性2)总线和操作系统读设备的管理3)设备的驱动层后两个将在8章重点分析,67也有涉及; 设备特性是理解设备的基础,也
2017-09-27 10:10:09 412
原创 文件打开的代码分析
前面的代码分析,源文件系统的vfsmount 对象已经链接到目的文件系统的vfsmount对象,同时链接到全局hash表;1、sys_open2、do_filp_open函数3、open_namei函数4、 path_lookup_create 和 _path_lookup_intent_open 函数5、do_path_lookup函数
2017-09-27 10:03:24 524
原创 文件系统的挂载过程
系统本身也有一个文件目录树,如果把aufs创建的dentry树绑定到系统本身的dentry树并建立链接,就可以从原先的系统树 遍历到aufs的dentry树--------这就是mount过程。
2017-09-27 10:00:11 444
原创 aufs简单的文件系统
#include #include #include #include #include #include #deifne AUFS_MAGIC 0x64668735static struct vfsmount *aufs_mount;static int aufs_mount_count;static struct inode *aufs_g
2017-09-25 11:13:46 429
原创 文件系统---代码层次深入分析文件系统
文件系统对用户来说,最重要的就是创建目录、创建文件、打开文件 和 文件读写。 对通常的硬盘文件系统来说,涉及硬盘的读写和硬盘空间管理,从读写文件系统层一直到通用设备层再到硬盘驱动。为了简化,我们给出最简单文件系统,通过这个例子导入文件系统的概念。通过代码分析,逐层深入内核,了解架构:1、简单的文件系统aufs啊啊啊啊啊啊啊啊啊2、文件系统如何管理目录和
2017-09-18 13:47:49 562
原创 文件系统--文件系统的架构
VFS是具体文件系统的抽象,依靠超级块、inode、dentry以及文件这些结构来发挥作用,文件系统的架构就体现在这些结构的使用方式中。1、超级块作用分析 1) 2)所有的dentry都指向一个dentry_hashtable dentry_hashtable是一个树组,每一个树组成员都是hash链表数据结构。 这里是
2017-09-15 15:39:42 1453
原创 文件系统---文件系统的基本概念
VFSlinux内核通过虚拟文件系统(VFS)管理文件系统;VFS是linux内核文件系统的一个极其重要的基础设施,VFS为 所有的文件系统提供统一的接口,对每个文件系统的访问都需要通过VFS定义的接口来实现。同时,VFS也是一个极其重要的架构,所有的linux文件系统都必须按照VFS定义的方式来实现;VFS存在于内存中,将硬盘上的文件系统抽象到内存中。VFS定义了几个重要结构:
2017-09-13 01:19:51 1211
原创 内核---内核应用层
内核应用层---是建立在基础层之上的功能性系统。在本书中,内核应用层指的是文件系统、设备、驱动以及网络。内核代码虽然庞杂,但是核心的基础层并不庞大,主要是应用层占据了大部分代码。下图展示了内核各部分的代码统计数据:内核代码的统计数据TYEPCOUNTPER CENTDriver330108151.6Architectu
2017-09-12 20:20:16 415
原创 内核---从Linux内核源码结构纵览内核
从Linux内核源码结构纵览内核---Architecture的子目录是各个CPU的架构的名字,为各种不同的CPU架构服务。虽然总体量很大,但对于关注x86和ARM来说,也只占很小一部分;---driver目录分类为各种不同的设备驱动,而虽然设备驱动五花八门,但是他们的结构是高度相似的,读者可以根据工作需要阅读分析驱动代码。在理解Linux驱动架构的基础上,这个工作具有高度的重复性,可
2017-09-12 10:47:51 224
原创 内核---内核基础层的数据结构
内核使用的数据结构有 双向链表、 hash链表 和 单项链表; 另外 红黑树 和 基树(redix树) 也是内核使用的数据结构。 实际上,这也是程序代码中通常使用的数据结构。container是Linux中很重要的一个概念,实现container能实现对象的 封装。代码如下:#define container_of(ptr, type, member)({const typ
2017-09-12 10:00:17 577
原创 原子变量
原子变量提供了一种 原子的、 不可中断 的操作。如下所示:atomic mapped;内核提供了一系列原子变量操作函数,如下所示:*atomic_add: ------加一个整数到原子变量*atomic_sub: ------从原子变量减一个整数*atomic_set: ------设置原子变量的值*atomic_read: ------读取原子变量的数值
2017-09-11 11:22:32 433
原创 内核---信号量
内核信号量和自旋锁类似,作用也是保护数据。不同之处是,进程获取内核信号量嘚瑟时候,如果不能获取,则进程进入睡眠状态。参考代码:down(&dev->sem);up(&dev->sem);内核信号量和自旋锁的不同:1、内核信号量 不能用在 中断处理函数 和 tasklet 等不可睡眠的场景2、深层次的原因:Linux内核以进程为单位调度, 如果在中断上下文睡眠,中断不能被
2017-09-11 11:16:48 203
原创 内核---自旋锁
自旋锁用于多处理器环境下保护数据。如果内核发现数据未锁,就获取锁并运行;如果数据被锁,就一直旋转【反复执行一条指令】。自旋锁在单处理器环境下(非抢占式内核)下,不起作用 ;单处理器抢占式内核的情况下,自旋锁起到禁止抢占的作用。注释:内核抢占(可抢占式内核):即当进程位于内核空间时,有一个更高优先级的任务出现时,如果当前内核允许抢占,则可以将当前任务挂起,执行优先级更高的进程。
2017-09-08 18:51:41 230
原创 内核基础层提供的服务---软中断和tasklet 、 工作队列
工作队列和tasklet相似,也是一种延缓执行的机制。不同之处是工作队列有自己的进程上下文,所有工作队列都可以睡眠,也可以被调度【tasklet不可睡眠】。以下代码是工作队列的例子:工作队列很简单,s
2017-09-07 19:07:39 353
原创 内核基础层提供的服务---内核中使用内存
Linux内核把对应中断的软件执行代码分拆为两个部分:和硬件关系紧密,这部分代码必须关闭中断来执行,以免被后面的中断打断,影响后面代码的执行---这部分代码在中断的上下文中执行;另一部分和硬件关系不紧密,可以打开中断执行,这部分代码放在软中断上下文执行;这种划分是一种初略的划分:中断是计算机系统的宝贵资源,关闭中断意味着系统不响应中断,代价过高。为了避免关闭中断的不利影响,即使在中
2017-09-07 19:01:55 252
原创 androidWear/device/intel/spectralite/device.mk和androidWear/device/intel/spectralite/init.spectralite
可以进行拷贝文件:androidWear/device/intel/spectralite/device.mk# Unified buildinclude device/google/clockwork/build/clockwork_unified_top_config.mkPRODUCT_COPY_FILES += \ device/intel/robby/ueventd
2017-09-04 19:14:06 399
原创 android.mk
Android.mk时都会有一句include $(CLEAR_VARS)这个语句的作用就是清除许多LOCAL_XXX这一类型的变量,以免干扰自己模块的LOCAL_xxx,这也就说明了Android.mk文件的变量都是全局的如果我们要编译整个Android系统,直接在Android源码的根目录下使用make命令执行根目录下的makefile文件,该文件就会搜索Android文件中所
2017-09-04 19:06:23 250
原创 Android系统的ko模块加载
1、在Android源码的Android/device路径下可以找到相关项目的文件夹,包括intel、moto、huawei、lge等。选择自己选择的项目的处理器芯片的文件目录(forexample : intel),再在下面选择项目:Android/device/intel/ spectraliteAndroid/device/intel/ spectralite-kernel
2017-09-04 17:09:36 5089
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人