网上的解决方法一般是要求adb shell 后面是# ,也就是root用户,但用 super adbd 调用root用户之后,依旧不能解决。
通过对比可显示进程的rom和官方rom发现,只需修改内核如步骤4,即可完美解决问题。
HTC D826为例,修改内核
1.
kyle@Linux-dev:~/android/tmp$ adb shell cat proc/emmc // 获取boot分区表,不同平台命令方法不一样
2.
kyle@Linux-dev:~/android/tmp$ adb shell "su -c 'dd if=/dev/block/mmcblk0p43 of=/sdcard/826.img'" // 提取系统boot.img
65536+0 records in
65536+0 records out
33554432 bytes transferred in 9.970 secs (3365539 bytes/sec)
kyle@Linux-dev:~/android/tmp$ adb pull /sdcard/826.img
936 KB/s (33554432 bytes in 34.991s)
3.
kyle@Linux-dev:~/android/tmp$ mkboot 826.img 826 分解boot.img 方法有很多,平台不一样也不一样。github找。
分解并解压 826.img 到 826
kernel : zImage
ramdisk : ramdisk
页大小 : 2048
kernel 大小 : 22499512
ramdisk 大小 : 1477867
dtb size : 393216
base : 0x80080000
kernel offset : 0x00000000
ramdisk offset : 0x01f80000
second_offset : 0x00e80000
tags offset : 0x01d80000
dtb img : dt.img
cmd line : console=ttyHSL0,115200,n8 androidboot.console=ttyHSL0 androidboot.hardware=qcom user_debug=31 ehci-hcd.park=3 androidboot.bootdevice=7824900.sdhci
ramdisk 为 gzip 格式.
分解完成.
4.
修改/ramdisk/default.prop 中的内容,没有项目无需另加,内容自己可以理解吧,按照下面修改,保存。
ro.adb.secure=0
ro.secure=0
ro.allow.mock.location=1
ro.debuggable=1
persist.service.adb.enable=1
5.
kyle@Linux-dev:~/android/tmp$ mkboot 826 826debug.img //打包成IMG镜像
开始打包,调用 826/img_info文件.
kernel : zImage
ramdisk : new_ramdisk.gz
页大小 : 2048
kernel 大小 : 22499512
ramdisk 大小 : 1476158
dtb size : 393216
base : 0x80080000
kernel offset : 0x00000000
ramdisk offset : 0x01f80000
tags offset : 0x01d80000
dtb img : dt.img
cmd line : console=ttyHSL0,115200,n8 androidboot.console=ttyHSL0 androidboot.hardware=qcom user_debug=31 ehci-hcd.park=3 androidboot.bootdevice=7824900.sdhci
Kernel 大小: 22499512, 新 ramdisk 大小: 1476158, 826debug.img: 24373248.
826debug.img 已经生成.
...
6.
kyle@Linux-dev:~/android/tmp$ adb reboot bootloader
kyle@Linux-dev:~/android/tmp$ fastboot flash boot 826debug.img //刷入内核
重启之后发现ddms可以查看进程了。而跟adb shell 后是不是root用户没关