使用adb命令dump isp相关寄存器发生KE解决方法
时间:10-02
整理:3721RD
点击:
[DESCRIPTION]
因为linux 3.10内核, proc文件系统的创建接口已经由proc_file_entry()变为proc_create(),同时proc文件系统的设备方法接口定义发生了一些变化。以/proc/driver/isp_reg为例,当使用adb shell cat/proc/driver/isp_reg就会发生KE。下面以/proc/driver/isp_reg为例介绍解决方法:
[SOLUTION]
1、修改/proc/driver/isp_reg的文件设备方法。
isp_reg的设备方法定义在alps/kernel-
3.10/drivers/misc/mediate/mach/<project>/CAMERA_isp.c文件中。代码如下,左边为修改前的定义,右边为修改后的定义。

2proc_camera_isp_open函数的定义如下:
4、 subsys_camera_isp_read()函数的定义:
因为linux 3.10内核, proc文件系统的创建接口已经由proc_file_entry()变为proc_create(),同时proc文件系统的设备方法接口定义发生了一些变化。以/proc/driver/isp_reg为例,当使用adb shell cat/proc/driver/isp_reg就会发生KE。下面以/proc/driver/isp_reg为例介绍解决方法:
[SOLUTION]
1、修改/proc/driver/isp_reg的文件设备方法。
isp_reg的设备方法定义在alps/kernel-
3.10/drivers/misc/mediate/mach/<project>/CAMERA_isp.c文件中。代码如下,左边为修改前的定义,右边为修改后的定义。

2proc_camera_isp_open函数的定义如下:
- static int proc_camera_isp_open(struct inode *inode, struct file *file)
- {
- return single_open(file, subsys_camera_isp_read, NULL);
- };
4、 subsys_camera_isp_read()函数的定义:
- static int subsys_camera_isp_read(struct seq_file *m, void *v)
- {
- int i;
- seq_printf(m,"======top====\n");
- for (i = 0x0; i<= 0x1AC; i += 4)
- {
- seq_printf(m,"+0x%08x 0x%08x\n", (unsigned int)(ISP_ADDR+ i),
- (unsignedint)ISP_RD32(ISP_ADDR +i));
- }
- seq_printf(m,"======DMA====\n");
- for (i = 0X200;i <= 0x3D8; i += 4)
- {
- seq_printf(m,"+0x%08x 0x%08x\n\r", (unsignedint)(ISP_ADDR +i),(unsigned
- int)ISP_RD32(ISP_ADDR+ i));
- }
- seq_printf(m,"======tg ====\n");
- for (i = 0x400;i <= 0x4EC; i += 4)
- {
- seq_printf(m,"+0x%08x 0x%08x\n", (unsigned int)(ISP_ADDR+ i),
- (unsignedint)ISP_RD32(ISP_ADDR +i));
- }
- seq_printf(m,"======cdp(including EIS)====\n");
- for (i = 0xB00;i <= 0xDE0; i += 4)
- {
- seq_printf(m,"+0x%08x 0x%08x\n", (unsigned int)(ISP_ADDR+ i),
- (unsignedint)ISP_RD32(ISP_ADDR +i));
- }
- seq_printf(m,"======seninf ====\n");
- for (i = 0x4000; i <= 0x40C0; i+= 4)
- {
- seq_printf(m,"+0x%08x 0x%08x\n", (unsigned int)(ISP_ADDR+ i),
- (unsignedint)ISP_RD32(ISP_ADDR +i));
- }
- for (i = 0x4100; i <= 0x41BC; i+= 4)
- {
- seq_printf(m,"+0x%08x 0x%08x\n", (unsigned int)(ISP_ADDR+ i),
- (unsignedint)ISP_RD32(ISP_ADDR +i));
- }
- for (i = 0x4200; i <= 0x4208; i+= 4)
- {
- seq_printf(m,"+0x%08x 0x%08x\n", (unsigned int)(ISP_ADDR+ i),
- (unsignedint)ISP_RD32(ISP_ADDR +i));
- }
- for (i = 0x4300; i <= 0x4310; i+= 4)
- {
- seq_printf(m,"+0x%08x 0x%08x\n", (unsigned int)(ISP_ADDR+ i),
- (unsignedint)ISP_RD32(ISP_ADDR +i));
- }
- for (i = 0x43A0; i <= 0x43B0; i += 4)
- {
- seq_printf(m,"+0x%08x 0x%08x\n", (unsigned int)(ISP_ADDR+ i),
- (unsignedint)ISP_RD32(ISP_ADDR +i));
- }
- for (i = 0x4400; i <= 0x4424; i += 4)
- {
- seq_printf(m,"+0x%08x 0x%08x\n", (unsigned int)(ISP_ADDR+ i),
- (unsignedint)ISP_RD32(ISP_ADDR +i));
- }
- for (i = 0x4500; i <= 0x4520; i += 4)
- {
- seq_printf(m,"+0x%08x 0x%08x\n", (unsigned int)(ISP_ADDR+ i),
- (unsignedint)ISP_RD32(ISP_ADDR +i));
- }
- for (i = 0x4600; i <= 0x4608; i += 4)
- {
- seq_printf(m,"+0x%08x 0x%08x\n", (unsigned int)(ISP_ADDR+ i),
- (unsignedint)ISP_RD32(ISP_ADDR +i));
- }
- for (i = 0x4A00; i <= 0x4A08; i += 4)
- {
- seq_printf(m,"+0x%08x 0x%08x\n", (unsigned int)(ISP_ADDR+ i),
- (unsignedint)ISP_RD32(ISP_ADDR +i));
- }
- seq_printf(m, "====== 3DNR ====\n");
- for (i = 0x4F00; i <= 0x4F38; i += 4)
- {
- seq_printf(m,"+0x%08x 0x%08x\n", (unsigned int)(ISP_ADDR+ i),
- (unsignedint)ISP_RD32(ISP_ADDR +i));
- }
- return 0;
- };
