自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(151)
  • 资源 (3)
  • 收藏
  • 关注

原创 测试framebuffer

static GGLContext *gr_context = 0;static GGLSurface gr_framebuffer[2];static unsigned gr_active_fb = 0;static int gr_fb_fd = -1;static int gr_vt_fd = -1;static struct fb_var_screeninfo v

2013-12-04 22:40:59 2513

原创 kernel hexdump分析 (2.0)

有的时候print_hex_dump_bytes循环打印很多信息的时候(大于1K)用UART串口打印的信息总是会有丢失,估计是printk缓冲区的问题把,具体原因不是太清楚于是自己写了个比较笨的dump函数,问题得到解决://每次打印128个字节(当然你也可以打印更多),只调用一次printk , // 而 print_hex_dump_bytes 则 最多32个字节 就调用一次p

2013-12-04 22:35:01 1996

原创 kernel hexdump分析

驱动调试中,很多时候是二进制的,这个时候hexdump就是个非常有用的工具了。不要再自己去实现类似的功能,kernel代码里面就有:参考: kernel/lib/hexdump.c// 0Xxx转换成 ASCII ,实现简单巧妙const char hex_asc[] = "0123456789abcdef";#define hex_asc_lo(x) hex_asc[((x)

2013-12-04 22:31:33 5151

原创 android recovery模式选项中索引改进

有个客户有特殊要求,需要去掉recovery模式的某些选项#define ITEM_REBOOT 0#define ITEM_APPLY_SDCARD 1#define ITEM_WIPE_DATA 2#define ITEM_WIPE_CACHE 3#ifdef SUPPORT_DATA_BACKUP_RESTOR

2013-12-03 22:36:45 1326

原创 ARM架构kprobe应用及实现分析(11 原理)

1 拷贝探测的code , 插入特殊指令(ARM是插入未定义指令)2 CPU运行到未定义指令,会产生trap, 进入ISR,并保存当前寄出去的状态  通过LINUX的通知机制,会执行“pre_handler”(前提是你已经注册过了)3 进入单步模式,运行你备份出来的代码 (此代码运行的是拷贝出来的,防止别的CPU也恰巧运行到此位置)4 单步模式后,运行“post_handler

2013-12-03 22:31:02 3118

原创 android flash 下载完整性检查

由于厂线下载都是大批量的下载难免有下载失败的情况(认为操作或nand / emmc本身的缺陷),故下载校验就显得尤为重要:

2013-12-03 22:26:24 1702

原创 如何mount ext4 分区

mount  -t ext4       target_path/your.img           ./mount_dir 上面mount的时候有可能失败: 第一中,没有权限: sudo  mount  -t ext4       target_path/your.img           ./mount_dir 第二中,由于你的your.img不是一个真正的分区后者设备:

2013-11-28 21:46:23 8612

原创 preloader阶段memory测试

