很多内核开发者喜欢的调试工具是printk,在Linux内核中,使用printk()函数来打印信息,它与C库的printf()函数类似。
printk()与printf()的一个重要区别是: printk()提供输出等级 。内核会根据这个等级来判断是否在终端或者串口中输出。
在实际调试中,printk()可以和printf()一样,直接输出一条字符串。
不过为了更好的显示一些调试信息,可以加上函数名字(__func__)和代码行号(__LINE__),例如:
printk(KERN_EMERG"figo:%s, %d", __func__, __LINE__);
在双引号""前加上输出等级KERN_EMERG,代表输出等级为0。
另外,在使用printk()的时候需要注意输出格式,否则在编译时会出现很多的警告。printk的输出格式:
| 数据类型 | printk格式符 |
|---|---|
| int | %d或%x |
| unsigned int | %u或%x |
| long | %ld或%lx |
| long long | %lld或%llx |
| unsigned long long | %llu或%llx |
| size_t | %zu或%zx |
| size_t | %zd或%zx |
| 函数指针 | %pf |
全部0条评论
快来发表一下你的评论吧 !