![]() |
|
Модераторы: xvr |
![]()
|
|
| Sandric |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 7.12.2007 Репутация: нет Всего: нет |
В университете задали задание выполнить копирование из файла в файл в kernel и user mode. Вообще лабораторная рассчитывалась под win, но я уже начал выполнять под убунтой, и вот что получилось:
Она работает, но теперь мне нужно запустить ее в режиме ядра. Если кто знает как это сделать, пожалуйста отпишитесь. |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
боюсь, с таким уровнем знаний (судя по коду) ядро вы не осилите
значит скорее всего вам в центр помощи нужно обратиться, т. к. за вас тут коди писать не будут -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Sandric |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 7.12.2007 Репутация: нет Всего: нет |
Вообщето я писал kernel-mode код на плюсах около года назад. Это был простой драйвер на курсах по низкоуровневому программированию, но это было под win. В любом случае не думаю, что вы можете что то предполагать относительно того что я смогу осилить, а что не смогу. И если вам кажется что мой код настолько далек от необходимого, думаю уместнее было бы порекоммендовать конкретную литературу или маны. Конечно если вы на 100(!)% уверены что я осилю. |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Работа с файлами в kernel под Linux практически невозможна (поправьте меня, если это уже не так).
Под Win - возможна. Так что бегом обратно под Win |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
что значит практически? -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Sandric |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 7.12.2007 Репутация: нет Всего: нет |
Спасибо. Я в свою очередь нашел на английском языке Kernel module linux programming guide. Буду читать. |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 8 Всего: 58 |
Во-первых в приведенном коде как минимум одна ошибка. Во-вторых. Какое отношение user-space код имеет к kernel-sapce'у
? |
|||
|
||||
| svlary |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 8.9.2009 Репутация: 4 Всего: 4 |
|
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Я давно не смотрел в ядро, но когда я смотрел туда в последний раз, то таблица файлов (т.е. файловых хэндлов) была принадлежностью описания user space процесса. Т.е. без какого то хелпера (в виде обычного пользовательского процесса) нельзя было использовать никакой handle based файловый ввод вывод (kernel просто не мог открыть файл, т.к. было некуда)
|
||||
|
|||||
| svlary |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 8.9.2009 Репутация: 4 Всего: 4 |
Эти функции подробно описаны в книге : Бовет, Д. "Ядро Linux, 3-е изд. " В частности про функцию sys_open () там пишется (стр 650): Опишем работу функции sys_open (). Она выполняет следующие шаги:
возвращенный функцией dentryopen (). |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Внимательно смотрим на пп 1,2,4 и делаем вывод - эта функция (и весь вышеперечисленный набор) открывает файл в ТЕКУЩЕМ ПОЛЬЗОВАТЕЛЬСКОМ процессе. Т.е. вы откроете файл где то у user level приложения, а не в ядре. Вы сможете общаться с этим файлом и из ядра, но и приложение у пользователя его тоже увидит (и это может ему не понравится).
Еще у меня есть подозрение, что буфера для обмена с файлом тоже будут у пользовательского приложения (для sys_open это явно написанно в п1) Вывод - пишите на Win, там функции Nt*File работают одинаково в User Space и в Kernel Space и позволяют работать с файлом с Kernel Level не вываливая его потроха в первый попавшийся User Space процесс PS. В Linux insmod не зря читает образ драйвера (kernel модуля) из User Space, а не непосредственно из ядра |
|||
|
||||
| Sandric |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 7.12.2007 Репутация: нет Всего: нет |
Добрый день.
Спасибо за все советы, но боюсь мне уже будет поздно переделывать все под винду. У меня новый вопрос - запись чтение в файл используя стандартную библиотеку (fprintf). Я сделал копирование файла, используя vfs_write/vfs_read:
Но теперь мне нужно реализовать чтение/запись используя стандартную библиотеку в пользовательском режиме и режиме ядра. Есть ли какой то аналог fprintf, или функция, которую использует fprintf при работе с ядром. Спасибо. |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
смотрите <linux/kernel.h>
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| xvr |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Это не советы, это диагноз
man на filp_open порадовал:
|
||||||
|
|||||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |