用户空间与linux内核模块的交互

时间:2017-01-24 19:32:31

标签: linux shell sockets linux-kernel

我正在开发一个与我的Linux内核模块交互的用户空间程序。我知道实现这一目标的方法之一是使用netlink套接字。但是,shell命令不会使用netlink套接字,例如' ls'与内核交互。

那么各种shell命令如何与内核交互?我尝试浏览ls命令(ls.c)的代码但是无法理解这一点。

1 个答案:

答案 0 :(得分:1)

我认为@Ondriy和@twalberg已经给出了答案。但我仍然在补充一些解释。

我们可以通过不同的方式与内核空间进行交互。

Syscall:在Linux内核中,为每个系统调用分配一个唯一的系统调用号。像open() - > __NR_open,close() - > __NR_exit,read() - > __NR_read。

IOCTL:内核中已有预定义的ictl编号。因此,通过使用这些数字,您可以与内核空间交互。例如的的ioctl (适用的/ dev / I2C-0,I2C_SMBUS,地址);

Netlink Socket:通过netlink套接字,您可以将消息从内核空间传递到用户空间。例如socket(),bind(),sendmsg()。

Sysfs / procfs:您可以通过sysfs和proc fs与内核通信。 (看看/ sys / *文件夹)。

但是,如果您只关注 ls命令,那么我认为您可以按照以下链接。

How does the 'ls' command work in Linux/Unix?