调试大杂烩

来源:互联网 发布:java int到string 编辑:程序博客网 时间:2024/06/05 06:02

1.1 调整内核printk的打印级别

有时调试内核模块,打印信息太多了,可以通过修改/proc/sys/kernel/printk文件内容来控制。
默认设置是7 4 1 7

cat /proc/sys/kernel/printk7       4       1      7

该文件有四个数字值,它们根据日志记录消息的重要性,定义将其发送到何处。关于不同日志级别的更多信息,请查阅syslog(2)联机帮助。上面显示的4个数据分别对应:

控制台日志级别:优先级高于该值的消息将被打印至控制台默认的消息日志级别:将用该优先级来打印没有优先级的消息最低的控制台日志级别:控制台日志级别可被设置的最小值(最高优先级)默认的控制台日志级别:控制台日志级别的缺省值

数值越小,优先级越高
其实这四个值是在kernel/printk.c 中被定义的,如下:

int console_printk[4] = {                DEFAULT_CONSOLE_LOGLEVEL,       /* console_loglevel */                DEFAULT_MESSAGE_LOGLEVEL,       /* default_message_loglevel */                MINIMUM_CONSOLE_LOGLEVEL,     /* minimum_console_loglevel */                DEFAULT_CONSOLE_LOGLEVEL,       /* default_console_loglevel */};

内核通过printk() 输出的信息具有日志级别,日志级别是通过在printk() 输出的字符串前加一个带尖括号的整数来控制的,如printk(“<6>Hello, world!\n”);。内核中共提供了八种不同的日志级别,在 linux/kernel.h 中有相应的宏对应。

#define KERN_EMERG  "<0>"   /* systemis unusable */#define KERN_ALERT  "<1>"   /* actionmust be taken immediately */#define KERN_CRIT    "<2>"   /*critical conditions */#define KERN_ERR     "<3>"   /* errorconditions */#define KERN_WARNING "<4>"   /* warning conditions */#define KERN_NOTICE  "<5>"   /* normalbut significant */#define KERN_INFO    "<6>"   /*informational */#define KERN_DEBUG   "<7>"   /*debug-level messages */

所以printk() 可以这样用:

printk(KERN_INFO"Hello, world!\n");

未指定日志级别的printk() 采用的默认级别是DEFAULT_MESSAGE_LOGLEVEL,这个宏在kernel/printk.c 中被定义为整数4,即对应KERN_WARNING。
如果要想在内核启动过程中打印少的信息,就可以根据自己的需要在kernel/printk.c中修改以上数值,重新编译即可!

/* printk's without a loglevel use this.. */#define DEFAULT_MESSAGE_LOGLEVEL 4 /* KERN_WARNING */

了解了上面的这些知识后,我们就应该知道如何手动控制printk打印了。
例如,我想屏蔽掉所有的内核printk打印,那么我只需要把第一个数值调到最小值1或者0。

# echo 1 4 1 7 > /proc/sys/kernel/printk

或者

# echo 0 4 0 7 > /proc/sys/kernel/printk

例如,我不想屏蔽内核printk打印,那么只需要把第一个数值调到8。

echo 8 > /proc/sys/kernel/printk

1.2 重挂载android系统

串口

$ mount -o remount,rw system

adb

adb remount

1.3 ubuntu挂载ntfs硬盘

1.3.1 ntfs-3g安装

$ sudo apt-get install ntfs-3g

1.3.2 创建mount点

$ mkdir /mnt/ntfs

1.3.3 mount NTFS分区

$ sudo fdisk -l | grep NTFS$ mount -t ntfs-3g /dev/sdb1 /mnt/ntfs

1.4 压缩、解压

1.4.1 tar

1.4.1.1 压缩
$ tar -cjvf file.tar.bz2 file
1.4.1.1 解压
$ tar -xvf file.tar            #解压tar包$ tar -xzvf file.tar.gz        #解压tar.gz$ tar -xjvf file.tar.bz2       #解压 tar.bz2$ tar -xvf file.tar -C ./  #解压tar包到当前目录

1.4.2 zip

1.4.2.1 压缩
$ zip -r file.zip file/*
1.4.2.1 解压
$ unzip file.zip$ unzip file.zip -d ./     #解压zip包到当前目录

1.5 命令截屏

$ screencap /storage/2FDED/screencap.png

1.6 远程复制

1.6.1 scp

复制本地文件xiaoke.pub到远程主机(192.168.1.201:trigtop)下的kkk文件夹中

$ scp -arf xiaoke.pub trigtop@192.168.1.201:kkk/

1.6.2 rsync

远程同步

$ rsync -avP xiaoke.pub trigtop@192.168.1.201:kkk/

本地同步

$ rsync -av--exclude .git --exclude .repo /media/sdb/xiaoke/rtk1296/android/ /media/sdb/xiaoke/rtk1296-release/android/$ tar -cjvf rtk1296-release.tar.bz2 rtk1296-release

1.7 获取、设置android系统属性

1.7.1 命令行

$ getprop ro.product.brand$ setprop ro.product.brand realtek

1.7.2 代码

import android.os.SystemProperties;SystemProperties.get("ro.product.brand");SystemProperties.set("ro.product.brand", "realtek");

1.8 获取、设置settings属性

1.8.1 命令行

$ settings get system key$ settings get secure key$ settings get global key$ settings put system key value$ settings put secure key value$ settings put global key value

1.8.2 代码

import android.provider.Settings;String str = Settings.System.getString(this.context.getContentResolver(), Settings.System.KEY);String str = Settings.Secure.getString(this.context.getContentResolver(), Settings.Secure.KEY);String str = Settings.Global.getString(this.context.getContentResolver(), Settings.Global.KEY);Settings.System.putString(this.context.getContentResolver(), Settings.System.KEY, value);Settings.Secure.putString(this.context.getContentResolver(), Settings.Secure.KEY, value);Settings.Global.putString(this.context.getContentResolver(), Settings.Global.KEY, value);

1.9 dumpsys

$ dumpsys input$ dumpsys meminfo