自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(393)
  • 资源 (7)
  • 收藏
  • 关注

原创 really_probe()函数

static int really_probe(struct device *dev, struct device_driver *drv){ int ret = -EPROBE_DEFER; int local_trigger_count = atomic_read(&deferred_trigger_count); bool test_...

2019-07-09 17:45:10 1955

转载 理解 (*(void (*)())0)()

1、铺垫在分析上面的语句前,我们先从简单的入手。先来区别和理解下面这两个定义。float  *g();   和 float  (*h) ();直接上答案:由于( )结合的优先级别高于*,所以g先和后面的( )结合,构成一个函数,该函数的返回值是一个指向float 数的指针。同理,h是一个函数指针,它所指向的函数的返回值是一个浮点数。当我们知道如何声明一个给定类型的变量,那么不难得出...

2018-10-02 21:21:46 2995

原创 关于__init、__initdata和__exit、__exitdata的学习笔记

__init、__initdata和__exit、__exitdata介绍定义位于<linux/init.h>:这些宏定义的作用是告诉编译器将这些函数或者数据放入相应的section中,而在模块加载的阶段,.ko文件中的代码和数据的加载区域是根据section来加载的。比如:如果函数的定义中带有__init,那么这个函数的所有代码会被放入.init.text的section...

2018-09-30 11:21:10 2504

原创 kernel的启动过程,head.S到main.c

kernel的启动过程,head.S到main.c:head.S:head.S主要做的事情是处理u-boot传入的参数,具体如下:判断是否支持这个CPU 判断是否支持这个单板(对比机器ID 建立一级页表 使能MMU 跳到start_kernel函数下面具体分析这个流程:ENTRY(stext) setmode PSR_F_BIT | PSR_I_BIT | SVC_M...

2018-09-29 20:40:06 757

原创 struct list_head/LIST_HEAD以及LIST_HEAD_INIT/INIT_LIST_HEAD

仅仅为struct list_head相关的两个宏:#define LIST_HEAD_INIT(name) { &(name), &(name) }#define LIST_HEAD(name) \ struct list_head name = LIST_HEAD_INIT(name)static inline void INIT_LIST_HEAD...

2018-09-27 14:26:09 1829

原创 USB设备插拔检测

1)hub初始化时hub_wq = alloc_workqueue(“usb_hub_wq”, WQ_FREEZABLE, 0);INIT_WORK(&hub->events, hub_event)queue_work(hub_wq, &hub->events)–alloc_workqueue(“usb_hub_wq”, WQ_FREEZABLE, 0)此函数...

2018-09-21 13:33:07 738

原创 USB设备插拔检测

1)hub初始化时hub_wq = alloc_workqueue(“usb_hub_wq”, WQ_FREEZABLE, 0);INIT_WORK(&hub->events, hub_event)queue_work(hub_wq, &hub->events)–alloc_workqueue(“usb_hub_wq”, WQ_FREEZABLE, 0)此函数...

2018-09-20 17:26:29 1131

原创 mutex_init() / mutex_lock() / mutex_unlock()

