我正在开发一个与我的linux内核模块交互的用户空间程序。我知道实现这一目标的方法之一是使用netlink套接字。但是,netlink套接字不被shell命令(例如'ls‘)用于与内核的交互。
那么,各种shell命令如何与内核交互呢?我试着浏览ls命令(ls.c)的代码,但无法理解这一点。
发布于 2017-01-25 03:57:19
我认为“Ondriy”和“twalberg”已经给出了答案。但我还是要补充一些解释。
我们可以通过不同的方式与内核空间进行交互。
Linux :Linux内核中的每个系统调用都分配一个唯一的syscall号。像open() -> __NR_open,close() -> __NR_exit,read() -> __NR_read。
IOCTL:内核中已经预定义了ictl数。因此,通过使用这些数字,您可以与内核空间进行交互。例如ioctl(/dev/i2c-0,I2C_SMBUS,地址);
Netlink套接字:通过netlink,您可以将消息从内核空间传递到用户空间。例如socket()、bind()、sendmsg()。
Sysfs/procfs:可以通过sysfs和proc与内核进行通信。(查看/sys/*文件夹)。
但是,如果您只查看ls命令,那么我认为您可以遵循下面的链接。
https://stackoverflow.com/questions/41837420
复制相似问题