自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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 615

原创 字符设备 和 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 1873

原创 字符设备 和 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 411

原创 文件打开的代码分析

前面的代码分析,源文件系统的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 443

原创 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 1210

原创 内核---内核应用层

内核应用层---是建立在基础层之上的功能性系统。在本书中,内核应用层指的是文件系统、设备、驱动以及网络。内核代码虽然庞杂,但是核心的基础层并不庞大,主要是应用层占据了大部分代码。下图展示了内核各部分的代码统计数据:内核代码的统计数据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

Android-wifi-BT

Android-wifi-BT

2017-06-14

ctags安装包

ctags安装包

2017-06-08

stm32之SPI_FLASH处理

stm32的flash处理

2017-02-10

USB枚举过程详细分析

USB启过程中硬件上电、控制传输获取数据

2017-02-10

USB描述符的使用

一个找到的百合电子的开源项目Easy USB 51 Programer的一个USB描述符的讲解

2017-02-10

USB基础知识概论

USB2.0协议有一些配置的基本介绍,这个文档有一些基本协议设置的说明

2016-09-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除