- 博客(29)
- 资源 (32)
- 收藏
- 关注
转载 Android 的lowmemorykiller机制
转自:http://blog.youkuaiyun.com/u012440406/article/details/51960387最近在处理一些lowmemorykiller相关的问题,于是对lowmemorykiller机制作了一个简单的了解。在这里总结一下。首先,是lowmemorykiller的一些背景知识。众所周知,Andorid的实质是一个
2017-12-14 22:55:49
2226
原创 Linux内核内存压缩技术
为什么需要内存压缩说到压缩这个词,我们都可以想到是降低占用空间,使同样的空间可以存放更多的东西,如我们平时常用的压缩文件等。内存压缩同样也是为了节省内存。 内存无论是多大,总是不够用的(至少目前如此),而当系统内存紧张的时候,系统会将匿名页swap出去disk(flash).而这涉及到IO操作,这RAM操作速度不是一个数量级的。因此,如果频繁地做IO操作,不仅影响flash使用寿命,还严重影响系统
2017-12-02 22:59:01
6736
原创 git如何合并两个仓库
如何合并两个仓库假设现在有两个repo:repo1,repo2,每个repo中都已经有一堆提交记录了,现在想把repo2中的记录合并到repo1中,命令如下:cd repo1 git remote add other ../repo2 git fetch other git checkout -b repo2 other/master git checkout master git mer
2017-10-19 15:01:02
6856
原创 Linux输入子系统
为何需要input子系统Linux系统支持的许多设备,都是输入性的设备,如按键、触摸屏、键盘、鼠标。本质上都是一个个的字符设备驱动,Linux系统为这些设备统一管理实现了input子系统,方便驱动和应用的开发。input子系统软件架构linux输入子系统主要分三层:driver层,core层, event hander层。 Driver层根据core层提供的接口,向上报告发生的按键动作。然后cor
2017-10-16 22:22:33
356
原创 Linux并发与同步(二)RCU
概述RCU是Read-Copy-Update的缩写。于linux2.5版本开发期间加入并顺利被社区接纳。现在广泛应用于指针及内核链表的保护。RCU相对其它并发访问保护的锁,具体更好的性能,因为严格意义上来说,RCU并不是一个锁。但RCU对内存是有一定的开销的。为何需要RCU性能问题,无需获得锁,性能更好。读写线程可并发执行。RCU使用接口rcu_read_lock() //RCU读临界区开始
2017-10-15 15:43:01
798
原创 Linux电源管理(六)cpuhotplug
概述目前处理器大多是多核,4核和8核等。linux在初始化的时候会调用开启smp多核。最后,空闲的cpu会进入cpuidle状态。cpuhotplug,可以根据cpu负载的情况,自动开核,做到性能与功耗的平衡。实现原理定期采样计算cpu负载cpuhotplug线程这里描述是的cmp的情况,如果big.LITTLE情况还会有些差异。
2017-10-14 14:11:18
3098
1
原创 内存映射mmap
概述应用与设备驱动之间数据交互,很多时候都使用copy_to_user与copy_from_user。但如果在追求高性能的驱动上,这种拷贝显然不是最佳的做法。 Linux内核提供了一种内存映射的机制,它主要完成将设备的地址空间映射到用户空间或者直接使用用户空间中的地址,这样做的目的显然是为了提升系统性能。设备缓存与设备内存的概念设备缓存:由驱动管理的位于RAM中的一段内存区域。设备内存:设备所
2017-10-11 21:30:46
950
转载 图说“数字签名”与“数字证书”
今天,我读到一篇好文章。它用图片通俗易懂地解释了,"数字签名"(digital signature)和"数字证书"(digital certificate)到底是什么。我对这些问题的理解,一直是模模糊糊的,很多细节搞不清楚。读完这篇文章后,发现思路一下子就理清了。为了加深记忆,我把文字和图片都翻译出来了。文中涉及的密码学基本知识,可以参见我以前的笔记。=======
2017-10-08 22:01:00
299
转载 ARM TrustZone技术简介(四)(TrustOS)
转自:http://blog.youkuaiyun.com/Alex___Zhao/article/details/77608018TrustZone技术在物理上可以把一个ARM处理器核分时复用为两个不同的处理器,在处理器的非安全部分运行的是标准的Linux系统,而在另外一侧运行的是安全强相关的功能。而由于ARM TrustZone的硬件隔离作用,其相互之间的交互只能通过机器指令SMC来
2017-10-08 20:50:24
1332
转载 ARM TrustZone技术简介(三)(BL31 Secure Monitor简介)
转自:http://blog.youkuaiyun.com/Alex___Zhao/article/details/76794586在使用TrustZone技术的嵌入式设备当中,无法避免的需要解决从非安全侧切换到安全侧的问题,而为了完成这个切换,需要一个专用的进行非安全上下文和安全上下文切换的固件,这个固件一般我们称为arm trust firmware,在ARM官方维护的github中我
2017-10-08 20:48:59
3940
转载 ARM TrustZone技术简介(二)
转自:http://blog.youkuaiyun.com/Alex___Zhao/article/details/76695492对具有TrustZone的ARM处理器来说,为了保证运行其在EL3,安全侧和非安全侧的不同软件系统,其一般分为多个部分被bootloader分别进行加载运行,其流程在Linaro的Trust Firmware中有介绍,其基本流程如下图所示当
2017-10-08 20:47:19
1084
转载 ARM TrustZone技术简介(一)
转自:http://blog.youkuaiyun.com/Alex___Zhao/article/details/76647377有幸做过将近1年时间的TrustZone OS,这里对通用的TrustZone硬件技术做一点记录,来记录自己曾经工作过的领域。TrustZone是ARM处理器特有的一个安全特性,其简介可以在ARM的官方网站上找到https://ww
2017-10-08 20:45:29
6092
原创 Linux电源管理(五)thermal
thermal子系统概述thermal子系统是内核提供的温控管理框架,一套软件温度解决方案,配合ic内部温度传感器,对ic温度进行管控,保证系统稳定性。 thermal系统多用于对ic内部的重点发热模块的功能管控,如cpu、gpu。 thermal sensor驱动负责读取硬件温度sensor的温度,并传给thermal 子系统,thermal子系统将根据调控对象的温度,决定是否触发对应的冷却措
2017-10-07 22:39:07
12968
原创 Android访问硬件的方法
Android应用访问硬件的两种方法我们知道,Android应用由java编写,而java不能直接访问硬件,那么Android应用如何访问硬件? 一般有两个访问硬件的方法:JNI访问硬件访问服务JNI访问JAVA APP—>JNI_OnLoad()加载C库—->将JAVA三个地方法与C库函数进行关联并注册—->调用JAVA本地Native方法就可以访问C库的C接口——>进而访问硬件驱动中的o
2017-10-07 14:35:55
5490
1
转载 图解Android系统的启动过程
转自博客:http://ticktick.blog.51cto.com/823160/1659473看到网上一篇博客写Android启动流程,讲的还是比较清晰,这里就转载过来了,感谢前人的总结分享。学习任何软硬件系统,研究系统启动过程都是一种非常有效地起步手段,搞Android内核开发也不例外。网上有很多文章对Android启动相关代码进行分析和走读,大家可以先搜索阅读一下,我
2017-10-06 22:25:01
558
原创 Android调试方法(一)adb使用
adb简介ADB全称Android Debug Bridge, 是android sdk里的一个工具, 用这个工具可以直接操作管理android模拟器或者真实的andriod设备。主要用于Android调试。adb功能运行设备的shell(命令行)计算机和设备之间上传/下载文件将本地apk软件安装至模拟器或android设备常用命令查看设备adb devices 这个命令是查看当前连接的
2017-10-06 21:55:08
1151
原创 Linux电源管理(四)CPUFreq
CPUFreq简介CPUFreq是一种实时的电压和频率调节技术,也叫DVFS(Dynamic Voltage and Frequency Scaling)动态电压频率调节。为何需要CPUFreq随着技术的发展,CPU的频率越来越高,性能越来越好,芯片制造工艺也越来越先进。但高性能的同时也带来高发热。其实移动嵌入式设备并不需要时刻保持高性能。因此,需要一种机制,实现动态地调节频率和电压,以实现性能和功
2017-10-03 18:46:13
8647
原创 Linux电源管理(三)电源管理接口
概述Linux电源管理中,相当多的部分是在处理Hibernate、Suspend、Runtime PM等功能。而这些功能都基于一套相似的逻辑,即“Power management interface”。 该Interface的代码实现于“include/linux/pm.h”、”drivers/base/power/main.c”等文件中。 主要功能是:对下,定义Device PM相关的回调函数
2017-10-03 16:21:06
1288
原创 Linux电源管理(二)系统reboot/shutdown过程
概述计算机包括嵌入式设备,关机和重启是常见的两个操作。本文主要主要描述这两个动作背后和流程和实现。下机我们先看一下,linux支持的类似关机重启这样的命令的其它相关命令。/* * Commands accepted by the _reboot() system call. * * RESTART Restart system using default command and mod
2017-10-03 12:35:36
3631
原创 Linux电源管理(一)电源管理系统架构
概述Linux 电源管理非常复杂,牵扯到系统级的待机、频率电压变换、系统空闲时的处理以及每个设备驱动对于系统待机的支持和每个设备的运行时电源管理,可以说和系统中的每个设备驱动都息息相关。 对于消费电子产品来说,电源管理相当重要。因此,这部分工作往往在开发周期中占据相当大的比重,下图大体可以归纳为如下几类: 1. CPU 在运行时根据系统负载进行动态电压和频率变换的CPUFreq 2. CPU
2017-10-02 21:07:23
4026
原创 Linux内存管理之页面回收
概述有内存页面分配,自然就有内存页面回收。一种是主动释放内存,另一种是内核去回收内存页面。在linux内存充足时,内核会尽量多地使用内存作为文件缓存(page cache)从而提高系统性能,但当内存紧张时,文件缓存页面会被丢弃或回写到块设备中,然后释放出物理内存。当然这会在一定程度上影响系统的性能。Linux内核将很少使用到的内存换出去交换(swap)分区,以便释放内存,这个机制称为页交换(wapp
2017-10-02 20:06:34
1053
原创 Linux内存管理之slab分配器
slab分配器的目的在内核中,经常会发生对有限的几种数据结构频繁的分配内存和回收内存,比如进程描述符struct task_struct,索引节点对象struct inode等等。相比4KB或者8KB的物理页而言,这些对象往往较小,例如进程描述符一般只有1.7KB左右,索引节点对象则更小。那么对于这种高频发生的小数据结构的内存分配和回收,是否有可能进行优化呢?计算机科学家Jeff Bonwick早已
2017-10-02 15:06:58
569
原创 Linux内存管理之物理页面分配
概述页面分配器是Linux内核内存管理中最基本的分配器,基于伙伴系统算法(buddy)和zone-base的设计理念。物理页面分配接口alloc_pagesalloc_pages接口最终会调用到__alloc_pages_nodemask。struct page *__alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order,
2017-10-02 14:34:29
919
原创 linux内存管理之页表
什么是页表页表就是用于将虚拟地址转换为物理地址的转换关系表。访问虚拟地址时,计算机通过页表找到对应的实际物理地址访问。为何需要多级页表目前在linux中采用4级页表,ARM32采用2级页表,ARM64采用4级页表。但linux是一个通用性的系统,当ARM32时2级页表也是使用linux的4级页表机制,只是将其它两级页表转换不做任何处理。 那么为什么需要多级页表呢?节省内存空间。二级页表可以在需要的
2017-10-01 21:50:00
2808
原创 linux调度之SMP负载均衡
SMP调度背景 在多处理器系统上,内核必须考虑好几个额外的问题,以确保良好的调度。CPU负荷必须尽可能公平地在所有处理器上共享。 进程与系统中某些处理器的亲合性(affinity)必须是可设置的。 内核必须是能够将进程从一个CPU迁移到另一个上。linux SMP调度就是将进程安排/迁移到合适的CPU中去,保持各CPU负载均衡的过程。如下图所示。SMP调度时机scheduler_tick
2017-09-24 17:19:02
3905
原创 Linux并发与同步(一)原子操作/spinlock/mutex
背景在linux内核和驱动代码中,需要对共享数据进行保护,防止共度资源被并发访问而发生数据覆盖,被访问数据不一致的情况.这些情况可能会造成系统不稳定,且很难跟踪调试.临界区: 访问和操作共享数据的代码段.临界资源: 共享的数据(静态局部变量,全局变量,buffer, 链表等).并发源:访问临界区的线程或执行路径.内核4种并发源:中断和异常 软中断和taskelt内核抢占多处理器并发执
2017-09-23 23:44:43
1224
原创 linux死锁检测与调试
linux死锁检测与调试什么是死锁D 状态死锁和 R 状态死锁soft lockup 和 hard lockuplinux内核死锁如何调试相关内核配置选项Linux检测死锁实现分析soft lockup检测原理hard lockup检测原理常见死锁错误如何避免死锁参考资料linux死锁检测与调试什么是死锁? 死锁是指多个进程(线程)因为长久等待已被其他进程占有的的资源而陷入阻
2017-09-20 21:56:21
4728
原创 Git学习(二)----Git分支
1. git branch xxx创建一个新的分支2. git checkout 切换到分支3. git checkout -b新建并切换到该分支4. git merge 合并分支5. 冲突的合并--当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。6. git branch –d 删除本地
2016-02-23 21:34:50
237
原创 Git学习(一)-----Git基础
Git学习(一) 2016-02-221. 取得项目的git仓库1) git init 对现有的某个项目开始用git管理,初始化后,项目目录下会出现一个.git文件夹。注意不要随便修改此文件夹。2) git clone 对现有仓库的克隆,例如:git clone git://github.com/schacon/grit.git本地已经有了一个git源码的仓库。同样,
2016-02-22 22:31:47
302
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人