- 博客(108)
- 资源 (6)
- 收藏
- 关注
原创 Linux设备驱动第七篇:高级字符驱动操作之阻塞IO
我们之前介绍过简单的read,write操作,那么会有一个问题:当驱动无法立即响应请求该怎么办?比如一个进程调用read读取数据,当没有数据可读时该怎么办,是立即返回还是等到有数据的时候;另一种情况是进程调用write向设备写数据,如果缓冲区满了或者设备正忙的时候怎么办,是立即返回还是继续等待直到设备可写?这种情况下,一般的缺省做法是使进程睡眠直到请求可以满足为止。本篇就介绍遇到这类问题驱动的处理
2015-07-31 14:27:33
2128
1
原创 Linux设备驱动第六篇:高级字符驱动操作之iotcl
在之前我们介绍了如何实现一个简单的字符设备驱动,并介绍了简单的open,close,read,write等驱动提供的基本功能。但是一个真正的设备驱动往往提供了比简单读写更高级的功能。这一篇我们就来介绍一些驱动动中使用的一些高级的操作的实现。大部分驱动除了提供对设备的读写操作外,还需要提供对硬件控制的接口,比如查询一个framebuffer设备能提供多大的分辨率,读取一个RTC设备的时间,设
2015-07-24 15:09:24
1958
原创 Android binder学习一:主要概念
要看得懂android代码,首先要了解binder机制。binder机制也是android里面比较难以理解的一块,这里记录一下binder的重要概念以及实现,作为备忘。部分内容来源于网上,如有侵权,请及时告知。1.binder通信机制概述binder通信是一种client-server的通信结构,1.从表面上来看,是client通过获得一个server的代理接口,对server
2015-07-17 11:03:45
1402
原创 Android GUI系统学习1:Gralloc
Gralloc模块是从Android Eclair(android 2.1)开始加入的一个HAL模块,Gralloc的含义为是Graphics Alloc(图形分配)。他对上为libui提供服务,为其分配显存,刷新显示等。对下对framebuffer进行管理。gralloc代码通常位于hardware/libhardware/modules/gralloc目录下。包含以下几个文件:
2015-07-10 10:55:03
2078
原创 Android HAL模块实现
1. HAL介绍Android的HAL(Hardware Abstract Layer硬件抽象层)是为了保护一些硬件提供商的知识产权而提出的,是为了避开linux的GPL束缚。思路是把控制硬件的动作都放到了Android HAL中,而linux driver仅仅完成一些简单的数据交互作用,甚至把硬件寄存器空间直接映射到user space。而Android是基于Aparch的license
2015-07-03 10:56:00
1750
原创 linux进程间通信总结
1. 概览本文记录经典的IPC:pipes, FIFOs, message queues, semaphores, and shared memory。2. PIPES管道是UNIX系统IPC的最古老形式,并且所有的UNIX系统都提供此通信机制。但管道有两个局限性:历史上,它们是半双工的,现在某些系统提供全双工管道。它们只能在共有祖先的进程间使用。通常,一个管道由一
2015-06-26 11:14:21
7927
2
原创 Linux read系统调用
最近一个项目做了一个模拟u盘的设备,但是在read虚拟u盘的内容时必须每次都从磁盘内读取,而不是从系统的cache中读取,由于这个问题,就查资料看了下read的系统调用,以及文件系统的一些内容。由于文件系统涉及面较广,例如虚拟文件系统(VFS),页缓存,块缓存,数据同步等内容,不可能全部分析到位,这里只记录和read有关的两种使用方式。cached IO和direct IO。1. 什么是系
2015-06-19 10:03:07
2793
转载 Bitmap那些事之内存占用计算和加载注意事项
前言:本来我是做电视应用的,但是因为公司要出手机,人员紧张,所以就抽调我去支援一下,谁叫俺是雷锋呢!我做的一个功能就是处理手机中的应用ICON,处理无非就是美化一下,重新与底板进行合成和裁剪,用到了很多Bitmap的知识。本来之前一直想写一些关于Bitmap的博客,正好这是个机会,因此Bitmap那些事系列博客诞生了。这个系列我会把学习Bitmap的一些知识发布出来供大家参考和交流。
2015-04-14 19:28:28
955
转载 android apk 自我保护技术-加密apk
经过了忙碌的一周终于有时间静下来写点东西了,我们继续介绍android apk防止反编译技术的另一种方法。前两篇我们讲了加壳技术(http://my.oschina.net/u/2323218/blog/393372)和运行时修改字节码(http://my.oschina.net/u/2323218/blog/396203),如果有不明白的可以查看我的博客的前两篇中关于这两种技术的介绍。接下来我们
2015-04-13 19:43:14
1329
转载 android apk 防止反编译技术第二篇-运行时修改字节码
上一篇我们讲了apk防止反编译技术中的加壳技术,如果有不明白的可以查看我的上一篇博客http://my.oschina.net/u/2323218/blog/393372。接下来我们将介绍另一种防止apk反编译的技术-运行时修改字节码。这种方法是在工作中在实现app wrapping时,看到国外的一篇关于android 安全的介绍实现的并且独创。下面我们来介绍一下这种方法。
2015-04-12 21:39:01
1649
转载 android apk 防止反编译技术第一篇-加壳技术
做android framework方面的工作将近三年的时间了,现在公司让做一下android apk安全方面的研究,于是最近就在网上找大量的资料来学习。现在将最近学习成果做一下整理总结。学习的这些成果我会做成一个系列慢慢写出来与大家分享,共同进步。这篇主要讲apk的加壳技术,废话不多说了直接进入正题。一、加壳技术原理 所谓apk的加壳技术和pc exe的加壳原理一样,就
2015-04-12 21:33:27
1248
原创 linux设备驱动第五篇:驱动中的并发与竟态
在上一篇介绍了linux驱动的调试方法,这一篇介绍一下在驱动编程中会遇到的并发和竟态以及如何处理并发和竞争。首先什么是并发与竟态呢?并发(concurrency)指的是多个执行单元同时、并行被执行。而并发的执行单元对共享资源(硬件资源和软件上的全局、静态变量)的访问则容易导致竞态(race conditions)。可能导致并发和竟态的情况有:SMP(Symmetric Multi-Pr
2015-04-11 13:23:10
3442
原创 linux设备驱动第四篇:从如何定位oops的代码行谈驱动调试方法
上一篇我们大概聊了如何写一个简单的字符设备驱动,我们不是神,写代码肯定会出现问题,我们需要在编写代码的过程中不断调试。在普通的c应用程序中,我们经常使用printf来输出信息,或者使用gdb来调试程序,那么驱动程序如何调试呢?我们知道在调试程序时经常遇到的问题就是野指针或者数组越界带来的问题,在应用程序中运行这种程序就会报segmentation fault的错误,而由于驱动程序的特殊性,出现此类
2015-04-02 07:48:17
3975
1
原创 linux设备驱动第三篇:写一个简单的字符设备驱动
在linux设备驱动第一篇:设备驱动程序简介中简单介绍了字符驱动,本篇简单介绍如何写一个简单的字符设备驱动。本篇借鉴LDD中的源码,实现一个与硬件设备无关的字符设备驱动,仅仅操作从内核中分配的一些内存。下面就开始学习如何写一个简单的字符设备驱动。首先我们来分解一下字符设备驱动都有那些结构或者方法组成,也就是说实现一个可以使用的字符设备驱动我们必须做些什么工作。1、主设备号和次设备号对于
2015-03-28 19:05:34
33449
2
转载 chromium浏览器开发系列第一篇:如何获取最新chromium源码
背景: 最近摊上一个事儿,领导非要让写一篇技术文章,思来想去,自己接触chrome浏览器时间也不短了,干脆就总结一下吧。于是乎,本文顺理成章。由于有些细节必需描述清楚,所以这次先讲如何拿到chromium的源码,下次直接把编译过程写出来,供大家参考。前期准备: 之前的chromium源码都是用svn来维护,所以源码地址网上贴的到处都是,我看了一下,svn的版本最新的
2015-03-26 19:59:06
1827
1
转载 Android Metro风格的Launcher开发系列第一篇
前言:从毕业到现在已经三年多了,回忆一下这三年基本上没有写过博客,总是觉得忙,没时间写,也觉得写博客没什么大用。但是看到很多大牛们都在写博客,分享自己的东西,所以嘛本着向大牛看齐,分享第一,记录第二的目的开始写一个系列的文章,我会把我做一个项目的详细过程分享给大家,供大家参考和交流。好了,评书开讲!可能大家做Android机顶盒或者Android电视开发的比较少,这类开发基本上都是基于源码
2015-03-23 21:52:55
1020
原创 linux设备驱动第二篇:构造和运行模块
printk的级别日志级别一共有8个级别,printk的日志级别定义如下(在include/linux/kernel.h中): #define KERN_EMERG 0/*紧急事件消息,系统崩溃之前提示,表示系统不可用*/ #define KERN_ALERT 1/*报告消息,表示必须立即采取措施*/ #define KERN_CRIT 2/*临界条件,通常涉及严重的硬件或软
2013-08-28 10:03:58
3311
原创 linux设备驱动第一篇:设备驱动程序简介
设备驱动程序在内核中的角色:他们是一个个独立的“黑盒子”,使某个特定的硬件响应一个定义良好的内部编程接口,这些接口完全隐藏了设备的工作细节。(说白了,驱动程序除了对外提供特定的接口外,任何实现细节对应用程序都是不可见的。)用户的操作通过一组标准化的调用执行,而这些调用独立于特定的驱动程序。驱动程序的任务是把这些标准化调用映射到实际硬件的设备特有操作上。在编写驱动程序时,程序员应该特别注意下面这
2013-08-24 21:08:28
6545
原创 再读LDD3前言
毕业两年了,这一段时间对于未来的技术方向以及后续的个人发展都有一些迷茫。毕业后的工作多是与平台相关,驱动相关,现在决定在这一段迷茫期把LDD3这本经典书在读一遍,并利用博客把读的过程记录下来,按章节为单位,由于个人语言组织能力不强,主要是摘抄每张的主题,中心思想。用文章记录,一个是督促自己要看下去,另一个是作为以后备忘查询。第一次看这个书是大三的时候,那时候很多东西不懂,虽然看完了,整本书的学
2013-08-24 19:49:03
1164
转载 Android.mk 简介
Android.mk文件是GNU Makefile的一小部分,它用来对Android程序进行编译。因为所有的编译文件都在同一个 GNU MAKE 执行环境中进行执行,而Android.mk中所有的变量都是全局的。因此,您应尽量少声明变量,不要认为某些变量在解析过程中不会被定义。一个Android.mk文件可以编译多个模块,每个模块属下列类型之一: 1)APK程序
2013-05-14 16:02:18
856
原创 android中usb设备驱动不能自动创建设备节点
调试一个usb驱动,发现在android下无法自动创建设备节点,手动创建设备节点可以正常访问硬件。后来发现是在init进程里面对一些usb设备进行了过滤。在system/core/init/devices.c 中的下面函数中。static void handle_generic_device_event(struct uevent *uevent){ char *base;
2013-04-28 17:20:03
3258
原创 用户层操作硬件寄存器等(通过/dev/mem)
直接贴代码:#include #include #include #include #include #include #include #define AMLOGIC_NORMAL_BOOT 0x0#define AMLOGIC_FACTORY_RESET_REBOOT 0x01010101#define AMLOGIC_UPDATE_REBOOT 0x02020202
2013-04-17 14:17:54
2774
原创 android 应用程序获取root权限的一个方法
问题:我遇到的问题是,在setting中我要操作/dev/mem设备,在一个寄存器中写值。对/dev/mem的操作毫无疑问是需要root权限的。开始我的做法是使用jni方法。添加一个jni调用然后setting调用。但是就算我把/dev/mem的权限模式设置为777,在setting中依旧无权限打开/dev/mem。解决方法:把操作/dev/mem的部分写成一个独立的应用程序,然后
2013-04-17 14:03:13
3082
转载 两分钟学会在GitHub托管代码
本篇博客针对不会Git的小童鞋,大神们可以绕过,错误之处谢谢指正;关于GitHub的强大此处不在说明,知道GitHub也有一段时间了,但是一直苦于不会使用。本篇文章介绍的是如何将工程代码托管到上面;如果你还没注册GitHub账号请到https://github.com/上注册如果你已经注册GitHub账号,在你的电脑上安装了GitHub,而一直还没上传过代码
2013-03-20 11:25:43
1078
转载 android repo 切换分支
查看可切换的分支cd .repo/manifestsgit branch -a | cut -d / -f 3以 gingerbread-release 分支为例repo init -b gingerbread-release repo sync (not needed if your local copy is up to date)repo start ging
2013-03-19 11:09:27
2694
原创 创建linux内核git仓库
前一段时间创建linux内核的git仓库,遇到了几个很棘手的问题。这里记录一下。我使用的内核版本号为linux-3.3.8-1.3,如果正常的话,生成的include/generated/utsrelease.h文件内容应该为:#define UTS_RELEASE "3.3.8-1.3"。第一个问题:使用git初始化仓库,提交一次后,include/generated/utsre
2013-03-13 14:30:12
3510
2
原创 android 音乐播放器无法删除U盘上音乐
工作中遇到一个问题,音乐播放器可以播放U盘里面的歌曲,但是无法删除(删除不会报错,但只是从播放列表中删掉了,发现U盘里面的文件还在)。怀疑是权限的问题。查看U盘的挂载目录发现:root@android:/ # ls -l /mnt/removable/ d---rwxr-x system media
2013-01-30 15:24:45
3406
原创 dhcpcd参数详解与总结
SYNOPSIS dhcpcd [-bdeknpqABDEGKLTV] [-c, --script script] [-f, --config file] [-h, --hostname hostname] [-i, --vendorclassid vendorclassid] [-l, --leasetime seconds
2012-12-28 10:49:44
36669
转载 Linux system函数返回值
原帖见:http://blog.csdn.net/cheyo/article/details/6595955例:[cpp] view plaincopystatus = system("./test.sh"); 1、先统一两个说法:(1)system返回值:指调用system函数后的返回值,比
2012-12-25 14:23:12
1129
原创 DHCP协议、报文,dhcpcd分析
第一部分 DHCP工作过程DHCP的工作过程主要分为以下六个阶段: 发现阶段,即DHCP客户端寻找DHCP服务器的阶段。DHCP客户端首先以广播方式发送DHCP DISCOVER发现信息来寻找DHCP服务器(因为DHCP服务器的IP地址对于客户端来说是未知的),即客户端向地址255.255.255.255发送特定的广播信息。请求信息主要包含客户端的网卡MAC地址还有客户端的计算机名
2012-12-18 13:58:02
13382
1
原创 HDMI基础
一、HDMI基础知识 HDMI(High-DefinitionMultimedia Interface)又被称为高清晰度多媒体接口,是首个支持在单线缆上传输,不经过压缩的全数字高清晰度、多声道音频和智能格式与控制命令数据的数字接口。HDMI接口由Silicon Image美国晶像公司倡导,联合索尼、日立、松下、飞利浦、汤姆逊、东芝等八家著名的消费类电子制造商联合成立的
2012-12-07 16:18:47
1870
原创 C程序的存储布局
一个由 C/C++编译的程序占用的内存(memory)分为以下几个部分:1. 程序代码区(.text):存放函数体的二进制代码 。2. 文字常量区(.rodata):常量字符串就是放在这里的,程序结束后由系统释放(rodata—read only data)。3. 全局区/静态区(static):全局变量 和 静态变量的存储是放在一块的。初始化的全局变量和静态变量在一块区域(.rwd
2012-12-03 10:52:13
987
原创 UBI文件系统遇到的问题
记录使用UBI遇到的一些问题,会补充。1.UBI warning: ubi_scan: 35 PEBs are corruptedcorrupted PEBs are: 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 84 85 86ker
2012-11-22 15:04:12
3715
2
转载 浅析android应用增量升级
原地址:http://blog.csdn.net/hmg25/article/details/8100896 很久没有更新博客了,真是堕落啊,几次想提起笔,却总是被各种琐事耽搁,以后会多写文章记录点滴。背景 随着android应用体积的不断增大,以及应用版本发布的不断更迭,用户的升级成了一个问题,google也意识到不断更新应用对用户流量的损耗,在
2012-11-20 14:30:59
2036
原创 recovery汉化实现
仅当作学习笔记。步骤:1.制作字库首先制作汉字的图片字库,可使用bitmap font generator软件制作,然后用利用GIMP图片编辑器把图片字库转换为C源文件,最后利用得到的C文件与minui/mkfont.c文件一起编译,执行后就会得到字库头文件。注意修改结构体名以及相应cwidth和cheight(字符长宽)。2.修改代码用刚才制作的字库头文件替换原有的字库头文件
2012-11-16 10:52:27
8964
8
原创 linux内核中对nand的坏块管理
闲来无事,追踪了下linux内核中对nand的坏块管理代码。大致记录一下。内核中对nand的坏块管理是在nand的驱动中实现的,一般情况下,我们在实现nand控制器的驱动时不用考虑坏块的管理,这些机制已经在nand驱动的通用框架中实现了,我们要做的就是在nand驱动的框架上对接上nand控制器私有的操作与参数就可以了,例如读写函数以及nand控制器支持的ecc布局等。当然,这里主要是分析坏块管
2012-11-14 14:46:15
8030
1
原创 git 创建远程仓库
1.创建一个git仓库$ mkdir gittest$ cd gittest/$ git initInitialized empty Git repository in /home/xxx/workspace/code_celloct/gittest/.git/2.想仓库添加一个文件并提交到本地$ echo "first file" >> README$ ls
2012-11-12 16:17:31
82324
1
转载 linux中断处理------顶半部与底半部
转自http://my.oschina.net/fzliu/blog/33028尽管有些设备仅通过它们的I/O寄存器就可以得到控制,但现实中的大部分设备却比这复杂一些。设备需要与外部世界打交道,如旋转的磁盘,绕卷的磁带,远距离连接的电缆等。这些设备的许多工作通常是在与处理器完全不同的时间周期内完成的,并且总是要比处理器慢。这种让处理器等待外部事件的情况总是不能令人满意,所以必须有一种方法可
2012-11-07 09:11:42
9811
3
原创 NAND速度优化探索
使用的硬件平台为博通7231,NAND型号为K9GAG08U0E。最初的情况是这样的,此款cpu的nand控制器不支持DMA,另外默认的主频是108M的,经过测试flash的读速度为4M/s左右,对于系统性能有一定的限制(软件启动速度,系统开机速度等),后来更改nand控制器主频为206M,CE信号的低、高电平时间适量缩短(这个是最重要的,这个缩短之后,一个读周期就会大大缩短,比提高主频效果还
2012-10-31 11:01:20
2838
原创 MIPS 在linux中的内存映射
如图:一些说明:1.内核从什么地方开始运行:MIPS Linux内核的代码构建为在kseg0区运行;虚拟地址从0x80000000向上。这个范围的地址仅仅是一个到物理内存低512MB的窗口,无需TLB管理。2.异常入口点:大多数MIPS CPU中,这都是由硬件布线固化到kseg0底部附近。最新的CPU可以提供EBase寄存器,对异常入口重新定位。主要是让多个共享
2012-10-30 17:34:29
5908
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人