<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Burning Water]]></title><description><![CDATA[没有什么能够阻挡，你对自由的向往]]></description><link>https://blog.youkuaiyun.com/yin262</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; yin262]]></copyright><item><title><![CDATA[Binder系列（）——addService——代码分析]]></title><link>https://blog.youkuaiyun.com/yin262/article/details/88421645</link><guid>https://blog.youkuaiyun.com/yin262/article/details/88421645</guid><author>yin262</author><pubDate>Thu, 16 May 2019 15:51:32 +0800</pubDate><description><![CDATA[概述
addService的过程涉及三个模块:

Service，service通过调用service manager的addService接口将自己注册到SM，本质上是client；
SM，接收service的注册请求，本质上是server；
Binder Driver，负责CS之间的数据传输和kernel中关键数据结构的建立。

client
看了网上很多资料都是以media service为...]]></description><category></category></item><item><title><![CDATA[Binder系列（1）——ServiceManager]]></title><link>https://blog.youkuaiyun.com/yin262/article/details/88995231</link><guid>https://blog.youkuaiyun.com/yin262/article/details/88995231</guid><author>yin262</author><pubDate>Sun, 07 Apr 2019 16:21:27 +0800</pubDate><description><![CDATA[1. 概述
在一台Android 8.1的手机中，能看到三个servicemanager：

servicemanager，管理系统服务，本文只讨论servicemanager；
vndservicemanager，管理厂商服务，对应的文件节点是/dev/vndbinder，servicemanager和vndservicemanager使用的是同一份代码，都是由service_manager.c...]]></description><category></category></item><item><title><![CDATA[kernel 系统调用----system call]]></title><link>https://blog.youkuaiyun.com/yin262/article/details/56839534</link><guid>https://blog.youkuaiyun.com/yin262/article/details/56839534</guid><author>yin262</author><pubDate>Tue, 28 Feb 2017 15:56:05 +0800</pubDate><description><![CDATA[Init在trap_init中对SYSCALL_VECTOR（编号0x80）的向量进行初始化。 808     set_system_trap_gate(SYSCALL_VECTOR, &system_call);将system call初始化为trap门，加入到IDT table中，发生中断以后，会跳转到对应system_call的地址去执行后续的中断流程。发生中断到跳转执行中断向量的过程在ker]]></description><category></category></item><item><title><![CDATA[Linux进程创建三——fork、vfork、clone、kernel_thread]]></title><link>https://blog.youkuaiyun.com/yin262/article/details/54587464</link><guid>https://blog.youkuaiyun.com/yin262/article/details/54587464</guid><author>yin262</author><pubDate>Tue, 17 Jan 2017 22:53:15 +0800</pubDate><description><![CDATA[前言Linux创建线程的API主要有fork、vfork、clone、kernel_thread，最终都调用了do_fork。 
do_fork的具体流程在上一篇已经分析完毕Linux进程创建二——do_forkfork、vfork、clone都是系统调用，用来实现用户空间的进程创建。 
内核空间创建的进程称为内核线程，主要通过kernel_thread，对kernel_thread进行包装的API]]></description><category></category></item><item><title><![CDATA[Linux进程创建二——do_fork]]></title><link>https://blog.youkuaiyun.com/yin262/article/details/54563513</link><guid>https://blog.youkuaiyun.com/yin262/article/details/54563513</guid><author>yin262</author><pubDate>Tue, 17 Jan 2017 21:12:46 +0800</pubDate><description><![CDATA[前言

kernel在启动初期并没有“进程”这个概念，如果不涉及支持多任务并发、调度，kernel可以一直以一个控制流运行。本篇从内核初始化时的0进程开始分析，延伸到多进程的创建。

0 进程

内核中的所有进程都存在依赖关系，进程有父进程、子进程、兄弟进程。0号进程为所有进程的祖先进程，又称为idle进程、swapper进程。

init_task

如前文所述，内核在初始化初期没有进程的概念，]]></description><category></category></item><item><title><![CDATA[What are threads (user/kernel)?]]></title><link>https://blog.youkuaiyun.com/yin262/article/details/54406392</link><guid>https://blog.youkuaiyun.com/yin262/article/details/54406392</guid><author>yin262</author><pubDate>Fri, 13 Jan 2017 11:08:27 +0800</pubDate><description><![CDATA[What are threads (user/kernel)?Threads are “light weight processes” (LWPs).  
The idea is a process has five fundamental parts: code (“text”), data (VM), stack, file I/O, and signal tables. “Heavy-weig]]></description><category></category></item><item><title><![CDATA[Linux进程创建一——进程、线程、LWP]]></title><link>https://blog.youkuaiyun.com/yin262/article/details/54381245</link><guid>https://blog.youkuaiyun.com/yin262/article/details/54381245</guid><author>yin262</author><pubDate>Thu, 12 Jan 2017 23:20:23 +0800</pubDate><description><![CDATA[前言本篇主要对进程和线程的概念进行分析，kernel中的进程、线程模型，涉及进程、用户态线程、内核态线程、轻量级进程（LWP），在分析之前，需要阅读What is Thread?，该文章有便于理解操作系统中线程、用户态线程和内核态线程的对应关系。 
根据资料和我的理解，不同操作系统对线程和进程的理解及对应关系稍有不同，本篇只针对Linux操作系统。 
本篇文章是阅读ULK3及网上相应文章后的个人总结]]></description><category></category></item><item><title><![CDATA[kernel中断分析七——tasklet]]></title><link>https://blog.youkuaiyun.com/yin262/article/details/54289502</link><guid>https://blog.youkuaiyun.com/yin262/article/details/54289502</guid><author>yin262</author><pubDate>Tue, 10 Jan 2017 09:58:24 +0800</pubDate><description><![CDATA[Abstract

