<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[zhuyong006的博客]]></title><description><![CDATA[移动开发]]></description><link>https://blog.csdn.net/zhuyong006</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; zhuyong006]]></copyright><item><title><![CDATA[Qemu 启动无法交互的处理方法]]></title><link>https://blog.csdn.net/zhuyong006/article/details/133469687</link><guid>https://blog.csdn.net/zhuyong006/article/details/133469687</guid><author>zhuyong006</author><pubDate>Sun, 01 Oct 2023 21:09:16 +0800</pubDate><description><![CDATA[【代码】Qemu 启动无法交互的处理方法。]]></description><category></category></item><item><title><![CDATA[利用Qemu调试Linux内核]]></title><link>https://blog.csdn.net/zhuyong006/article/details/131883152</link><guid>https://blog.csdn.net/zhuyong006/article/details/131883152</guid><author>zhuyong006</author><pubDate>Sun, 23 Jul 2023 19:44:31 +0800</pubDate><description><![CDATA[调试模块需要在 GDB 中使用 add-symbol-file 命令加载符号表信息，add-symbol-file 需要指定模块的 section 信息，以下两种方式都可以获取 section 信息。需要注意的是每次重新加载 ko，section 地址是会变，要 add-symbol-file 重新加载符号表。我是在 VM 中编译之后直接安装的，也可以在 Host 编译把 vmlinux 拷贝至 VM 中安装。获取到.text 地址之后在 gdb 中加载 ko 模块的符号表,然后就可以调试 ko 模块了。]]></description><category></category></item><item><title><![CDATA[共享库的加载时重定位技术]]></title><link>https://blog.csdn.net/zhuyong006/article/details/131881637</link><guid>https://blog.csdn.net/zhuyong006/article/details/131881637</guid><author>zhuyong006</author><pubDate>Sun, 23 Jul 2023 17:22:26 +0800</pubDate><description><![CDATA[本文的目的是解释现代操作系统如何通过加载时重定位来使用共享库。它主要关注运行在32位x86上的Linux操作系统，但一般性原则也适用于其他操作系统和cpu。注意，共享库有许多名称——共享库、共享对象、动态共享对象(DSOs)、动态链接库(dll——如果您来自Windows背景的话)。为了保持一致性，我将在本文中尽量使用“共享库”这个名称。]]></description><category></category></item><item><title><![CDATA[ARM64学习笔记---建立异常向量表（二）]]></title><link>https://blog.csdn.net/zhuyong006/article/details/131627724</link><guid>https://blog.csdn.net/zhuyong006/article/details/131627724</guid><author>zhuyong006</author><pubDate>Sun, 09 Jul 2023 22:42:09 +0800</pubDate><description><![CDATA[这里.string “t” 只会占用2个字节，因此紧随其后的 “trigger_alignment” 会触发指令不对齐异常。]]></description><category></category></item><item><title><![CDATA[宋宝华： 一图理解终端、会话、 进程组、进程关系]]></title><link>https://blog.csdn.net/zhuyong006/article/details/103947606</link><guid>https://blog.csdn.net/zhuyong006/article/details/103947606</guid><author>zhuyong006</author><pubDate>Sun, 12 Jan 2020 17:26:50 +0800</pubDate><description><![CDATA[药不能停，直接进入正题，本文3分钟读完。文中涉及到的缩写如下：

PID: 进程(process) ID
PPID：父进程(parent process) ID
PGID：进程组(process group) ID
SID：会话(session )ID

文中a.out对应的代码如下：
main()
{
    fork();
    while(1);
}

