создание файла на жёстком диске из kernel module в Linux
От: gnutha  
Дата: 12.03.08 17:57
Оценка:
как создать файл на hdd из user space — всё просто — open и вперёд.
Из kernel module этот фокус не проходит
а надо писать файл из модуля ядра.

Имеем: linux 2.6.17
/dev/sda
/dev/sda1
cоответственно:
/ # lsmod | grep sd
sd_mod 15184 0 — Live 0xc0254000
scsi_mod 86796 2 sd_mod,libata, Live 0xc021f000

Неимеем: опыта писания модулей ядра

Можем:
-отфармотировать: # jfs_mkfs /dev/sda1
-подмантировать к каталогу /hdd : # mount -t jfs /dev/sda1 /hdd
-писать файл туда но это всё в user space

плиз хелп ... где читать об этом????
Re: создание файла на жёстком диске из kernel module в Linux
От: Dio Elaclaire Россия  
Дата: 12.03.08 18:18
Оценка:
Здравствуйте, gnutha, Вы писали:


G>как создать файл на hdd из user space — всё просто — open и вперёд.

G>Из kernel module этот фокус не проходит
G>а надо писать файл из модуля ядра.

G>Имеем: linux 2.6.17

G>/dev/sda
G>/dev/sda1
G>cоответственно:
G>/ # lsmod | grep sd
G>sd_mod 15184 0 — Live 0xc0254000
G>scsi_mod 86796 2 sd_mod,libata, Live 0xc021f000

G>Неимеем: опыта писания модулей ядра


G>Можем:

G>-отфармотировать: # jfs_mkfs /dev/sda1
G>-подмантировать к каталогу /hdd : # mount -t jfs /dev/sda1 /hdd
G>-писать файл туда но это всё в user space

G>плиз хелп ... где читать об этом????


Не стоит писать файлы из кернел мода
Re: создание файла на жёстком диске из kernel module в Linux
От: MShura  
Дата: 12.03.08 20:40
Оценка:
G>как создать файл на hdd из user space — всё просто — open и вперёд.
G>Из kernel module этот фокус не проходит
G>а надо писать файл из модуля ядра.

Если очень хочется, то можно.
Работает на многих платформах.

срфк* LogTo = ....
struct file *log_file = filp_open( LogTo, O_RDWR /*| O_APPEND*/ | O_CREAT | O_TRUNC, S_IRUGO | S_IWUGO );
if (IS_ERR(log_file)) {
  long error = PTR_ERR(log_file);
  log_file   = NULL;
  ....
}

...

if ( NULL != log_file && NULL != log_file->f_op && NULL != log_file->f_op->write ) {
    mm_segment_t old_limit;
    long error;

    old_limit = get_fs();
    set_fs(KERNEL_DS);
    error = log_file->f_op->write(log_file, p, len, &log_file->f_pos);
    set_fs(old_limit);

    if ( error < 0 ) {
      filp_close(log_file, NULL);
      log_file = NULL;
    }
}

...

if ( NULL != log_file ){
    filp_close(log_file, NULL);
    log_file = NULL;
}
Re: создание файла на жёстком диске из kernel module в Linux
От: Michael7 Россия  
Дата: 12.03.08 21:51
Оценка:
Здравствуйте, gnutha, Вы писали:


G>как создать файл на hdd из user space — всё просто — open и вперёд.

G>Из kernel module этот фокус не проходит
G>а надо писать файл из модуля ядра.

Писать файл из модуля ядра концептуально неправильно, подобный приём фактически разрушает нормальную систему организации доступа к ресурсам в Linux. Возможно вам поможет добавление нового системного вызова в ядро.

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

здесь
Re: создание файла на жёстком диске из kernel module в Linux
От: ДимДимыч Украина http://klug.org.ua
Дата: 13.03.08 09:58
Оценка: +1
Здравствуйте, gnutha, Вы писали:

G>как создать файл на hdd из user space — всё просто — open и вперёд.

G>Из kernel module этот фокус не проходит
G>а надо писать файл из модуля ядра.