在Kernel 中断分析六——softirq中，分析了软中断的处理流程，那么bottom half还剩下tasklet与waitqueue。tasklet是在软中断基础上实现的一种延迟机制，当然同样运行在中断上下文，而waitqueue运行在进程上下文，允许睡眠。



Tasklet

kernel中有定义了十种软中断类型，其中HI_SOFTIRQ、TASKLET_SOFTI]]></description><category></category></item><item><title><![CDATA[Kernel 中断分析六——softirq]]></title><link>https://blog.youkuaiyun.com/yin262/article/details/54137980</link><guid>https://blog.youkuaiyun.com/yin262/article/details/54137980</guid><author>yin262</author><pubDate>Sun, 08 Jan 2017 23:47:05 +0800</pubDate><description><![CDATA[Abstract

目前kernel中的中断机制主要有top half、bottom half（softirq、tasklet、waitqueue）、threaded irq handler。top half不用赘述，我把threed irq handler与bottom half区分开，是因为他们有以下区别： 
1、调度方式 
threaded irq handler被系统调度器调度，botto]]></description><category></category></item><item><title><![CDATA[kernel 中断分析五——irq_thread]]></title><link>https://blog.youkuaiyun.com/yin262/article/details/54095613</link><guid>https://blog.youkuaiyun.com/yin262/article/details/54095613</guid><author>yin262</author><pubDate>Fri, 06 Jan 2017 11:27:50 +0800</pubDate><description><![CDATA[前言

在x86 kernel 中断分析三——中断处理流程中，对于线程化中断处理函数，handle_irq_event_percpu调用了irq_wake_thread唤醒action->thread，此处唤醒的thread创建于__setup_irq，代码如下：

   947         t = kthread_create(irq_thread, new, "irq/%d-%s", ir]]></description><category></category></item><item><title><![CDATA[kernel 中断分析之四——中断申请 [下]]]></title><link>https://blog.youkuaiyun.com/yin262/article/details/54025216</link><guid>https://blog.youkuaiyun.com/yin262/article/details/54025216</guid><author>yin262</author><pubDate>Thu, 05 Jan 2017 10:28:03 +0800</pubDate><description><![CDATA[前言

在kernel 中断分析之四——中断申请 [上]中，request_irq、request_threaded_irq、setup_irq、setup_percpu_irq、request_percpu_irq最终都调用了__setup_irq，本篇对该API进行分析，由于代码比较长，分段分析。

请注意，在分析过程中，遇到一些拿捏不定的地方，以用粗体表示，如果有理解错误，欢迎指正。

__]]></description><category></category></item><item><title><![CDATA[kernel 中断分析之四——中断申请[上]]]></title><link>https://blog.youkuaiyun.com/yin262/article/details/54018663</link><guid>https://blog.youkuaiyun.com/yin262/article/details/54018663</guid><author>yin262</author><pubDate>Wed, 04 Jan 2017 22:43:13 +0800</pubDate><description><![CDATA[前言

从分析三可知，中断处理最终调用了irqaction的handler和thread_fn，分别对应interrupt context和process context。 
对应的中断服务例程是在驱动初始化阶段，通过request_irq或者request_threaded_irq进行申请，注册的，本篇主要对这两个接口进行分析。

request_threaded_irq

关于中断线程化的目的]]></description><category></category></item><item><title><![CDATA[x86 kernel 中断分析三——中断处理流程]]></title><link>https://blog.youkuaiyun.com/yin262/article/details/53994699</link><guid>https://blog.youkuaiyun.com/yin262/article/details/53994699</guid><author>yin262</author><pubDate>Tue, 03 Jan 2017 15:12:59 +0800</pubDate><description><![CDATA[CPU检测中断CPU在执行每条程序之前会检测是否有中断到达，即中断控制器是否有发送中断信号过来查找IDTCPU根据中断向量到IDT中读取对应的中断描述符表项，根据段选择符合偏移确定中断服务程序的地址见附录2interrupt数组在分析一中，我们看到，填充IDT中断服务程序的是interrupt数组的内容，所以第2步跳转到interrupt数组对应的表项，表项的内容之前也已分析过push vector]]></description><category></category></item><item><title><![CDATA[x86 kernel 中断机制分析二——irq_desc]]></title><link>https://blog.youkuaiyun.com/yin262/article/details/53929464</link><guid>https://blog.youkuaiyun.com/yin262/article/details/53929464</guid><author>yin262</author><pubDate>Thu, 29 Dec 2016 16:29:58 +0800</pubDate><description><![CDATA[简介irq_desc数据结构用于描述一个irq对应的各种信息，主要有以下方面： 
irq_data，描述该irq的irq number，irq chip，irq domain，处理器亲和力等等 
handle_irq，highlevel irq-events handler，流处理函数 
irq_action，一个链表，每个成员包含该irq中断处理函数等信息 
depth，中断嵌套深度 
name，]]></description><category></category></item><item><title><![CDATA[x86 kernel 中断机制分析一——IDT]]></title><link>https://blog.youkuaiyun.com/yin262/article/details/53928178</link><guid>https://blog.youkuaiyun.com/yin262/article/details/53928178</guid><author>yin262</author><pubDate>Thu, 29 Dec 2016 15:06:05 +0800</pubDate><description><![CDATA[本篇主要分析IDT的初始化流程。IDT简介IDT——interrupt description table，用来描述中断异常向量，表中的每一个entry对应一个向量。IDT entry：每个entry为8bytes，有以下关键bit： 
16~31：code segment selector 
0~15 & 46-64：segment offset （根据以上两项可确定中断处理函数的地址） 
Typ]]></description><category></category></item><item><title><![CDATA[Moving interrupts to threads（翻译）]]></title><link>https://blog.youkuaiyun.com/yin262/article/details/53906738</link><guid>https://blog.youkuaiyun.com/yin262/article/details/53906738</guid><author>yin262</author><pubDate>Wed, 28 Dec 2016 11:07:42 +0800</pubDate><description><![CDATA[翻译一篇来自lwn.net上关于kernel中断线程化的文章，比较老（08年），但还是很有学习意义。kernel中的响应延迟主要来自于处理硬件中断，因为处理中断的过程中，其他中断被block。为此，realtime tree有一个叫做“线程化中断处理（threaded interrupt handler）”的新功能，目的在于将关闭中断的时间减小到最低，将其余的处理过程（其实就是bottom half]]></description><category></category></item><item><title><![CDATA[Android Developer Sensor Overview（翻译）]]></title><link>https://blog.youkuaiyun.com/yin262/article/details/53079955</link><guid>https://blog.youkuaiyun.com/yin262/article/details/53079955</guid><author>yin262</author><pubDate>Tue, 08 Nov 2016 10:48:19 +0800</pubDate><description><![CDATA[通过Android framework层，你可以获取可用的Sensor的Raw data。
Sensor framework层提供了一些类和接口以便于开发者实现各种需求，比如，你可以完成以下实现：
1. 选择设备上的哪个sensor可用
2. 制定一个独立的sensor所具备的功能属性，比如，最大测量范围，制造商，功耗需求，解析度（resolution）等
3. 获取raw data并且定义数据采集的最小]]></description><category></category></item><item><title><![CDATA[windows下cygwin+ctags+cscope]]></title><link>https://blog.youkuaiyun.com/yin262/article/details/51592194</link><guid>https://blog.youkuaiyun.com/yin262/article/details/51592194</guid><author>yin262</author><pubDate>Sun, 05 Jun 2016 22:54:57 +0800</pubDate><description><![CDATA[安装cygwin 
a.官网下载，安装（先不用着急选源和package，后面可以统一配置安装） 
b.下载apt-cyg，这个工具在源上好像下载不到，优快云上有，附链接：http://download.youkuaiyun.com/detail/u011836061/8694571 
    b1、将下载好的apt-cyg拷贝到/bin目录下 
    b2、修改权限 (chmod +x /bin/apt-c]]></description><category></category></item><item><title><![CDATA[Linux cmdline 解析(CMA 预留内存)]]></title><link>https://blog.youkuaiyun.com/yin262/article/details/48730165</link><guid>https://blog.youkuaiyun.com/yin262/article/details/48730165</guid><author>yin262</author><pubDate>Fri, 25 Sep 2015 10:55:23 +0800</pubDate><description><![CDATA[Linux Version：3.14  
Android ： Lcmdline在kernel启动的时候被解析. 
cmdline启动的log中可以看到，比如我的是command_line = androidboot.bootloader=1537.100_M1S1 androidboot.serialno=004999010640000 bl_shared_ram=4k@0xfff4f000 con]]></description><category></category></item><item><title><![CDATA[start_kernel——setup_per_cpu_areas]]></title><link>https://blog.youkuaiyun.com/yin262/article/details/46787879</link><guid>https://blog.youkuaiyun.com/yin262/article/details/46787879</guid><author>yin262</author><pubDate>Tue, 07 Jul 2015 12:29:27 +0800</pubDate><description><![CDATA[setup_per_cpu_areas是为了对内核的内存管理（mm）进行初始化而调用的函数之一。只在SMP系统中调用，UP中不执行任何操作。 
setup_per_cpu_areas函数为SMP的每个处理器生成per-cpu数据。 
per-cpu数据按照不同的CPU类别使用，以将性能低下引发的缓存一致性（cache coherency）问题减小到最小。per-cpu数据由各cpu独立使用，即使不锁]]></description><category></category></item></channel></rss>