实验方法：
开一个terminal,...]]></description><category></category></item><item><title><![CDATA[宋宝华： 用off-cpu火焰图进行Linux性能分析]]></title><link>https://blog.csdn.net/zhuyong006/article/details/103795546</link><guid>https://blog.csdn.net/zhuyong006/article/details/103795546</guid><author>zhuyong006</author><pubDate>Wed, 01 Jan 2020 20:06:45 +0800</pubDate><description><![CDATA[在《宋宝华：火焰图：全局视野的Linux性能剖析》一文中，我们主要看了on-cpu火焰图，理解了系统的CPU的走向的分析。但是，很多时候，单纯地看on-cpu的情况（什么代码在耗费CPU），并不能解决性能问题，因为有时候性能差的原因瓶颈不一定在CPU上面，而是在off-cpu的时间，比如：进程进入系统调用执行io动作，io动作的延迟进程等待mutex锁的时间内存被交换,swap的时间内存不够的时候...]]></description><category></category></item><item><title><![CDATA[在Linux上运行procmem和procrank]]></title><link>https://blog.csdn.net/zhuyong006/article/details/103795311</link><guid>https://blog.csdn.net/zhuyong006/article/details/103795311</guid><author>zhuyong006</author><pubDate>Wed, 01 Jan 2020 19:39:45 +0800</pubDate><description><![CDATA[Android系统中提供了两个命令行工具procrank、procmem用于查看系统中的内存使用情况。procrank可以查看系统中所有进程的整体内存占用情况，并按照规则排序。而procmem可以针对某个特定的进程分析其堆、栈、共享库等内存占用情况。这两个工具对于我们分析内存相关问题非常有效。由于Android系统使用的是Linux内核，理论上这样的工具可以在Linux上运行。
编译
参考Andr...]]></description><category></category></item><item><title><![CDATA[频繁分配释放内存导致的性能问题的分析]]></title><link>https://blog.csdn.net/zhuyong006/article/details/103795108</link><guid>https://blog.csdn.net/zhuyong006/article/details/103795108</guid><author>zhuyong006</author><pubDate>Wed, 01 Jan 2020 19:14:52 +0800</pubDate><description><![CDATA[频繁分配释放内存导致的性能问题的分析
现象
1 压力测试过程中，发现被测对象性能不够理想，具体表现为：
进程的系统态CPU消耗20，用户态CPU消耗10，系统idle大约70
2 用ps -o majflt,minflt -C program命令查看，发现majflt每秒增量为0，而minflt每秒增量大于10000。
初步分析
majflt代表major fault，中文名叫大错误，minflt...]]></description><category></category></item><item><title><![CDATA[Linux 火焰图(on-cpu , off-cpu , memory)]]></title><link>https://blog.csdn.net/zhuyong006/article/details/103795049</link><guid>https://blog.csdn.net/zhuyong006/article/details/103795049</guid><author>zhuyong006</author><pubDate>Wed, 01 Jan 2020 19:07:30 +0800</pubDate><description><![CDATA[在前一篇文章，我们简单提到了 perf，实际 perf 能做的事情远远不止这么少，这里就要好好介绍一下，我们在 TiKV 性能调优上面用的最多的工具 - 火焰图。
火焰图，也就是 FlameGraph，是超级大牛 Brendan Gregg 捣鼓出来的东西，主要就是将 profile 工具生成的数据进行可视化处理，方便开发人员查看。我第一次知道火焰图，应该是来自 OpenResty 的章亦春介绍，...]]></description><category></category></item><item><title><![CDATA[Simpleperf介绍]]></title><link>https://blog.csdn.net/zhuyong006/article/details/103112571</link><guid>https://blog.csdn.net/zhuyong006/article/details/103112571</guid><author>zhuyong006</author><pubDate>Sun, 17 Nov 2019 20:09:12 +0800</pubDate><description><![CDATA[什么是simpleperf
Simpleperf是Android平台的一个本地层性能分析工具。它的命令行界面支持与linux-tools perf大致相同的选项，但是它还支持许多Android特有的改进。
Simpleperf是Android开源项目（AOSP）的一部分。其源代码 位于。其最新的文档 位于。Bugs 和 功能需求可以提交到 githb上。
Simpleperf是如何工作的
现代的C...]]></description><category></category></item><item><title><![CDATA[Camera ISP流程概述]]></title><link>https://blog.csdn.net/zhuyong006/article/details/102767500</link><guid>https://blog.csdn.net/zhuyong006/article/details/102767500</guid><author>zhuyong006</author><pubDate>Sun, 27 Oct 2019 15:36:48 +0800</pubDate><description><![CDATA[可以参考网上的PPT（个人觉得比较好）
https://wenku.baidu.com/view/a1b9c7e6f705cc1755270984.html
一、概述 
ISP(Image Signal Processor)， 即图像信号处理， 主要作用是对前端图像传感器输出的信号做后期处理， 依赖于 ISP 才能在不同的光学条件下都能较好的还原现场细节。
Cmos YUV sensor 的 IS...]]></description><category></category></item><item><title><![CDATA[Camera persist使用手册之log使用技巧]]></title><link>https://blog.csdn.net/zhuyong006/article/details/102767169</link><guid>https://blog.csdn.net/zhuyong006/article/details/102767169</guid><author>zhuyong006</author><pubDate>Sun, 27 Oct 2019 15:23:43 +0800</pubDate><description><![CDATA[查看当前使能了哪些级别的log，可以使用参考命令：
adb shell getprop | grep "camera"
下面是开启各个模块log级别的简单描述。
1. persist.camera.global.debug
数值：0-5
功能：设置不同的数值，将打印对应级别的log。该属性是总的log级别开关。
注意：若子模块的log级别小于该属性设置值，则以该属性为准；若子模块的log级别大于该...]]></description><category></category></item><item><title><![CDATA[Camera 初始化(Preview) 三（预览Buffer的流程）]]></title><link>https://blog.csdn.net/zhuyong006/article/details/102703963</link><guid>https://blog.csdn.net/zhuyong006/article/details/102703963</guid><author>zhuyong006</author><pubDate>Wed, 23 Oct 2019 17:13:02 +0800</pubDate><description><![CDATA[API1+HAL3

frameworks\av\services\camera\libcameraservice\api1\Camera2Client.cpp

