微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > 使用adb命令dump isp相关寄存器发生KE解决方法

使用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函数的定义如下:

  1. static int proc_camera_isp_open(struct inode *inode, struct file *file)
  2. {
  3. return single_open(file, subsys_camera_isp_read, NULL);
  4. };

复制代码

3、 Single_open()函数由内核提供;
4、 subsys_camera_isp_read()函数的定义:

  1. static int subsys_camera_isp_read(struct seq_file *m, void *v)
  2. {
  3. int i;
  4. seq_printf(m,"======top====\n");
  5. for (i = 0x0; i<= 0x1AC; i += 4)
  6. {
  7. seq_printf(m,"+0x%08x 0x%08x\n", (unsigned int)(ISP_ADDR+ i),
  8. (unsignedint)ISP_RD32(ISP_ADDR +i));
  9. }
  10. seq_printf(m,"======DMA====\n");
  11. for (i = 0X200;i <= 0x3D8; i += 4)
  12. {
  13. seq_printf(m,"+0x%08x 0x%08x\n\r", (unsignedint)(ISP_ADDR +i),(unsigned
  14. int)ISP_RD32(ISP_ADDR+ i));
  15. }
  16. seq_printf(m,"======tg ====\n");
  17. for (i = 0x400;i <= 0x4EC; i += 4)
  18. {
  19. seq_printf(m,"+0x%08x 0x%08x\n", (unsigned int)(ISP_ADDR+ i),
  20. (unsignedint)ISP_RD32(ISP_ADDR +i));
  21. }
  22. seq_printf(m,"======cdp(including EIS)====\n");
  23. for (i = 0xB00;i <= 0xDE0; i += 4)
  24. {
  25. seq_printf(m,"+0x%08x 0x%08x\n", (unsigned int)(ISP_ADDR+ i),
  26. (unsignedint)ISP_RD32(ISP_ADDR +i));
  27. }
  28. seq_printf(m,"======seninf ====\n");
  29. for (i = 0x4000; i <= 0x40C0; i+= 4)
  30. {
  31. seq_printf(m,"+0x%08x 0x%08x\n", (unsigned int)(ISP_ADDR+ i),
  32. (unsignedint)ISP_RD32(ISP_ADDR +i));
  33. }
  34. for (i = 0x4100; i <= 0x41BC; i+= 4)
  35. {
  36. seq_printf(m,"+0x%08x 0x%08x\n", (unsigned int)(ISP_ADDR+ i),
  37. (unsignedint)ISP_RD32(ISP_ADDR +i));
  38. }
  39. for (i = 0x4200; i <= 0x4208; i+= 4)
  40. {
  41. seq_printf(m,"+0x%08x 0x%08x\n", (unsigned int)(ISP_ADDR+ i),
  42. (unsignedint)ISP_RD32(ISP_ADDR +i));
  43. }
  44. for (i = 0x4300; i <= 0x4310; i+= 4)
  45. {
  46. seq_printf(m,"+0x%08x 0x%08x\n", (unsigned int)(ISP_ADDR+ i),
  47. (unsignedint)ISP_RD32(ISP_ADDR +i));
  48. }
  49. for (i = 0x43A0; i <= 0x43B0; i += 4)
  50. {
  51. seq_printf(m,"+0x%08x 0x%08x\n", (unsigned int)(ISP_ADDR+ i),
  52. (unsignedint)ISP_RD32(ISP_ADDR +i));
  53. }
  54. for (i = 0x4400; i <= 0x4424; i += 4)
  55. {
  56. seq_printf(m,"+0x%08x 0x%08x\n", (unsigned int)(ISP_ADDR+ i),
  57. (unsignedint)ISP_RD32(ISP_ADDR +i));
  58. }
  59. for (i = 0x4500; i <= 0x4520; i += 4)
  60. {
  61. seq_printf(m,"+0x%08x 0x%08x\n", (unsigned int)(ISP_ADDR+ i),
  62. (unsignedint)ISP_RD32(ISP_ADDR +i));
  63. }
  64. for (i = 0x4600; i <= 0x4608; i += 4)
  65. {
  66. seq_printf(m,"+0x%08x 0x%08x\n", (unsigned int)(ISP_ADDR+ i),
  67. (unsignedint)ISP_RD32(ISP_ADDR +i));
  68. }
  69. for (i = 0x4A00; i <= 0x4A08; i += 4)
  70. {
  71. seq_printf(m,"+0x%08x 0x%08x\n", (unsigned int)(ISP_ADDR+ i),
  72. (unsignedint)ISP_RD32(ISP_ADDR +i));
  73. }
  74. seq_printf(m, "====== 3DNR ====\n");
  75. for (i = 0x4F00; i <= 0x4F38; i += 4)
  76. {
  77. seq_printf(m,"+0x%08x 0x%08x\n", (unsigned int)(ISP_ADDR+ i),
  78. (unsignedint)ISP_RD32(ISP_ADDR +i));
  79. }
  80. return 0;
  81. };

复制代码

5、 seq_read()函数由内核提供, ISP_RegDebug()保持不变。因为linux-3.10 procfs API changed, adb shell cat proc/diver/camio_reg同样需要修改,修改的方法和修改cat proc/diver/isp_reg类似;

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top