调试常用命令

2400阅读 0评论2016-04-17 wibnmo
分类:Android平台

git diff drivers/hwmon/msm_adc.c > patch

patch -p1 -R < patch        去patch

patch --dry-run -p1 < patch
    
patch -p1 < patch        打patch

-----------------------------------------------------------------------
更改console为ttyHSL1:

fastboot -c "console=ttyHSL1,115200n8r androidboot.hardware=qcom" boot boot.img
-----------------------------------------------------------------------

mkdir /data/debug
mount -t debugfs debugfs /data/debug
/data/debug/msm_fb/0/文件夹下有framebuffer的各种配置
cat /data/debug/gpio 查看当前系统中各gpio的详细配置

-----------------------------------------------------------------------


查看kernel log,实时的
cat /proc/kmsg

查看当前系统中用的ioport
cat /proc/ioports

查看当前系统中用的iomem
cat /proc/iomem

查看中断
cat /proc/interrupts

更改log输出等级
echo 8 > /proc/sys/kernel/printk

查看mount上的文件系统
cat /proc/mounts

查看cpu信息
cat /proc/cpuinfo

查看当前linux版本
cat /proc/version

查看内存信息
cat /proc/meminfo

查看kernel命令行参数
cat /proc/cmdline

查看某进程名
cat /proc/进程ID/cmdline

查看当前加载的模块
cat /proc/modules     //lsmod

查看系统中设备对应的设备号
cat /proc/devices

查看分区及其大小和对应的设备号
cat /proc/partitions

查看当前的input设备
cat /proc/bus/input/devices  //getevent
-----------------------------------------------------------------------

动态更改GPIO方向:


#ls /sys/class/gpio
export
gpiochip0
gpiochip107
gpiochip16
gpiochip43
gpiochip68
gpiochip95
unexport

在这里可以更改gpio的方向而不用改代码,调试起来很方便
举例:
#echo 12 > export
#ls /sys/class/gpio
export
gpio12
gpiochip0
gpiochip107
gpiochip16
gpiochip43
gpiochip68
gpiochip95
unexport

#ls gpio12/
active_low
direction
edge
power
subsystem
uevent
value
上面的属性文件一目了然,直接echo就可以了

释放gpio12那么就
#echo 12 > unexport

-----------------------------------------------------------------------

测试代码的效率可以这样:


cc -g -p test.c -O1 -o a.out
./a.out
gprof a.out gmon.out


O1是效率的优化, O2是空间的优化,O3就不要用了, 太凶险

-----------------------------------------------------------------------

重新挂载为读写:

mount -o remount rw /sdcard

-----------------------------------------------------------------------

VNC用法:

adb push androidvncserver /data/
chmod 777 androidvncserver
./androidvncserver

sudo adb forward tcp:59011 tcp:5901

然后用VNC连接就可以控制了(127.0.0.1:59011)

-----------------------------------------------------------------------

查看ldo谁在用:
shell@android:/data/debug/regulator/ldo17/
cat consumers
ldo通俗来讲就是个电源,专业名词是低压降线性稳压器.为什么叫低压降呢,因为记住,输出当且仅当比输入低.

-----------------------------------------------------------------------

看哪个模块没sleep:

cat /proc/wakelocks | awk '{print $1 " " $5}' | grep -v " 0"

----------------------------------------------------------------------

去掉文件中的^M

find -name filename -exec sed -i 's/\r//g' {} \;
----------------------------------------------------------------------
在所有.o文件中搜索某关键字
find -iname "*.o" | sed "s/.o/.c/g" | xargs grep 2>/dev/null -in --color tasklet_init {} ;
grep 2>/dev/null -in --color tasklet_init `find -iname "*.o" | sed "s/.o/.c/g"`
----------------------------------------------------------------------
休眠调试:

1. 看有哪些pending的IRQ:
echo 2 > sys/module/mpm/parameters/debug_mask

解析:
arch/arm/mach-msm/mpm.c
enum {
MSM_MPM_DEBUG_NON_DETECTABLE_IRQ = BIT(0),
MSM_MPM_DEBUG_PENDING_IRQ = BIT(1), //写2即查看的这种类型
MSM_MPM_DEBUG_WRITE = BIT(2),
MSM_MPM_DEBUG_NON_DETECTABLE_IRQ_IDLE = BIT(3),
};

2.
echo 1 > sys/module/msm_show_resume_irq/parameters/debug_mask

./arch/arm/mach-msm/msm_show_resume_irq.c
enum {
MSM_SHOW_IRQ_DEBUG_RESUME = BIT(0),
};

3.
echo 1 > sys/module/pm_8x60/parameters/debug_mask
arch/arm/mach-msm/pm-8x60.c
enum {
MSM_PM_DEBUG_SUSPEND = BIT(0),
MSM_PM_DEBUG_POWER_COLLAPSE = BIT(1),
MSM_PM_DEBUG_SUSPEND_LIMITS = BIT(2),
MSM_PM_DEBUG_CLOCK = BIT(3),
MSM_PM_DEBUG_RESET_VECTOR = BIT(4),
MSM_PM_DEBUG_IDLE = BIT(6),
MSM_PM_DEBUG_IDLE_LIMITS = BIT(7),
MSM_PM_DEBUG_HOTPLUG = BIT(8),
};

4.
对CPU的一些操作接口:
/sys/devices/system/cpu/
可以参考Documentation/cputopology.txt查看上面这个目录下各属性的意义
---------------------------------------------------------------------- 
上一篇:抬头纹和颜色饱和度不够解析手法
下一篇:经验之谈