高通printk.c 简书
时间: 2023-09-03 09:03:28 浏览: 58
高通printk.c 是高通公司开发的一个用于内核调试的驱动程序。该驱动程序位于Linux内核的源码树中,用于将内核中的调试打印信息输出到系统控制台或串口。
高通printk.c 实现了一系列的函数来处理不同级别的内核调试信息输出。这些函数包括printk()、printk_ratelimited()、early_printk()等。通过这些函数,开发人员可以在内核代码中插入调试打印语句,以便在运行时观察代码的执行情况和调试信息。
高通printk.c 还提供了一些控制函数,用于配置内核调试信息的输出。通过这些函数,开发人员可以选择所要输出的调试信息级别、是否将信息输出到串口或控制台、输出格式等。
在使用高通printk.c 时,开发人员需要在内核配置中打开相关选项,并将驱动源代码添加到内核源码树中。然后,编译、链接和烧写内核,使得该驱动程序能够被加载和执行。
高通printk.c 的使用可以极大地简化内核调试的过程。开发人员可以插入调试打印语句来观察和分析内核代码的执行情况,以及发现潜在的问题和错误。通过调整调试信息的输出级别和方式,开发人员可以在不同的情况下改变调试策略,以满足不同的需求。这使得分析和调试内核代码变得更加方便和高效。
相关问题
kernel.printk = 5 4 1 7
这是一个 Linux 内核的配置参数,用于设置内核消息的输出级别。具体来说,这里的数字表示四个级别:
- 5:打印所有的内核信息,包括调试信息、信息、警告和错误。
- 4:打印信息、警告和错误,但不包括调试信息。
- 1:只打印紧急情况下的错误信息。
- 7:打印所有内核信息,包括调试信息、信息、警告和错误,并将它们发送到控制台和系统日志。
通常情况下,我们可以将这个参数设置为默认值,即 7,以便获取尽可能多的内核信息,方便进行故障排查和调试。
内核中printk函数如何实现的?
`printk()` 函数是 Linux 内核中用于输出信息的函数,它的实现非常复杂,涉及到多个模块和多个文件。下面简单介绍一下 `printk()` 函数的实现过程。
1. `printk()` 函数的定义
在 `include/linux/kernel.h` 文件中,定义了 `printk()` 函数的原型:
```c
int printk(const char *fmt, ...);
```
其中,`fmt` 参数是格式化字符串,`...` 表示可变参数列表。
2. `printk()` 函数的实现
`printk()` 函数的实现定义在 `kernel/printk/printk.c` 文件中。该文件中包含了多个函数和数据结构,用于实现 `printk()` 函数。
具体来说,`printk()` 函数的实现过程如下:
(1)调用 `vprintk_emit()` 函数将格式化字符串和可变参数列表转换成一段文本内容。
(2)调用 `log_store()` 函数将文本内容存储到内核日志缓冲区中。
(3)调用 `console_trylock()` 函数获取控制台锁。
(4)调用 `console_unlock()` 函数释放控制台锁。
(5)返回输出的字符数。
其中,`vprintk_emit()` 函数是将格式化字符串和可变参数列表转换成一段文本内容的函数,它的实现定义在 `kernel/printk/printk.c` 文件中。该函数主要使用 `vsnprintf()` 函数将格式化字符串和可变参数列表转换成一段文本内容,并将结果存储在 `log_buf` 缓冲区中。
`log_store()` 函数是将文本内容存储到内核日志缓冲区中的函数,它的实现定义在 `kernel/printk/printk.c` 文件中。该函数主要将文本内容存储在 `log_buf` 缓冲区中,并更新相关的内部状态信息。
`console_trylock()` 函数是获取控制台锁的函数,它的实现定义在 `kernel/printk/console.c` 文件中。该函数主要是尝试获取控制台锁,如果获取成功,则返回 0,否则返回 -EBUSY。
`console_unlock()` 函数是释放控制台锁的函数,它的实现定义在 `kernel/printk/console.c` 文件中。该函数主要是释放控制台锁,并唤醒等待输出的进程。
综上所述,`printk()` 函数的实现非常复杂,它涉及到多个模块和多个文件,其中包括了内核日志缓冲区、控制台锁、格式化字符串转换等多个功能的实现。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)