<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[macdroid的专栏]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/macdroid</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; macdroid]]></copyright><item><title><![CDATA[arm64 linux irq domain机制介绍]]></title><link>https://blog.csdn.net/macdroid/article/details/160774114</link><guid>https://blog.csdn.net/macdroid/article/details/160774114</guid><author>macdroid</author><pubDate>Tue, 05 May 2026 21:35:24 +0800</pubDate><description><![CDATA[绑定之后就可以利用"irq_chip"提供的各种处理函数了，比如内核提供的用于禁止一个IRQ的irq_disable()，它就是通过该IRQ对应的"irq_desc"的"irq_data"域，找到对应的"irq_chip"，进而回调"irq_chip"中的"irq_disable"函数。其中，"chip"就指向了这个IRQ所挂接的中断控制器，两者的绑定是通过irq_set_chip()函数完成的。其中，“name"是这个IRQ的名称，同样可以在”/proc/interupts"中查看，如上图红框所示部分。]]></description><category></category></item><item><title><![CDATA[Linux调度机制介绍]]></title><link>https://blog.csdn.net/macdroid/article/details/160800875</link><guid>https://blog.csdn.net/macdroid/article/details/160800875</guid><author>macdroid</author><pubDate>Tue, 05 May 2026 21:33:24 +0800</pubDate><description><![CDATA[的调用路径是全内核协作的结果：上层通过各种时机触发schedule()完成选核与决策，中层由完成内存与CPU状态切换，底层则依赖 ARM64 架构特定的汇编函数安全操作寄存器与内核栈，最终将 CPU 的执行流交接给另一个进程。]]></description><category></category></item><item><title><![CDATA[ARM64 Linux 缺页异常流程]]></title><link>https://blog.csdn.net/macdroid/article/details/160302149</link><guid>https://blog.csdn.net/macdroid/article/details/160302149</guid><author>macdroid</author><pubDate>Sun, 19 Apr 2026 11:53:10 +0800</pubDate><description><![CDATA[摘要（149字）： MMU查页表失败（如页表无效、权限错误）会触发硬件级同步异常，CPU自动跳转至EL1的el1_sync()处理。ARM64中，MMU故障类型通过ESR_EL1的DFSC字段区分（如缺页、非法访问），内核据此调用do_mem_abort()或do_page_fault()。缺页本质是MMU无法完成地址翻译的特殊故障，需分配物理页或终止进程。整个过程由硬件触发，异常地址记录于FAR_EL1，与x86的#PF机制异曲同工。]]></description><category></category></item><item><title><![CDATA[Android 内存泄漏场景分析]]></title><link>https://blog.csdn.net/macdroid/article/details/78002337</link><guid>https://blog.csdn.net/macdroid/article/details/78002337</guid><author>macdroid</author><pubDate>Sat, 16 Sep 2017 11:32:18 +0800</pubDate><description><![CDATA[public class MainActivity extends AppCompatActivity {
    private static TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);]]></description><category></category></item><item><title><![CDATA[ANDROID自定义视图——onMeasure，MeasureSpec源码 流程 思路详解]]></title><link>https://blog.csdn.net/macdroid/article/details/52575341</link><guid>https://blog.csdn.net/macdroid/article/details/52575341</guid><author>macdroid</author><pubDate>Sun, 18 Sep 2016 16:11:09 +0800</pubDate><description><![CDATA[简介：

在自定义view的时候，其实很简单，只需要知道3步骤：

1.测量——onMeasure()：决定View的大小

2.布局——onLayout()：决定View在ViewGroup中的位置

3.绘制——onDraw()：如何绘制这个View。


而第3步的onDraw系统已经封装的很好了，基本不用我们来操心，只需要专注到1,2两个步骤就中好了。

而这篇文]]></description><category></category></item><item><title><![CDATA[google 开发者自定义view的系列（创建view,绘制,交互,view的优化）]]></title><link>https://blog.csdn.net/macdroid/article/details/52523674</link><guid>https://blog.csdn.net/macdroid/article/details/52523674</guid><author>macdroid</author><pubDate>Tue, 13 Sep 2016 11:05:03 +0800</pubDate><description><![CDATA[Creating Custom Views

Get
 started





Dependencies and prerequisites

Android 2.1 (API level 7) or higher

You should also read

Custom ComponentsInput EventsProperty AnimationHardwa]]></description><category></category></item><item><title><![CDATA[深入理解Java 中hashcode() 和equals()方法]]></title><link>https://blog.csdn.net/macdroid/article/details/52027358</link><guid>https://blog.csdn.net/macdroid/article/details/52027358</guid><author>macdroid</author><pubDate>Mon, 25 Jul 2016 20:56:07 +0800</pubDate><description><![CDATA[一.hashCode方法的作用

　　对于包含容器类型的程序设计语言来说，基本上都会涉及到hashCode。在Java中也一样，hashCode方法的主要作用是为了配合基于散列的集合一起正常运行，这样的散列集合包括HashSet、HashMap以及HashTable。

　　为什么这么说呢？考虑一种情况，当向集合中插入对象时，如何判别在集合中是否已经存在该对象了？（注意：集合中不允许重复的]]></description><category></category></item><item><title><![CDATA[ContentProvider学习笔记]]></title><link>https://blog.csdn.net/macdroid/article/details/51789922</link><guid>https://blog.csdn.net/macdroid/article/details/51789922</guid><author>macdroid</author><pubDate>Thu, 30 Jun 2016 14:09:49 +0800</pubDate><description><![CDATA[一、什么ContentProvider
。。。
二、如何使用ContentProvider
。。。
三、沙场练兵-实例操练
。。。
四、深入理解ContentProvider原理
为什么使用ContentProvider可以实现跨进程的通讯，第一反应肯定是这货和binder有关，因为android中只有稍微跟跨进程搭上边的，必定想到binder。
下面就来分析ContentProv]]></description><category></category></item><item><title><![CDATA[Android SystemService的启动流程]]></title><link>https://blog.csdn.net/macdroid/article/details/51427944</link><guid>https://blog.csdn.net/macdroid/article/details/51427944</guid><author>macdroid</author><pubDate>Mon, 16 May 2016 20:39:05 +0800</pubDate><description><![CDATA[SystemServer.java(由init进程起来)之后会调用：

mSystemServiceManager.startService(FingerprintService.class);


startService() 方法:
 public  T startService(Class serviceClass) {
        final String name = s]]></description><category></category></item><item><title><![CDATA[Android 系统启动流程简介]]></title><link>https://blog.csdn.net/macdroid/article/details/50608371</link><guid>https://blog.csdn.net/macdroid/article/details/50608371</guid><author>macdroid</author><pubDate>Fri, 29 Jan 2016 17:06:30 +0800</pubDate><description><![CDATA[Android 系统启动总结 : Android 系统启动分底层 Linux 内核启动 和 应用系统启动;

-- 底层系统启动 : 系统上电, bootloader 启动, linux
 kernel 启动, init 进程启动;

-- 应用系统启动 : init 进程启动关键的进程如 Zygote 进程 和 System Server 等系统服务,
 之后进入 Home 界面;]]></description><category></category></item><item><title><![CDATA[Android的init过程（二）：初始化语言（init.rc）解析]]></title><link>https://blog.csdn.net/macdroid/article/details/50571628</link><guid>https://blog.csdn.net/macdroid/article/details/50571628</guid><author>macdroid</author><pubDate>Sat, 23 Jan 2016 21:59:58 +0800</pubDate><description><![CDATA[最近分析init启动流程，发现一篇博客分析比我还详细、细致、透彻，转载只是为了记录和分享

Android的init过程（一）


本文使用的软件版本
Android：4.2.2
Linux内核：3.1.10
    在上一篇文章中介绍了init的初始化第一阶段，也就是处理各种属性。在本文将会详细分析init最重要的一环：解析init.rc文件。
init.rc 文件并不是普通的]]></description><category></category></item><item><title><![CDATA[Linux进程间通信——使用共享内存]]></title><link>https://blog.csdn.net/macdroid/article/details/50519995</link><guid>https://blog.csdn.net/macdroid/article/details/50519995</guid><author>macdroid</author><pubDate>Thu, 14 Jan 2016 20:14:45 +0800</pubDate><description><![CDATA[最近在看Linux进程间通讯，看到一篇好的博客，转载只是为了记录。大家可以到原博客查看更全面的信息

http://blog.csdn.net/ljianhui/article/details/10253345





下面将讲解进程间通信的另一种方式，使用共享内存。

一、什么是共享内存

顾名思义，共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正]]></description><category></category></item><item><title><![CDATA[深入浅出 Makefile 简单实现]]></title><link>https://blog.csdn.net/macdroid/article/details/50515790</link><guid>https://blog.csdn.net/macdroid/article/details/50515790</guid><author>macdroid</author><pubDate>Thu, 14 Jan 2016 11:20:41 +0800</pubDate><description><![CDATA[最近在看makefile规则，简单写了一个sample code 验证了一把
首先是代码目录架构，有A /B /C 三个文件夹：


A文件夹中的代码如下：
Ahello.c

#include 

void ahello(const char *name)
{
    printf("----AAAA---I am in Hello %s!\n", name);
}Ahello.h]]></description><category></category></item><item><title><![CDATA[【Linux学习】epoll详解]]></title><link>https://blog.csdn.net/macdroid/article/details/50485217</link><guid>https://blog.csdn.net/macdroid/article/details/50485217</guid><author>macdroid</author><pubDate>Fri, 08 Jan 2016 20:53:23 +0800</pubDate><description><![CDATA[什么是epoll

epoll是什么？按照man手册的说法：是为处理大批量句柄而作了改进的poll。当然，这不是2.6内核才有的，它是在2.5.44内核中被引进的(epoll(4)
 is a new API introduced in Linux kernel 2.5.44)，它几乎具备了之前所说的一切优点，被公认为Linux2.6下性能最好的多路I/O就绪通知方法。

 
