LINUX.ORG.RU

Доки по функциям ядра.

 


0

1

Понадобилось в модуле ядра зачитать файл. Ясно, что функции должны быть похожи на fopen, fread, fclose, но не они непосредственно, т.к. ядро не юзерленд.

Нагуглил функции kernel_read/kernel_write, примеры использования. Ну а где как открыть файл, stat, seek и т.п.? Для функций стандартной библиотеки хоть есть маны, для функций ядра вроде бы тоже man9 предусмотрен, но там пусто.

В исходниках ядра запустил «make htmlhelp». Сгенерилось, даже с поиском и всеми пирогами. Но, ничего там толком нет.

ЗЫ. А вот в MSDN бы все нашлось сразу, списочком, по функциям, с примерами, где заголовочник, в какой либе, в каких версиях... Но это про оффтопик. И почему здесь не дает добавить существующий тег «man9», это табу здесь, т.к. вызывает боль?))

Понадобилось в модуле ядра зачитать файл

По-хорошему, модули ядра не должны читать файлы (за исключением драйверов ФС, разумеется). Ты не найдешь каких-то мануалов и примеров кода для начинающих на эту тему, потому что это адовый костыль.

annulen ★★★★★
()
Ответ на: комментарий от annulen

Ну почему не должны? Вот файрвол например может зачитать конфиг свой? Не тот, что демоном работает, а в ядре.

Писать утиль, через ioctl-ы слать тот же конфиг?

bugs-bunny
() автор топика
Ответ на: комментарий от bugs-bunny

Хотя, это может быть другое. В ядре же буффер есть 2^17 байт под лог ядра. dmesg и syslog возможно туда через маппированную память как-то добираются, а потом в файл кидают.

bugs-bunny
() автор топика
Ответ на: комментарий от bugs-bunny

Вот файрвол например может зачитать конфиг свой?

Нет, конфигурация netfilter грузится из файлов в ядро с помощью iptables и более современных аналогов вручную или системой инициализации (которая тоже юзерспейсный процесс).

KivApple ★★★★★
()
Ответ на: комментарий от KivApple

Ну в iptables не смотрел, но по tcpdump отладчиком полазал. Они там свои колбеки регистрируют, чтобы все пакеты из ядра получать, фильтровать и т.п. Им в ядре не особо чего нужно, все могут в юзерспейсе сделать.

bugs-bunny
() автор топика
Ответ на: комментарий от bugs-bunny

А что мешает ядру

Ничего не мешает.

работать с файлами в ФС

Работает. Всякие fw читает, и т.п. Посмотрите, как это реализовано. Смотрите fs/, всякие read_write.c, open.c и т.д.

Надо 100 раз подумать, нужно ли это на самом деле. При чтении надо соблюдать lockdown. Вообще, загружать в кернелспейс всякие левые данные – большой грех.

i586 ★★★★★
()
Последнее исправление: i586 (всего исправлений: 1)
Ответ на: комментарий от bugs-bunny

Еще один аргумент плюсом к сатье Грега. Для Linux смена «истинного» корня ФС в процессе работы - обычное дело. Большинство систем сначала загружают initramfs, а затем уже делают pivot_root на нормальный корень. В embedded-системах initramfs может выполнять довольно много работы - например, получать dhcp-лизу, проверять наличие обновлений и перепрошивать устройство. Если у тебя модуль ядра читает какой-то файл, то он должен присутствовать во всех rootfs, или его остутствие должно быть штатной ситуацией, еще его надо будет перечитывать после смены рута. В общем, криво все это.

annulen ★★★★★
()
Ответ на: комментарий от bugs-bunny

Но таки да, надо подумать, стоит ли так делать.

Нечего тут думать. Делать так не надо. Чтение файлов в ядре делается либо по запросу от софта (read() итд из юзерспейса), либо когда этот файл куда-то смонтирован через loop-device.

firkax ★★★★★
()
Ответ на: комментарий от bugs-bunny

А что мешает ядру Linux работать с файлами в ФС?

Как минимум то, что корень, точки монтирования привязаны к процессу, а не ядру. И даже прямо самый самый корень (без namespace) можно перемонтировать на лету. И теперь представь, как это сочетается с тем, что ядро в этот момент ещё что-то само лочить будет.

snizovtsev ★★★★★
()