LINUX.ORG.RU

Kernel to user.


0

0

Всем привет,

Знатоки, помогите с решением.

Как мне из ядра Linux пользовательскому приложению передать информацию?

Хочется из функции sys_write передавать для определенных файлов информацию об изменении в user mode приложение.

Правильно ли использовать shared memory? Используют ли ее в ядре вообще? Какие еще варианты можно попробовать?

Заранее спасибо!

>Хочется из функции sys_write передавать для определенных файлов информацию об изменении в user mode приложение.
Об изменении чего, и почему именно из write? За изменениями в фс можно мониторить с помощью inotify. Если я не угадал - создавай ещё один системный вызов и дёргай его после write.

Правильно ли использовать shared memory?

И как ты это себе представляешь? Адрес в пространстве процесса выделить? Так не делают.

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

Спасибо за ответ.

Хочется вытащить из write номер сектора, который изменен. inotify этого не дает. Поэтому и вопрос, как мне передать данные из ядра пользователю? Получить в ядре не проблема. А как передать пользователю?

Может можно с помощью copy_to_user из передать?

Вопрос как правильно?

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

Хочется вытащить из write номер сектора, который изменен. inotify этого не дает.

Ну так добавь.

Ещё можно на ftrace посмотреть.

mv ★★★★★ ()

Создать char device, который будет читать user-space? А в этот device кидать данные в определенном формате. user-space будет ждать чтения, а kernel-space по появлении данных пробуждать user-space.

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

>Хочется вытащить из write номер сектора, который изменен
ну, во-1-ых, их может быть много.
во-2-ых, через какую переменную ты это собираешься делать? (менять список аргументов стандартного системного вызова смерти подобно)
в-3-их, тебе придется править код чуть ли не каждой фс, чтобы добавить такой функционал.
я бы тебе рекомендовал расширить struct file нужной информацией и сделать свой ioctl вызов типа IOC_GET_LAST_WRITE_SECTORS.

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

Всем спасибо за ответы :) если есть еще варианты, давайте :)

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

Мне видится самым интересным вариант отслеживать эти сектора в ядре, далее передавать в пространство пользователя.

Пока доработка inotify и расширение file выглядит наиболее интересным. Только с file придется сложнее, мне кажется.

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

>По скорости вариант быстрый.

Не стоит заниматься оптимизацией, пока не разобрался как реализовывать же.

anon_666 ()
Ответ на: комментарий от SteveN

Кстати, что все-таки насчет copy_to_user? Можно ли ее тут использовать? По скорости вариант быстрый.

copy_to_user - это безопасный вариант memcpy, с обработкой GPF, и всего-то. Если тебе есть кому и куда копировать, то копируй ;)

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

Спасибо за ответ :)

И все-таки мне не понятно, почему нельзя использовать разделяемую память? Более того сейчас я так и сделал, использовал System V, вызываю в ядре shmget, shmat... в user приложении читаю что записал.

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