epol]]></description><category></category></item><item><title><![CDATA[android 5.0预制APK方法，android5.0预制apk]]></title><link>https://blog.csdn.net/macdroid/article/details/50475618</link><guid>https://blog.csdn.net/macdroid/article/details/50475618</guid><author>macdroid</author><pubDate>Thu, 07 Jan 2016 13:27:26 +0800</pubDate><description><![CDATA[最近在集成三方APK到system/app下，而且三方apk含有so库，查了很多资料，发现是so库问题导致的，
现记录下来，希望能帮助到遇到同样问题的人


第一情况、如何将带源码的APK预置进系统？
1) 在 packages/apps 下面以需要预置的 APK的 名字创建一个新文件夹，以预置一个名为Test的APK 为例
2) 将 Test APK的Source code 拷贝到 ]]></description><category></category></item><item><title><![CDATA[UNIX环境编程学习笔记—文件I/O之标准I/O流]]></title><link>https://blog.csdn.net/macdroid/article/details/50249733</link><guid>https://blog.csdn.net/macdroid/article/details/50249733</guid><author>macdroid</author><pubDate>Thu, 10 Dec 2015 14:49:05 +0800</pubDate><description><![CDATA[1 标准 I/O 流

之前学习的都是不带缓冲的 I/O 操作函数,直接针对文件描述符的,每调用一次函数可能都会触发一次系统调用,单次调用可能比较快捷。但是,对于需要频繁进行 I/O 操作的程序,频繁触发系统调用产生的消耗太大。

标准 I/O 库提供了带缓冲的 I/O 操作函数,这些函数围绕着一种叫做流(stream)的东西进行。当使用标准 I/O 库打开或创建一个文件时,系统提供了一个]]></description><category></category></item><item><title><![CDATA[Android Binder设计与实现 – 设计篇（二）]]></title><link>https://blog.csdn.net/macdroid/article/details/49075401</link><guid>https://blog.csdn.net/macdroid/article/details/49075401</guid><author>macdroid</author><pubDate>Mon, 12 Oct 2015 16:20:23 +0800</pubDate><description><![CDATA[5 Binder 的表述

考察一次Binder通信的全过程会发现，Binder存在于系统以下几个部分中：

· 应用程序进程：又分为Server进程和Client进程

· Binder驱动：Server和Client有不同表述形式

· 传输数据：由于Binder可以跨进程传递，需要在传输数据中予以表述

在系统不同部分，Binder实现的功能不同，表现形式也不一样的。接下]]></description><category></category></item><item><title><![CDATA[Android Binder设计与实现 - 设计篇]]></title><link>https://blog.csdn.net/macdroid/article/details/49075269</link><guid>https://blog.csdn.net/macdroid/article/details/49075269</guid><author>macdroid</author><pubDate>Mon, 12 Oct 2015 16:15:23 +0800</pubDate><description><![CDATA[目录(?)[-]

引言
面向对象的 Binder IPCBinder 通信模型

1 Binder 驱动2 ServiceManager 与实名Binder3 Client 获得实名Binder的引用4 匿名 Binder
Binder 协议

1 BINDER_WRITE_READ 之写操作2 BINDER_WRITE_READ 从Binder读出数据3 struct bind]]></description><category></category></item><item><title><![CDATA[计算机网络笔记-TCP层]]></title><link>https://blog.csdn.net/macdroid/article/details/49070185</link><guid>https://blog.csdn.net/macdroid/article/details/49070185</guid><author>macdroid</author><pubDate>Mon, 12 Oct 2015 10:19:46 +0800</pubDate><description><![CDATA[运输层是居于网络层之上，应用层之下。在运输层中，有着两个十分重要的因特网协议：TCP和UDP运输层协议。
运输层协议为运行在不同主机上的应用进程之间提供逻辑通信。而网络层协议是为了两台不同的主机之间提供逻辑通信。
运输层协议是在端系统中而不是在网络路由器中实现的。
运输层中，主要有以下的几个重要的知识点：

多路复用和多路分解UDP协议TCP协议TCP协议的可靠传输机制TCP协议的流量控]]></description><category></category></item><item><title><![CDATA[void (*b[10]) (void (*)())]]></title><link>https://blog.csdn.net/macdroid/article/details/48440701</link><guid>https://blog.csdn.net/macdroid/article/details/48440701</guid><author>macdroid</author><pubDate>Mon, 14 Sep 2015 16:29:39 +0800</pubDate><description><![CDATA[void (*b[10]) (void (*)());




C变量的声明都是由两部分组成的：类型，以及一组类似表达式的声明符（declarator）。声明符类似于表达式，对它求值应该返回一个声明中给定类型的结果。例如，我们来看一个简单的声明：
float f;
这里f就是声明符，对其求值，应该得到一个float型的数值。
然后看括号的作用，比如：
float ((f))；]]></description><category></category></item></channel></rss>