Каковы причины того, что файл писать нужно только из ядра? Или иницициатор события, реакцией на которое должно быть создание файла, находится в ядре? Тогда сделайте демона в юзерспейсе, который будет ожидать событие из ядра и по нему создавать и писать файл.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re[2]: создание файла на жёстком диске из kernel module в Li
От: gnutha  
Дата: 14.03.08 13:24
Оценка:
Здравствуйте, MShura, Вы писали:

G>>как создать файл на hdd из user space — всё просто — open и вперёд.

G>>Из kernel module этот фокус не проходит
G>>а надо писать файл из модуля ядра.

MS>Если очень хочется, то можно.

MS>Работает на многих платформах.

Спасибо огромное!!!
работает и у меня то же
щаз буду анализировать этот способ и смотреть что за функции я дёргаю


Санкс!!!
Re[2]: создание файла на жёстком диске из kernel module в Li
От: gnutha  
Дата: 14.03.08 13:26
Оценка:
Здравствуйте, ДимДимыч, Вы писали:

ДД>Здравствуйте, gnutha, Вы писали:


G>>как создать файл на hdd из user space — всё просто — open и вперёд.

G>>Из kernel module этот фокус не проходит
G>>а надо писать файл из модуля ядра.

ДД>Каковы причины того, что файл писать нужно только из ядра? Или иницициатор события, реакцией на которое должно быть создание файла, находится в ядре? Тогда сделайте демона в юзерспейсе, который будет ожидать событие из ядра и по нему создавать и писать файл.



демон в user space это запасной вариант
Re[2]: создание файла на жёстком диске из kernel module в Li
От: gnutha  
Дата: 14.03.08 13:28
Оценка:
Здравствуйте, Michael7, Вы писали:

M>Здравствуйте, gnutha, Вы писали:



G>>как создать файл на hdd из user space — всё просто — open и вперёд.

G>>Из kernel module этот фокус не проходит
G>>а надо писать файл из модуля ядра.

M>Писать файл из модуля ядра концептуально неправильно, подобный приём фактически разрушает нормальную систему организации доступа к ресурсам в Linux. Возможно вам поможет добавление нового системного вызова в ядро.


M>

M>Если вы часто пишете программы и постоянно мучаете себя вопросом, почему нету такого хорошего вызова XYZ в ядре, то эта статья для вас. Она научит вас как самим реализовать этот хороший вызов XYZ, и возможно, вы поймете, что он не такой и хороший... да и вовсе не нужный

M>здесь

Спасибо за ссылку
Re[2]: создание файла на жёстком диске из kernel module в Li
От: gnutha  
Дата: 14.03.08 13:29
Оценка:
Здравствуйте, Dio Elaclaire, Вы писали:

DE>Здравствуйте, gnutha, Вы писали:



G>>как создать файл на hdd из user space — всё просто — open и вперёд.

G>>Из kernel module этот фокус не проходит
G>>а надо писать файл из модуля ядра.

G>>Имеем: linux 2.6.17

G>>/dev/sda
G>>/dev/sda1
G>>cоответственно:
G>>/ # lsmod | grep sd
G>>sd_mod 15184 0 — Live 0xc0254000
G>>scsi_mod 86796 2 sd_mod,libata, Live 0xc021f000

G>>Неимеем: опыта писания модулей ядра


G>>Можем:

G>>-отфармотировать: # jfs_mkfs /dev/sda1
G>>-подмантировать к каталогу /hdd : # mount -t jfs /dev/sda1 /hdd
G>>-писать файл туда но это всё в user space

G>>плиз хелп ... где читать об этом????


DE>Не стоит писать файлы из кернел мода




спасибо за ссылку
Re[2]: создание файла на жёстком диске из kernel module в Li
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 14.03.08 23:42
Оценка:
Здравствуйте, Michael7, Вы писали:

M>Писать файл из модуля ядра концептуально неправильно, подобный приём фактически разрушает нормальную систему организации доступа к ресурсам в Linux.


В качестве замены того же в userland — да.
Во всех случаях — нет, нет и нет.
Ядро корку пишет — оно при этом что-то разрушает?
Квоты используют спецфайлы в корне FS — при этом что-то разрушается?
Спецлог писать — что при этом разрушается?

Не надо обобщать больше, чем реально нужно.
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.