LINUX.ORG.RU

inotify в ядре


0

2

Привет всем! Расскажите, кто-нибудь юзал inotify в ядре? У меня есть прога - демон, использующая обычный интерфейс inotify. Мне нужно её переписать как модуль ядра! Подскажите пожалуйста как это сделать! Мне вообще не понятно что это за интерфейс у linux/inotify =((


>>>>Полное имя: Анна

кто-нибудь юзал inotify в ядре?

Мне нужно её переписать как модуль ядра

ну-ну. Местные правила знаете?
Если чё, я И не о требовании пруфа, И а о том, что с такими вопросиками в Job.

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

>мне просто интерфейс не ясен.

Что тебе конкретно неясно, доча?

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

мне просто интерфейс не ясен.

Ну вот опять. И ты ждёшь, ищешь, кто бы тебе его объяснил, верно?

Это не ответ человека, который умеет писать код и находить ответы на свои вопросы.
Ты должен был написать: «Я уже прочитал главу из Linux System Programming» и начал было разбираться что к чему в inotify.h в сорцах ядра.
Не говоря уже о том, чтоб просмотреть все ссылки с англоязычной википедии.

Однако меня интересует конкретный вопрос о ...

Вот так надо. А ты всё ещё формулируешь как для Job.

adriano32 ★★★
()

По существу: нужно больше информации. Какой демон, как использует, зачем. Может, лучше этого не делать, или сделать, но часть в виде модуля, а часть — в юзерспейсе.

Оффтоп: Странно, что никто не попросил ещё фотографии с табличкой «Привет, isden». Давай я попрошу, только с табличкой «Привет, post-factum».

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

Странно, что никто не попросил ещё фотографии с табличкой «Привет, isden»

Неправда :)
<<<<
<<<< Я её перманентно клянчу у всех пока isden'a нет на ЛОРе
<<<<

И да, ну-ну. Местные правила знаете? Если чё, я ... о требовании пруфа,

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

Да, я уже везде искала информацию, и книгу эту читала тоже. Нигде нет описания inotify для ядра. Демон отслеживает изменения в файловой системе и пишет лог в файл. Мне надо в модуль ядра перенести хоть что-нибудь.

Например инициализация inotify struct inotify_handle *inotify_init(const struct inotify_operations *);

struct inotify_operations {    void (*handle_event)(struct inotify_watch *, u32, u32, u32,           const char *, struct inode *);    void (*destroy_watch)(struct inotify_watch *); }; Не понятен смысл этих inotify_operations. А описание inotify_handle вообще не нашла.

Вот не для ядра - там всё понятно, простая inotify_init, ничего не принимает, возвращает дескриптор файла, всё ясно. А здесь ничего не ясно.

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

Смотри какие системные вызовы делает твоя программа. Ну и делай тоже самое в ядре.

sn1ln
()
Ответ на: комментарий от kpx13

Мне надо в модуль ядра перенести хоть что-нибудь.

Скажи, я правильно понял, что вся затея ради того, чтоб огородить этого «надзирателя» от опасности быть кикнутым из юзерспейса: и соотвественно, вкомпилировать написанный тобой модуль в ядро, чтоб отключить его было нельзя. Верно?

adriano32 ★★★
()

вдумчиво читать /usr/src/linux/Documentation/filesystems/inotify.txt

ananas ★★★★★
()

inotify не нужен, используй fanotify :)

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

Нет, не для этого. Потому что я пишу курсач по системному программированию, и это условие

kpx13
() автор топика
Ответ на: комментарий от anonymous

Мало инфы! Ещё и на английском... Примеры искала по всему инету, вообще нет... Может в какой-нибудь книжке про это рассказывается? Или кто-нибудь прогу писал использующую айнотифи в ядре? Мне примерчик бы... Эта тема мраком покрыта, ужасно неприятно когда я в чём-то не могу разобраться. http://www.linux.org.ru/forum/job/6264738

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

>Ещё и на английском...

Ололошеньки ;)

anonymous
()
Ответ на: комментарий от kpx13

Ещё и на английском...

Анюта-Анюта... Ты в школе немецкий учила что ли?

Ты простейший модуль, просто без inotify уже пробовала написать?

В Job - это для тебя правильное решение.

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

>Да, я написала демон, я же говорила об этом ранее) Мне надо переделать на ядро

Демон отслеживает изменения в файловой системе и пишет лог в файл

Отслеживает изменения всей файловой системы что ли? Или одного файла?

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

Можно и всей )) Я сделала рекурсивный обход директорий. Список директорий, которые нужно обходить прога читает из файла. Там ещё исключения можно добавлять- папки или файлы (например *.o)

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

Эмм... Демон, ты его из юзерспейса запускаешь?
А я тебе о модуле ядра говорю, ты модуль ядра простейший уже пробовала написать и запустить?
как с тобой сложно разговаривать... пойду-ка я нафиг из этого треда

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

Да, пробовала. Я спрашиваю именно об inotify! Я же не спрашиваю как модуль писать блин!!

kpx13
() автор топика
Ответ на: комментарий от adriano32

«В Job - это для тебя правильное решение.» Ага, только что-то никто не отвечает. А как наезжать так первые.

