推荐文章 New Blog
KILL命令流程全解
这篇文章在我的博客中是在另一篇的基础上完成的,http://www.sbfeng.cn/blog/detail?blogId=1454242937本文以android6.0.0源码为基础,内核版本3.10,其他代码大同小异。一、kill之冰山一角Kill是一个信号发送的程序,可发送的信号包括如下:在Android6.0中,代码位置external/toybox/toys/posix/kill.c,这个代码比较简单,最终会调用kill(procpid, signum),也即Kill程序最终通过系统调用kill发送信号。第二、kill之徐妃半面 在系统调用之后,SYSCALL_DEFINE2(kill, pid_t, pid, int, sig) 2919 { 2920 struct s...May 8, 2016, 8:59 a.m.作者:zachary分类:Linux相关阅读(2549)评论(0)
[转]dumpsys使用
dumpsys顾名思义就是dump 系统信息的工具。1、首先可以获得dumpsys可用的service信息:shell@hwp7:/ $dumpsys |grep "DUMP OF SERVICE"DUMP OF SERVICE statusbar: DUMP OF SERVICE system.hsmcore: DUMP OF SERVICE telecom: DUMP OF SERVICE telephony.registry: DUMP OF SERVICE textservices: DUMP OF SERVICE trust...Feb. 3, 2016, 8:37 a.m.作者:zachary分类:Linux相关阅读(2133)评论(0)
linux之kill探究
好久没写东西了,抓住1月的尾巴,补上一篇,开发中常用kill命令杀死进程,具体为什么能杀死,我一直很好奇。前两天研究LMK的时候发现,在内存不够的时候使用了SIGKILL信号杀死了选定的进程,后面想着顺带探究了一下。 想要真正理解kill为什么能杀掉进程,需要理解linux上进程的工作原理,当然这里不可能说很清楚,我也没有这个能力,现在把我知道的写出来。 kill在linux中是一个程序,这个程序用于发送信号,linux中的信号很多,通过kill -l命令可以看对于信号的处理可以参看下面的文章:http://lifeofzjs.com/blog/2015/03/22/what-happens-when-you-kill-a-process/ 这篇文章写的还是挺清楚的,这里我们主要看一下9号信号,也就是传说中的强杀。与其他信号一样,在系统发送kill&n...Jan. 31, 2016, 8:22 p.m.作者:zachary分类:Linux相关阅读(2111)评论(0)
linux内核编程之sys接口以及workqueue
sys接口顾名思义/sys目录下的接口,linux系统是一个一切都是文件的系统,通过sys接口可以与内核的模块进行互动下面是默认sys目录下的内容下面通过编程可以实现我们自己的模块以及sys接口。实现sys接口并不难,只要会使用几个api就可以了,下面以一个实际的例子说明sysfs.c#include<linux/module.h> #include<linux/kernel.h> #include<linux/init.h> #include<linux/interrupt.h> #include<linux/sched.h> #include<linux/workqueue.h> #include<linux/sysfs.h> #include<linux/string.h> ...Dec. 24, 2015, 11:04 p.m.作者:zachary分类:Linux相关阅读(2013)评论(0)
linux新建用户后终端没有颜色
昨天由于工作的需要,在linux上需要添加一个账户,平常情况下只需要执行#adduser 用户名就好了,由于/目录挂载的磁盘空间不足,需要使用下面的命令#>useradd -d /usr1/zachary zachary在使用passwd设置完密码后,登录发现终端的shell明显不一样,所以重新使用下面的命令生成新的账户#>useradd -d /usr1/zachary -s /bin/bash zachary重新登录发现shell正常了,但是由于没有/usr1/zachary这个目录,用户登陆后默认进入了/根目录,所以我又手动生成了这个目录重新登录,可以自动进入这个目录了,但是发现这时候文件目录不能显示,baidu一下,说是没有.bashrc文件,从其他账户拷贝一个,重新登录还是没有,...June 20, 2015, 11:21 a.m.作者:zachary分类:Linux相关阅读(1950)评论(0)
关于Linux下按键的检测
写这篇博客是因为自己想做一个fc模拟器,核心代码(6502和ppu的模拟代码)用的原子开发板的代码,人家是从pc向单片机移植,我是反过来了,不过因为写的不错,用函数指针代替了switch方法可以学习一下,so就用了它的。在写按键控制的时候碰到一点点问题,怎么才能获取按键的状态。写代码的时候碰到三个问题,一个一个的解决。1、一般使用read、getchar()都要回车才能执行。经过一番百度,http://blog.sina.com.cn/s/blog_7be4196901014dxl.html,这个博客解决了这个问题。使用termios解决测试代码:#include<unistd.h> #include<termios.h> #include<stdio.h> #include<stdlib.h> int main(){ &...March 29, 2015, 8:59 p.m.作者:zachary分类:Linux相关阅读(2132)评论(0)
Malloc Debug
翻译至:https://android.googlesource.com/platform/bionic/+/master/libc/malloc_debug/README.mdMalloc Debug(内存调试)简介Malloc debug 是一种native层内存问题的方法。他可以帮助我们定位内存损坏、内存泄露、释放后再使用的问题。这个文档描述如何在Android N版本以后的Android系统中使用这个功能。对于老版本的malloc debug的方法见这个链接(https://android.googlesource.com/platform/bionic/+/master/libc/malloc_debug/README_marshmallow_and_earlier.md)。当malloc debug功能使能后,系统增加了一个Hook层代替正常的内存分配调用。这里主要替换了下面的...May 1, 2018, 2:41 p.m.作者:zachary分类:Android阅读(7272)评论(0)
Android 堆栈打印方法总结
framework层(java层)try { Log.i(TAG,"--------------NullPointerException-------begin"); throw new NullPointerException(); } catch (NullPointerException e1) { // TODO: handle exception Log.i(TAG, "-------------NullPointerException"); &nbs...Dec. 31, 2017, 4:16 p.m.作者:zachary分类:Android阅读(2500)评论(2)
ZRAM实现原理详解
一、ZRAM的背景我们知道在不论是windows还是linux都有一个交换文件,这个交换文件是放在磁盘上的,对于手机设备也是可以这样做的,但是在移动设备中没有像PC机那样的磁盘,而是使用的是flash,Flash的读写寿命远不如磁盘,所以如果使用交换文件,将大大缩短Flash的寿命。为了不缩短Flash的寿命,程序员想了一个办法就是ZRAM,通过内存存放内存中的数据,只是将数据做了压缩,这样就可以用10M的内存存放20M的数据了,当然这只是一个比方,实际可能压缩的更小,这样同时也不会写入Flash进而影响Flash的寿命。 二、ZRAM的启用内核编译打开CONFIG_SWAP=y CONFIG_CGROUP_MEM_RES_CTLR=y CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y CONFIG_ZRAM=yCONFIG_ZSMALLOC=y启用ZR...Feb. 26, 2017, 10:05 p.m.作者:zachary分类:Android阅读(7554)评论(0)
oat文件结构(一)
由于我的nexus 6p手机耗电特别严重,基本上只能用半天,下载了android的源码,不能白下,所以想优化一下。编写了一个应用程序,这个应用程序使用了activitymanagerservice 的隐藏接口forceStopPackage,发现没有权限,通过配置systemuid,还是因为谷歌手机出厂的时候与aosp源码的签名不同,导致无法正常工作。想通过root权限,但是因为selinux的缘故,发现还是有问题,但是又不想关闭selinux。然后想试着更改services.odex直接push到手机中使用,但是将编译好的services.odex文件push到手机中,发现手机起不来了。通过对比手机原来的对应文件,发现只有四个字节不同,如下: 通过修改源代码,编译好services.odex,然后使用二进制编辑工具更改这四个字...Dec. 2, 2016, 9:27 p.m.作者:zachary分类:Android阅读(1835)评论(0)