2017-01-24 8 views
0

Я разрабатываю программу пространства пользователя, которая взаимодействует с моим модулем ядра Linux. Я знаю, что одним из способов достижения этого является использование сетевых сокетов. Однако сокеты netlink не используются командами оболочки, такими как 'ls' для взаимодействия с ядром.Пользовательское пространство взаимодействия с модулем ядра Linux

Как различные команды оболочки взаимодействуют с ядром? Я пробовал просматривать код для команды ls (ls.c), но не смог понять это.

+0

'libc',' glibc' и "системные вызовы" должно быть достаточно, чтобы направить вас в правильном направлении. – twalberg

+0

Можете ли вы быть более конкретным, пожалуйста? – user2522685

+0

Вы должны выбрать наиболее подходящий ABI для своих коммуникаций. Существуют: IOCTL поверх узла устройства, узлы файла sysfs, netlink, системный вызов. Наиболее популярным и простым является sysfs. Вы можете использовать его в крошечных средах. Однако у каждого из перечисленных выше есть плюсы и минусы. – 0andriy

ответ

1

Я думаю, что @Ondriy и @twalberg уже дали ответ. Но все же я добавляю некоторые объяснения.

Существуют разные способы взаимодействия с пространством ядра.

Schnall: В ядре Linux каждому системному вызову присваивается уникальный номер системного вызова. Как 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 fs. (Загляните в папку/sys/*).

Но если вы ищете только для ls command, тогда, я думаю, вы можете перейти по следующей ссылке.

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