分类: LINUX
2012-09-21 17:17:48
4 4 1 7
显示4个数值(可由 echo 修改),分别表示当前控制台日志级别、未明确指定日志级别的默认
消息日志级别、最小(最高)允许设置的控制台日志级别、引导时默认的日志级别。当 printk() 中的消息日志级别小于当前控制台日志级别时,printk 的信息就会在控制台上显示。
b)设置log缓冲区大小
在Kconfig中可以设置:
CONFIG_LOG_BUF_SHIFT
config LOG_BUF_SHIFT
int "Kernel log buffer size (16 => 64KB, 17 => 128KB)"
range 12 21
default 17
help
Select kernel log buffer size as a power of 2.
Examples:
17 => 128 KB
16 => 64 KB
15 => 32 KB
14 => 16 KB
13 => 8 KB
12 => 4 KB
c)使用log缓冲区
通过System.map查到__log_buf的虚拟地址,我的
__log_buf的地址是0xc05be6c0,
通常做手机的用的是usb口,没有串口,所以:
eg:在高通平台linux起不来,可以使用tract导出__log_buf这一段内存地址,从而看到kernel log
2)sysrq
常使用的魔术键:
echo 1>/proc/sys/kernel/sysrq 打开sysrq功能
echo 't' >/proc/sysrq-trigger 打印进程栈,调试时很有用
echo 'c' >/proc/sysrq-trigger 常常用来测试dump模式
3)只读proc
struct proc_dir_entry *create_proc_read_entry(const char *name,mode_t mode, struct proc_dir_entry *base, read_proc_t *read_proc, void *data);
name 是要创建的文件名子, mod 是文件的保护掩码(缺省系统范围时可以作为 0 传递), base 指出要创建的文件的目录( 如果 base 是 NULL, 文件在 /proc 根下创建 ), read_proc 是实现文件的 read_proc 函数, data 被内核忽略( 但是传递给 read_proc). 这就是 scull 使用的调用, 来使它的 /proc 函数可用做 /proc/scullmem:
创建了一个名为 scullmem 的文件, 直接在 /proc 下, 带有缺省的, 全局可读的保护.
4)seq_file proc接口,适用于大数据输出
创建了一个名为 scullseq 的文件, 直接在 /proc 下, 全局可读.