假如MEMORY出现硬件问题的话,会导致系统崩溃,有必要在preloader阶段,大概检测下MEMORY是否读写正常:void mem_init (void){ int i = 0; // 目前测试大小为 #define MEM_TEST_SIZE (0x2000) // 起始位置为 : 0x80000000 ,这个地址一

2013-11-28 21:45:49 1866

原创 取得下个参数宏定义

#define skip(n) do { argc -= (n); argv += (n); } while (0)实际当中用的时候,只需要:skip(1);   //就可以取得下个参数

2013-11-27 22:14:57 1170

原创 tail命令实现截取掉文件开始的一部分字节

实现把文件开始的1024个字节截取(注意参数N /  +N的区别):tail -c  +1024 ./secro_dump.bin > cut_secro.im

2013-11-27 22:11:47 4453

原创 ARM架构显示寄存器的详细信息

void show_regs(struct pt_regs * regs){ printk("\n"); printk("Pid: %d, comm: %20s\n", task_pid_nr(current), current->comm); __show_regs(regs); dump_stack();} void __show_regs(struct p

2013-11-27 22:07:29 2313

原创 Uboot 怎么添加commandline参数

参考:bootable/bootloader/uboot/arch/arm/lib/bootm.c有的时候你需要往kernel传入更多的参数,如uboot自身的版本号,或者LCM的相关驱动参数int do_nand_boot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]){ ..... //加入preloader

2013-11-27 22:04:59 2998

原创 linux reset 分析

遇到个系统reset的问题,简单看了下kernel reset的代码,简单记录下:简单看下log:[   25.900749] Restarting system with command 'recovery'.[   25.901449] arch_reset: cmd = recovery[   25.901981] wdt_arch_reset called@Kernel

2013-11-27 22:02:25 3988

原创 minicom 轻松使用

由于preloader / uboot / kernel 调试都会用到串口输出调试信息, 这里简单介绍下minicom的使用 ./minicom  -s  之后选择 serial port setup (设置波特率,停止位等基本信息)  配置正确的设备文件  dmesg : 当时kernel log 太多的话可以先:    sudo  dmesg –c

2013-11-20 23:10:20 1518

翻译 fs mtd driver架构美图

2013-11-20 22:59:43 1565

原创 获取kernel各个数据段,代码段的地址及范围

有的时候需要知道代码段,数据段,字符串段,已经初始话数据段等信息记得添加: #include printk("_text is %08x--%08x , \ _data is %08x--%08x , \ __bss_start is %08x--%08x , \ __init_begin is %08x--%08x ,

2013-11-20 22:54:28 4752 2

原创 Uboot 向cmdline添加更多的参数

参考:bootable/bootloader/uboot/arch/arm/lib/bootm.c有的时候你需要往kernel传入更多的参数,如uboot自身的版本号,或者LCM的相关驱动参数int do_nand_boot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]){ ..... //加入preloader

2013-11-20 22:49:21 3859

原创 ARM架构kprobe应用及实现分析(10 trap中断注册及回调)

首先可以看下探测点检测到非法指令时候,产生中断的dump_stack:symbol] (dump_backtrace+0x0/0x10c) from [] (dump_stack+0x18/0x1c)symbol] (dump_stack+0x0/0x1c) from [] (handler_pre+0x144/0x19c [kk])symbol] (handler_pre+0x0/0

2013-11-19 22:55:29 2135

原创 ARM架构kprobe应用及实现分析(9.0 arch_prepare_kprobe平台相关注册)

// ARM 架构注册kprobeint __kprobes arch_prepare_kprobe(struct kprobe *p){ kprobe_opcode_t insn; kprobe_opcode_t tmp_insn[MAX_INSN_SIZE]; unsigned long addr = (unsigned long)p->addr; bool thumb

2013-11-19 22:48:54 1991

原创 ARM架构kprobe应用及实现分析(8.0 register_kprobe实现)

int __kprobes register_kprobe(struct kprobe *p){ int ret = 0; struct kprobe *old_p; struct module *probed_mod; kprobe_opcode_t *addr; //返回要探测的决定地址 addr = kprobe_addr(p); if (IS_

2013-11-19 22:42:43 1993

原创 ARM架构kprobe应用及实现分析(7.0 自动显示参数的值)

通过前面的介绍知道参数在寄存器及堆栈的位置,我们就有可能显示参数的值jprobe也可以显示参数的值,但是其有缺点:不能探测函数时加上偏移量具体上下文请参考: ARM架构kprobe应用及实现分析(3.0 被探测函数说明)导出参数的函数:static int dump_arm_parameter(struct pt_regs *regs){ int i=0;

2013-11-19 22:36:46 1742

翻译 ARM流水线(pipeline)

2013-11-18 22:23:23 2426

翻译 ARM寄存器简介

2013-11-17 14:29:41 1143

原创 ARM架构kprobe应用及实现分析(6.0 导出堆栈的值)

上篇讲过了导出寄存器的值但是当函数参数多余4个的话(R0 R1 R2 R3 ),其他的值会保存在堆栈中,所以必须导出SP附近的值才能查看其它参数的值此函数实现如下:第一个参数为SP的值,第二个是一SP为中心要打印周围栈的数据static int dump_arm_stack(unsigned int * _addr , unsigned int addrSize){

2013-11-17 11:13:33 1568

原创 ARM架构kprobe应用及实现分析(5.0 打印寄存器的值)

kp.pre_handler = handler_pre;在此函数中打印寄存器的值,才能对我们分析当时的情况有帮助。(如查看调用函数的参数值等)static int handler_pre(struct kprobe *p, struct pt_regs *regs){ printk(" kprobes name is %s pt_regs size is %d \n

2013-11-17 10:58:07 2463

原创 ARM架构kprobe应用及实现分析(3.0 被探测函数说明)

在此系列中都是探测 testAddadd5 ,作为分析入口,我在do_fork 函数的最后的位置调用了testAddadd5 ,具体模样如下:int mykProbeCount = 0;char * mytestbuf ="this is a mytestbuf";int testAddadd5(int a, int b,int c,char * buf,int d,int

2013-11-16 22:45:13 1496

原创 ARM架构kprobe应用及实现分析(2.0 register_kprobe error 38)

最开始 register_kprobe 的时候,返回错误,一直注册不成功,且返回错误号为38最后发现是一些kernel编译的配置没有打开导致的.所以当你编译kernel之前请确保下面选项是打开支持的:   general setup        --> kprobesCONFIG_OPTPROBES=yCONFIG_PREEMPT=yCONFIG_OPTPROBES=

2013-11-16 22:38:31 2205

原创 ARM架构kprobe应用及实现分析(1.0 简单示例)

网络对krpobe的实现机制及扩展都不是特别详细由于工作需要及个人爱好,正好有这个机会好好学习此模块及应用到实际中并将整个应用扩展及当时的分析情况,详细记录下来,希望对感兴趣的人有些许帮助最开始还是先给个具体的栗子: static struct kprobe kp = { //.symbol_name = "do_fork", .symbol_name =

2013-11-16 22:24:36 1892

原创 戈尔巴乔夫

2013-11-16 00:01:46 1349

原创 ARM 架构 dump_stack 实现分析(3.0 printk %pS选项实现)

上篇提到了函数:void dump_backtrace_entry(unsigned long where, unsigned long from, unsigned long frame){#ifdef CONFIG_KALLSYMS //记住%pS是关键 printk 与 普通printf最大的不同 //惭愧啊,现在才知道此选项 print

2013-11-15 22:43:27 5391

原创 ARM 架构 dump_stack 实现分析(2.0 调用时序)

看下具体调用时序:void dump_stack(void){ dump_backtrace(NULL, NULL);} dump_stack -->dump_backtrace -->unwind_backtrace - ->dump_backtrace_entry

2013-11-15 22:31:13 5180

原创 ARM 架构 dump_stack 实现分析(1.0 具体实例)

dump_stack也就是我们平时说的backtrace对分析,对异常或crash发生的时候,具有重要的意义 每种架构会有或多或少的区别,如现在linux kernel支持如下架构:alpha  avr32     c6x   frv    hexagon    m68k       mips     openrisc  powerpc  score  sparc  um  

2013-11-15 22:26:26 3045

原创 kernel list 与普通list区别及其最牛叉的地方

参考:http://www.ibm.com/developerworks/cn/linux/kernel/l-chain/            http://blog.csdn.net/yangzhiloveyou/article/details/8758699

2013-11-09 12:25:35 1267

原创 nand flash otp(one time Programable)驱动编写细节

首先了解下OTP的背景:OTP 是指OTP区域内的每一bit位1.  仅有一次将 “1” 写成 “0”的机会2.  以上操作不能逆转(人死不能复生),即将“0”改写为“1”,也不能进行擦除该位 某些敏感的数据如:IMEI 号,有的客户要求此号能写且只能够写一次,这个时候OTP就有用武之地了。首先需要了解下nand flash 的地址概念(一共五个bytes)

2013-11-08 21:22:20 6175

原创 adb push常见问题

有的时候我们直接 adb push someting   android会遇到下面的错误:failed to copy 'someting' to 'android': Read-only file system这个时候你只需要adb remount下就可以解决问题。但是当你要更新根文件系统(bootimage),如你要更新些属性文件由于根文件系统是直接在内存中的,默认MO

2013-11-08 21:04:53 9633

原创 linux md5sum 应用

首先看个最简单的例子:$ md5sum  ./1/iAmCdRom.iso  ./2/iAmCdRom.iso 773682e3494b6155855dd580bef8cb04  ./1/iAmCdRom.iso34d75a13d98b245c2a32a0bf816abb36  ./2/iAmCdRom.iso//更多详细的选项如下:$ md5sum  --helpUsag

2013-11-08 20:57:11 1518

原创 怎么找到android系统input命令的实现代码

首先,我的固定思维认为system层中的命令大部分是用C语言写的。所以一直以为input命令也是C语言写的,但是找了很多地方都找不到对应其源代码。最后在framework开发人员帮助下找到,特此记录一下:1    首先找到input 命令的位置:      system//bin/input2     查看input的内容如下:cat  .system//bin/input

2013-11-08 20:29:13 3599

原创 CTP触摸屏调试之--getevent

ctp  getevent

2013-11-08 20:28:42 3544

原创 android monitor tool (8.0 模拟发送按键及触摸屏事件实现)

首先看下操作界面:  你可以可以远程控制手机,模拟发送触摸屏及按键事件 (应用场合:开发早期触摸屏还没确定及判断问题是驱动层还是framework / app 层)先讲发送按键事件的实现(如下面是发送KEYCODE_HOME):'adb shell input keyevent 3'更多的按键编码请参考:KeyEvent.java 下面是其部分内容: public

2013-11-07 22:07:28 3045 1

原创 perror实现分析(3.0: Linux支持的系统错误)

参考: bionic/libc/include/sys/_errdefs.h__BIONIC_ERRDEF( 0 , 0, "Success" )__BIONIC_ERRDEF( EPERM , 1, "Operation not permitted" )__BIONIC_ERRDEF( ENOENT , 2, "

2013-11-07 21:47:02 1591

android monitor tool

android monitor tool

2013-08-18

UML一篇文章就学通!

UML一篇文章就学通! 非常好。大家一起学习

2011-07-29

Windows+CE天津大学课件

Windows+CE天津大学课件 讲的比较广,但是比较实用

2009-08-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除