status_t Camera2Client::setPreviewWindowL(const sp&lt;IBinder&gt;&amp; binder,
        const sp&lt;Surface&gt;&amp; wi...]]></description><category></category></item><item><title><![CDATA[Camera 初始化(Preview) 二（HAL3的流程）]]></title><link>https://blog.csdn.net/zhuyong006/article/details/102626167</link><guid>https://blog.csdn.net/zhuyong006/article/details/102626167</guid><author>zhuyong006</author><pubDate>Fri, 18 Oct 2019 15:32:47 +0800</pubDate><description><![CDATA[1. 先看下HAL3的预览状态机流程
默认状态          MM_CHANNEL_STATE_NOTUSED                      MM_STREAM_STATE_NOTUSED
add_channel       
				  MM_CHANNEL_STATE_STOPPED                      MM_STREAM_STATE_INITED
			...]]></description><category></category></item><item><title><![CDATA[Camera 初始化(Preview) 一（Framework->HAL3）]]></title><link>https://blog.csdn.net/zhuyong006/article/details/102569320</link><guid>https://blog.csdn.net/zhuyong006/article/details/102569320</guid><author>zhuyong006</author><pubDate>Tue, 15 Oct 2019 17:10:17 +0800</pubDate><description><![CDATA[以下代码流程是API1+HAL3

frameworks\av\services\camera\libcameraservice\api1\Camera2Client.cpp

startPreview-&gt;startPreviewL
status_t Camera2Client::startPreviewL(Parameters &amp;params, bool restart) {
{
...]]></description><category></category></item><item><title><![CDATA[Android Camera2+HAL3架构]]></title><link>https://blog.csdn.net/zhuyong006/article/details/102566825</link><guid>https://blog.csdn.net/zhuyong006/article/details/102566825</guid><author>zhuyong006</author><pubDate>Tue, 15 Oct 2019 14:51:36 +0800</pubDate><description><![CDATA[整体架构概述
Android Camera整体框架主要包括三个进程：app进程、camera server进程、hal进程。进程之间的通信都是通过binder实现，其中app和camera server通信使用aidl，camera server和hal通信使用hidl。Android Camera2整体架构如下图：

大致分为这几个部分：

Application framework
这一层是用...]]></description><category></category></item><item><title><![CDATA[Camera 初始化(Open)二（HAL3中Open过程）]]></title><link>https://blog.csdn.net/zhuyong006/article/details/102521363</link><guid>https://blog.csdn.net/zhuyong006/article/details/102521363</guid><author>zhuyong006</author><pubDate>Sat, 12 Oct 2019 16:36:05 +0800</pubDate><description><![CDATA[承接上文Camera在connect后会调度到Camera3Device-&gt;initialize函数 ,如下：
initialize：
	status_t res = manager-&gt;openSession(mId.string(), this,
	            /*out*/ &amp;session);
	mInterface = new HalInterface(se...]]></description><category></category></item><item><title><![CDATA[Camera 初始化(Open)一（FrameWork -> Hal）]]></title><link>https://blog.csdn.net/zhuyong006/article/details/102519200</link><guid>https://blog.csdn.net/zhuyong006/article/details/102519200</guid><author>zhuyong006</author><pubDate>Sat, 12 Oct 2019 13:56:57 +0800</pubDate><description><![CDATA[随着Android系统的不断升级，Camera子系统框架也在不断进化
由最初的API1和HAL1到现在的API2和HAL3,由最初简单的拍照，录制到现在的连拍，AI人像;可以说是架构上变动最大最频繁的子系统。
很多设备仍然依赖相机 HAL1，因此 Android 7.0 继续支持该模块。此外，Android 相机服务还支持同时实现两种 HAL（1 和 3），
如果您希望通过相机 HAL1 支持性能...]]></description><category></category></item><item><title><![CDATA[Android P版本怎么简单的验证HIDL的Demo例程]]></title><link>https://blog.csdn.net/zhuyong006/article/details/102504074</link><guid>https://blog.csdn.net/zhuyong006/article/details/102504074</guid><author>zhuyong006</author><pubDate>Fri, 11 Oct 2019 18:13:21 +0800</pubDate><description><![CDATA[1. 首先编写接口文件IJon.hal
# mkdir -p hardware/interfaces/jon/1.0

package android.hardware.jon@1.0;

interface IJon{
	helloworld(string name) generates (string result);
};

2. 确保你的工程已经完整编译过，且hidl-gen已经生成并可以...]]></description><category></category></item><item><title><![CDATA[Android 9.0 HIDL接口添加]]></title><link>https://blog.csdn.net/zhuyong006/article/details/102501366</link><guid>https://blog.csdn.net/zhuyong006/article/details/102501366</guid><author>zhuyong006</author><pubDate>Fri, 11 Oct 2019 14:57:24 +0800</pubDate><description><![CDATA[文章目录一、 接口描述文件创建1.1 创建HIDL目录1.2 创建接口描述文件sample.hal，1.3 生成HAL 相关文件二 、更新Makefile三 、 service.cpp相关3.1 service.cpp创建3.2 Android.bp四 、client库代码修改4.1 Sample.cpp代码修改4.2  Sample.h五 、测试代码六 、运行测试用例的问题解决6.1 andro...]]></description><category></category></item></channel></rss>