«Ты простейший модуль, просто без inotify уже пробовала написать?» Да. Извините, невнимательно прочитала вопрос.

А чего Вы нервничаете сразу?

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

linux азбука ядра 6 главу посмотрите, возмолжно поможет, только там более хардкорные варианты чем inotify

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

Спасибо, но я читала, там нет того что нужно(

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

А чего Вы нервничаете сразу?

Нервничаешь ты, потому что у тебя сессия через две или три недели начинается, а вторая(?) половина курсача не готова ещё.
Job - это особая ветка форума, там в отличие от остальных веток не всегда отвечают по сабжу через 50 секунд после помещения поста.

Тебе sn1ln уже выше ответил, что тебе необходимо делать те же system call'sы к inotify, что и в твоём «демоне». В чём проблема? Не можешь найти как сделать system call из модуля, так как ты делала в своём демоне?

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

" Не можешь найти как сделать system call из модуля, так как ты делала в своём демоне?" Нет, не могу... А как?

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

>Можно и всей

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

Нет ни одного интерфейса для этого. Экспортируются всего несколько функций, например, __fsnotify_parent и fsnotify, но они предназначены для драйверов сторонних файловых систем (их ФС вызывает, когда что-нибудь изменилось). Обратных интерфейсов нет.

Твоя задача на данный момент решения не имеет.

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

ну я сделала strace, ничего полезного там не нашла ... Вот строчка:

inotify_init() = 3 inotify_add_watch(3, «/home....

то что это inotify_init() и так ясно

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

google://«make system call from kernel module forum»
Вот ряд ссылок, которые мне сразу понравились, бросились в глаза:
System call from Kernel
System call and kernel module..
Прочтёшь, вдруг поможет ещё «Implementing a System Call on Linux» и «Introduction to system calls» там должна быть инфа об особенностях выполнения syscall из пространства ядра

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

>"(iii) Kernel Interface"

А это написано для разработчиков glibc. И во-вторых:

Document started 15 Mar 2005 by Robert Love <rml@novell.com>

уже протухло

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

>Не можешь найти как сделать system call из модуля, так как ты делала в своём демоне?

Тебя не смущает, что в одном из этих системных вызовов может стоять функция посылки сигнала вызывающему процессу? (в нашем случае это будет поток)

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

>описание inotify_handle вообще не нашла
Это дескриптор, скорее всего просто интегер, какое ещё у него может быть описание? Он не прозрачен для программиста.

Не понятен смысл этих inotify_operations.

Ну я так понял, там ты предоставляешь свои коллбэки для обработки событий и для удаления вотча.

lyset ★★★
()

Странная у вас проблема. Что мешает вам скачать и посмотреть исходники библиотеки libnotify, которую вы используете в своем демоне?

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

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

Ещё вот можно порыться в VFS, то есть в fs.h. Там есть

extern int notify_change(struct dentry *, struct iattr *);
Она есть в /proc/kallsyms

/proc/kallsyms (since Linux 2.5.71)
This holds the kernel exported symbol definitions used by the modules(X) tools to dynamically link and bind loadable modules.

$ cat /proc/kallsyms | grep \ notify_change
c0185404 T notify_change

В описании struct iattr написано, что эта структура используется notify_change() для того, чтоб узнать, какие атрибуты изменились.
Если с её помощью можно отследить требуемое изменение в VFS, а inotify, как сказал tthl невозможно использовать иначе как из юзерспейса, то может можно придумать как использовать это.

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

Ладно ребят, всем спасибо!) Я буду делать по-другому. У нас половина преподов не шарят. Я вон показывала существующую прогу, мой руководитель даже не заметил что она не в ядре выполняется.

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

хотел спросить, linux преподы вам дают целенаправленно, либо впараллель с технологиями от MS например? вконтакте среди интересов у тебя только свободные технологии.

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

Нет! Меня в универе задолбали, тем что впаривают C#, MS SQL Server, VS, etc. Я сопротивляюсь как могу! Пишу на Qt, использую PostgreSQL. Я винду снесла ещё до 1-го курса, и меня пока не отчислили)) Я даже к зав кафедрой ходила с заявлением что не хочу использовать продукты от MS

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

У меня есть волшебная звёздочка за мелкие заслуги, благодаря которой я могу читать удалённые комментарии :)

>>какой смысл переносить это на ядро если это работает в юзерспейсе?

Я тебе выше привёл первый пришедший в голову пример использования. Всё службы аудита, слежения за изменениями работают из юзерспейса (audit, fam, inotify...). То есть при Local Privilege Escalation все эти процессы, и твоего демона тоже, можно будет тупо послать в kill -SIGKILL <pid>. А со статически вкомпилированным модулем такого не сделаешь. Чуть-чуть допилить и получается система аудита чуть-чуть лучше отгороженная от шаловливых рук пользователя или злоумышленника.

И да, если ты получила такое задание, то не исключена вероятность, что несмотря на упомянутую ограниченность твоих преподов, подобная задача вполне решаема.

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

А ну да согласна... Но минус в том, что демона можно запустить без рута, а insmod без рута не сделаешь!

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

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

> ... Нет, эту задачу я сама себе придумала)

скажу только что в поисках единомышленников ты пришла на этот форум по адресу )

VladimirMalyk ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.