问题标签 [printk]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 如何在内核模块中获取真实文件名
我正在创建一个内核模块来拦截 unlink 命令并复制要取消链接的文件。现在,我拦截了 unlink 命令并尝试打印文件的路径,但它不能正常工作。
我有一个接收char *path
参数的方法,我使用 printk 来显示路径,但这会打印一些罕见的字符串,如 "\xe07l\xd3\xf"
当我取消链接某些文件并使用 dmesg 命令时,我得到了这个:
我怎样才能得到文件的真实路径/path/to/file.txt
呢?
c - 如何在 ftrace 中打印 trace_printk 的完整跟踪文件?
我正在使用 trace_printk() 打印一些数字(它们大约是一百万个数字)。但是,当我检查 /sys/kernel/debug/tracing/trace ... 时,只打印了整个范围的一部分。
谁能建议我如何增加缓冲区大小或以任何方式通过任何选项打印整个范围。
*注意:我不关心 ftrace 的其他输出。
*注2:我是使用ftrace和内核函数的初学者。
c - 未定义对“printk”的引用
我想printk
在我的用户空间代码中使用函数,但我不想编写内核模块。有没有可能这样做?
我尝试使用linux/kernel.h
标头,linux/module.h
但它不起作用
c - printk 适用于某些功能,但不是全部
我正在为 Linux 内核编写一个系统调用,但到目前为止它并没有像我预期的那样工作(这并不奇怪)。我正在尝试使用printk
消息在一个函数中对其进行调试,但它们不起作用。然而,单独函数中的那些确实有效。
我试过使用pr_info
而不是printk
,但没有奏效。我用了,mdelay
而不是msleep
,这没有帮助。
printk 在dq_update
(调用 in sys_delta
)中不起作用,但在dq_print
.
我知道这是很多代码,如果我发布的太多或者这个问题很糟糕,我很抱歉。谢谢您的帮助!
c - 如何找到打印 printk 语句的函数?
这是一种查找在哪个函数printk
中执行的方法吗?我知道我可以添加__function__
到我的信息中来获取这些信息,但是我正在处理一个大项目,手动printk
添加它是不可能的。printk
也许我应该在代码中添加一些宏或使用一些 linux 命令?
linux - 有没有办法将由 printk 消息构建的输出通过管道传输到控制台上的 grep?
我创建了一个使用 printk 打印输出的实用程序。例如。
如果在系统上运行此实用程序,它会在控制台上打印如下消息
然而,如果我运行此应用程序以将输出通过管道传输到 grep,则它不起作用。
我知道 printk 消息到内核日志缓冲区和 dmesg 打印日志缓冲区。使用 dmesg 选项在 stdoutput 上打印输出。
但是,我正在寻找一种在实用程序运行并且输出转储到控制台时立即将输出通过管道传输到 grep 的选项。
限制: printk 不能在这里妥协。
linux - 如何使用 printk()?
这是第一次在 Linux 环境中工作。我需要你的很多帮助。我想在 shced_setattr https://elixir.bootlin.com/linux/v4.18/source/kernel/sched/core.c#L4578中添加 prink()
但我不知道如何编辑程序。如果有人可以解释我为 printk() 函数编辑 linux 函数,那就太好了!
android - 在 Linux 内核 XHCI 驱动程序中插入 printk 调用会导致 ENOMEM 错误?
我正在尝试在使用 libusb 的 Android 应用程序中调试 USB 问题。我不确定问题是由用户代码还是内核代码引起的。我认为,无论哪种方式,添加一些 printk 语句来跟踪内核代码(XHCI 驱动程序)相关部分的执行路径都会有所帮助。
但是,当我使用 printk 语句启动新编译的内核并插入 OTG 电缆时,内核会因为 NULL 指针取消引用而出现恐慌,这似乎是由ENOMEM
XHCI 代码中的错误引起的。如果我注释掉一些 printks,内核不再在插入 OTG 电缆时出现恐慌,但它无法枚举连接的 USB 设备,这又是由于ENOMEM
错误。
简单地添加一些printk
带有字符串文字的语句(不占用堆栈内存,对吗?)怎么会导致ENOMEM
错误?有没有可能 XHCI 代码已经危险地接近填满 8k 堆栈,而添加 printk 调用只是压垮骆驼的最后一根稻草?还是有更简单的解释?
printk
我添加的行类型示例:
linux - printk() 消息未出现在控制台中
所以我正在尝试学习编写 Linux 模块,现在我正在尝试一个基本的“Hello World”模块:
我终于让这个模块工作了!当我使用 insmod 添加时,它会将“hello”打印到 kernel.log,当我使用 remmod 删除它时,它会将“goodbye”打印到 kernel.log。
我的麻烦是我决定尝试让输出也打印到控制台。根据我对 printk() 的了解,为了让消息显示在控制台中,控制台必须在 /proc/sys/kernel/printk 中设置为适当的消息级别。(这都是根据https://elinux.org/Debugging_by_printing)。我的控制台设置为 4 级。
猫/proc/sys/kernel/printk:
由于 KERN_ALERT 是 2 级,而我的控制台设置为打印 4 级及以下的消息,为什么我的控制台上没有出现 printk 消息?当我运行 dmesg 时,我可以清楚地看到消息在缓冲区中,但永远不会进入控制台。我并不是真的需要它们打印到控制台,但我真的很想了解这一切是如何工作的。