请求1). 初始化互斥体 -- mutex_init();2). 获得互斥体 -- mutex_lock();3). 释放互斥体 -- mutex_unlock();1.mutex_init(), 注意mutex使用之前都需要先initvoid__mutex_init(struct mutex *lock, const char *name, struct lock_class...

2018-09-05 13:21:03 6254

原创 INIT_WORK的理解

#define INIT_WORK(_work, _func, _data) \do { \INIT_LIST_HEAD(&(_work)->entry); \(_work)->pending = 0; \PREPARE_WORK((_work), (_func), (_data)); \init_timer(&(_work)->timer); \}...

2018-08-27 13:59:07 15203

原创 kobject和sysfs

sysfs调用kobjecthome/disk1t/sprdroidp_trunk_k414_dev/kernel$ grep -nr kobject drivers/usb/drivers/usb/core/sysfs.c:822:static umode_t dev_string_attrs_are_visible(struct kobject *kobj,drivers/usb/core/s...

2018-07-12 11:16:32 336

原创 adb调试流程记录

diff --git a/drivers/usb/gadget/udc/core.c b/drivers/usb/gadget/udc/core.cindex d41d07a..fd3787e 100644--- a/drivers/usb/gadget/udc/core.c+++ b/drivers/usb/gadget/udc/core.c@@ -867,6 +867,7 @@ voi...

2018-06-18 19:33:36 828

原创 struct security_operations {}函数结构

aa/** * struct security_operations - main security structure * * Security hooks for program execution operations. * * @bprm_alloc_security: * Allocate and attach a security structure to

2017-10-31 15:22:01 1680

原创 为设备服务的文件系统sysfs--kobject和kset的关系

1 kobject 和 kset 的关系kset结构里面封装了一个kobject结构,同时包括一个链表头,属于这个kset的所有kobject都要链接到kset的链表头。2、kobject实例:总线的注册

2017-10-17 14:54:56 347

原创 为设备服务的文件系统sysfs--sysfs文件的读写

4.3     sysfs文件的读写        sysfs是在内存中存在文件系统,它的文件都只在内存中存在。因此 对文件的读写实际是对内存的读写,不涉及对硬盘的操作        4.3.1 读文件的过程的分析        a        a申请内存页函数:fastcall unsigned long get_zeroed_page(gfp_t gfp_

2017-10-17 14:05:53 675

原创 为设备服务的文件系统sysfs--sysfs文件的打开操作

4.2    sysfs文件的打开操作4.2.1 real_lookup函数详解        a4.2.2 为文件创建inode结构4.2.3 为dentry结构绑定属性4.2.4 调用文件系统的open函数

2017-10-17 09:42:13 414

原创 为设备服务的文件系统sysfs--文件目录的创建

4.1    文件和目录的创建4.1.1 sysfs文件系统的初始化4.1.2 sysfs文件系统目录的创建4.1.3 普通文件的创建

2017-10-17 09:39:59 342

原创 通用块层和SCSI层--I/O处理过程

11.5.1 I/O插入队列的过程分析11.5.2 I/O出队列的过程分析11.5.3 I/O返回路径

2017-10-12 11:19:42 511

原创 通用块层和SCSI层--I/O的顺序控制 及 调度算法

11.3 I/O的控制顺序        内核使用barrier I/O概念来实现I/O的顺序。        指的是barrier I/O 之前的I/O必须执行完毕,然后在执行barrier I/O,而barrier I/O之后的 I/O必须在barrier I/O执行完毕之前才能执行,就像I/O中插入了一个栅栏。        11.4 I/O调度算法

2017-10-12 11:05:19 348

原创 通用块层和SCSI层--硬盘HBA抽象层

HBA---Host Bus Adapter 主机总线适配器        HBA 通常用来连接计算机内部总线 和 存储系统,用来接入硬盘的设备,如果是一个PCI设备,它既是一个PCI设备,同时支持SCSI硬盘或者ATA硬盘,它就是一个HBA设备。

2017-10-12 11:00:22 409

原创 通用块层和SCSI层--块设备队列

块设备队列11.1.1 SCSI块设备队列处理函数11.1.2 电梯算法和对象

2017-10-12 10:42:15 622

原创 文件系统读写--文件写过程代码分析

10.6 文件写过程代码分析1、generic_file_write函数2、generic_file_buffered_write函数3、获取文件块的物理块号

2017-10-12 10:30:58 493

原创 文件系统读写--读过程返回

10.5 文件读过程返回        文件通过mpage_bio_submit提交一个I/O。I/O通过什么返回?返回通过什么机制通知上层?        阻塞点设计

2017-10-12 10:10:16 386

原创 文件系统读写--文件读过程代码分析

10.4 文件读过程diam分析1、generic_file_read函数2、__generic_file_aio_read函数3、do_generic_file_read函数4、do_generic_mapping_read函数5、do_mpage_readpage函数6、block_read_full_page函数

2017-10-12 10:04:11 1968

原创 文件系统读写--文件预读 和 文件锁

10.2 文件预读10.3 文件锁--建议锁:--强制锁:--读锁    :--写锁    :

2017-10-12 10:01:25 751

原创 文件系统读写--page cache机制

10.1.1 buffer I/O 和 direct I/O10.1.2 buffer head 和 块缓存10.1.3 page cache的管理10.1.4 page cache的状态

2017-10-12 09:59:34 6236 1

原创 块设备--块设备的打开流程

9.4.1 获取块设备对象9.4.2 执行块设备的打开流程

2017-10-12 09:56:53 432

原创 块设备--块设备文件系统

9.3.1 块设备文件系统的初始化9.3.2 块设备文件系统的设计思路

2017-10-12 09:55:38 681

原创 块设备--块设备创建和过程分析

9.2.1 nbd驱动的初始化9.2.2 位通用磁盘创建队列成员9.2.3 将通用磁盘对象加入系统

2017-10-12 09:53:53 1006

原创 块设备--块设备的架构

9.1.1 块设备、磁盘对象 和队列9.1.2 快设备 和 通用磁盘对象的绑定9.1.3 块设备的队列 和 队列处理函数

2017-10-12 09:51:28 610

原创 PCI总线---PCI设备扫描过程

8.2 PCI设备扫描过程8.2.1 扫描0号总线8.2.1 扫描总线上的PCI设备8.2.3 扫描多功能设备8.2.4 扫描单个设备8.2.5 扫描设备信息

2017-10-10 14:46:22 6749

原创 PCI总线---深入理解PCI总线

8.1 深入理解PCI总线8.1.1 PCI设备工作原理8.1.2 PCI总线域8.1.3 PCI资源管理器8.1.4 PCI配置空间读取和设置

2017-10-10 14:42:15 11007

原创 serio总线------虚拟键盘驱动--键盘中断

7.3 虚拟键盘驱动  上一节注册了一个input键盘设备,注册设备的同时需要找到 它的驱动。7.3.1 键盘区的的初始化7.3.2 与设备建立连接7.3.3 启动键盘设备7.3.4 输入设备和主机系统之间的事件7.4 键盘中断7.4.1 q40kbd设备的中断处理7.4.2 serio总线的中断处理7.4.3 驱动提供的中断处理

2017-10-10 00:20:01 402

原创 serio总线------向serio总线注册设备

从第5章的input 驱动的分析中,我们可以了解到驱动可以分成几个层次,驱动之间可以嵌套。和这种类型相似,总线也可以分为几个层次,一种类型的总线可以架构在另一种总线之上。  第6章platform总线驱动提供probe函数中,调用serio_register_port函数,引出总线嵌套的概念 以及在内核中占据极为重要的总线适配的概念。7.1 总线适配器  PCI总线 是连接CP

2017-10-09 09:53:49 1040

原创 platform总线--从设备找到驱动的过程

platform总线驱动的注册过程,和input设备 驱动注册过程很像,都是逐个遍历设备,检查是否和驱动匹配。  由此联想,platform总线加载设备的过程,应该也是遍历驱动,看是否和设备匹配。2.1 注册设备和总线注册设备使用的是 platform_device_add 函数---/driver/base/Platform.cint platform_device_ad

2017-09-29 11:03:30 473

原创 platform总线--驱动发现设备的过程

总线时物理存在,Linux系统提供了一种简单的总线flatform。  platform  不是物理存在的总线,而是逻辑概念。现代PC机提供了一条根总线(PCI 总线)管理设备,但是有些设备没有挂载在PCI总线上,不能由PCI总线管理,于是Linux内核虚拟了platform总线来统一管理这种设备。1、从驱动发现设备的过程  platform总线虽然简单,但有总线的通用功能。我

2017-09-29 09:30:04 576

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

原创 字符设备 和 input 设备--input设备的注册

5.2 input设备的注册  input是一个虚拟的设备,在Linux系统中,键盘、鼠标、触摸屏 和 游戏杆 都要由input设备统一管理。  input设备是个字符设备,如何注册设备驱动,要 从input设备的初始化函数input_init开始。5.2.1 主从设备号  Linux系统通过设备号来区分不同的设备。设备号由两个部分组成: 主设备号 和 从设备号下面摘录了系统定

2017-09-28 15:52:38 1801

原创 字符设备 和 input 设备--文件如何变成设备

Linux操作系统把设备划分为字符设备和块设备【网络设备是单独一种类型】。  很多情况下把字符设备 当 系统控制的一种手段,通过字符设备的I/O control 函数与内涵 进行交换数据。 实际上,Linux内核系统很多时候是把字符设备当做一个框架来使用。5.1 文件如何变成设备  回顾aufs系统,通过aufs_get_inode为每个文件创建它的inode对象。对文件和目录

2017-09-28 09:58:23 819

原创 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 1554 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 1188

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关注的人

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