我对linux很新,我对内核模块编程有一些疑问。我正在使用ubuntu和C来制作我的.ko文件。我正在尝试创建一个模块,只要调用program / a,就会执行program / b而不是/ a。任何提示?
另外,即使使用printk(KERN_EMERG ...),它也不会打印到终端。有没有我缺少的设置,或ubuntu不这样做?
非常感谢!
答案 0 :(得分:1)
您可能需要调整/proc/sys/kernel/printk
中的设置,该设置控制打印到控制台的级别。来自proc(5)
:
/proc/sys/kernel/printk
The four values in this file are console_loglevel,
default_message_loglevel, minimum_console_level, and
default_console_loglevel. These values influence
printk() behavior when printing or logging error
messages. See syslog(2) for more info on the
different loglevels. Messages with a higher priority
than console_loglevel will be printed to the console.
Messages without an explicit priority will be printed
with priority default_message_level.
minimum_console_loglevel is the minimum (highest)
value to which console_loglevel can be set.
default_console_loglevel is the default value for
console_loglevel.
请注意,与nice(2)
值类似,较低值的较高优先级。
让路径execve()
执行/foo/a
/foo/b
的最简单方法是在/foo/b
之上绑定/foo/a
:
mount -obind /foo/b /foo/a
不需要内核模块。
使用内核模块执行相同的任务将会显着增加工作量; LSM界面可以帮助您确定何时正在执行目标。如果您正在寻找起点,do_execve()
中的fs/exec.c
就是从哪里开始阅读的。请确保ctags
已安装,运行并知道如何使用编辑器的ctags
集成,以便更轻松地阅读代码。
答案 1 :(得分:0)
回答printk
:
它打印到控制台,而不是终端。但是控制台是什么?
您可以在/proc/cmdline
中找到其TTY。通常它是tty0
,这意味着屏幕连接到计算机
如果你通过SSH / TELNET连接,肯定你不会看到这个。
如果你在图形环境(Gnome / KDE)中工作,你可能需要像alt-F1 / F2那样切换到文本模式TTY。
您还可以使用dmesg
命令查看消息。