The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"sys_open не работает"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"sys_open не работает"
Сообщение от au emailИскать по авторуВ закладки on 08-Янв-05, 03:27  (MSK)
Пробую написать свой модуль, в функции module_init такая строчка
...
int F = sys_open("/etc/filename", O_RDONLY, 0);
...
возвращает -14 (есть файл, нету, все по барабану)... Прочитал про kernel/user spaces там предлагают такое решение
...
mm_segment_t fs = get_fs();
set_fs(get_ds());
int F = sys_open("/etc/filename", O_RDONLY, 0);
set_fs(fs);
...
Этот код засталяет ядро паниковать и все тут (много чего пришет, в конце "EIP bad value"). Кстати, в kern.log ни слова про панику (зачем тогда лог нужен?). Вопрос еще, как зделать чтобы логи паники появлялись в kern.log (если вообще возможно)?
Версия ядра - 2.6.9. Если кто сталкивался, раскажите
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "sys_open не работает"
Сообщение от Bob Искать по авторуВ закладки(??) on 10-Янв-05, 10:50  (MSK)
Т.е. ты хочешь из ядра открыть и прочитать файл. Так?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "sys_open не работает"
Сообщение от au emailИскать по авторуВ закладки on 10-Янв-05, 15:22  (MSK)
>Т.е. ты хочешь из ядра открыть и прочитать файл. Так?

вроде так

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "sys_open не работает"
Сообщение от Bob emailИскать по авторуВ закладки(??) on 10-Янв-05, 18:02  (MSK)
>>Т.е. ты хочешь из ядра открыть и прочитать файл. Так?
>
>вроде так

Poprobuy etot code:

/* copy_file.c */
#include <linux/module.h>
#include <linux/config.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <asm/uaccess.h>// get_fs(), set_fs(), KERNEL_DS
#include <linux/file.h> // fput()
#include <linux/mm.h> // GFP_KERNEL
#include <linux/slab.h> // kmalloc

void copy_file(const char * fread, const char * fwrite)
{
    int length_read, length_write;
    char buffer[255];
    struct file * f = NULL;
    struct inode *inode;
    mm_segment_t orig_fs;

    f = filp_open(fread, O_RDONLY, 00);
    if (!f || !f->f_op || !f->f_op->read) {
printk(KERN_INFO "File (read) object is a null pointer!\n");
return;
    }

    //f->f_pos = 2;

    inode = f->f_dentry->d_inode;
    printk(KERN_INFO "File size - %u\n", (unsigned int)inode->i_size);

    orig_fs = get_fs();
    set_fs(KERNEL_DS);

    length_read = f->f_op->read(f, buffer, 4, &f->f_pos);

    fput(f);

    f = filp_open(fwrite, O_WRONLY | O_CREAT, 0600);
    if (!f || !f->f_op || !f->f_op->write) {
printk(KERN_INFO "File (write) object is a null pointer!\n");
return;
    }

    //f->f_pos = 4;
    orig_fs = get_fs();
    set_fs(KERNEL_DS);

    length_write = f->f_op->write(f, buffer, 4, &f->f_pos);

    fput(f);

    return;
}


static int __init copymodule_init(void)
{
    unsigned char *file_to_read = kmalloc(20, GFP_KERNEL);
    unsigned char *file_to_write = kmalloc(20, GFP_KERNEL);

    file_to_read = "/home/readwrite/mark";
    file_to_write = "/home/readwrite/mike";
    copy_file(file_to_read, file_to_write);
    return 0;
}

static void __exit copymodule_exit(void)
{  
    return;
}

module_init(copymodule_init);
module_exit(copymodule_exit);

MODULE_LICENSE("GPL");
/* end of copy_file.c */

#Makefile:
CC = gcc
CFLAGS = -O2 -Wall
LINUX = /usr/src/linux
MODFLAGS = -D__KERNEL__ -DMODULE -I$(LINUX)/include

copy_file.o: copy_file.c
$(CC) $(CFLAGS) $(MODFLAGS) -c copy_file.c
#end of Makefile

Posle compilyacii vvodi comandu:
insmod copy_file.o

Tolko pravil`no zaday imena faylov (file_to_read i file_to_write).

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "sys_open не работает"
Сообщение от Bob emailИскать по авторуВ закладки(??) on 10-Янв-05, 18:07  (MSK)
P.S. Kernel 2.4.28.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "sys_open не работает"
Сообщение от DeadMustdie emailИскать по авторуВ закладки(??) on 10-Янв-05, 21:19  (MSK)
Может, оно и работает... Но скорее вопреки усилиям автора, чем благодаря
им. Например, меня сильно радует фрагментик:

static int __init copymodule_init(void)
{
    unsigned char *file_to_read = kmalloc(20, GFP_KERNEL);
    unsigned char *file_to_write = kmalloc(20, GFP_KERNEL);

    file_to_read = "/home/readwrite/mark";
    file_to_write = "/home/readwrite/mike";
    copy_file(file_to_read, file_to_write);
    return 0;
}

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "sys_open не работает"
Сообщение от genie emailИскать по авторуВ закладки on 11-Янв-05, 00:13  (MSK)
M-da... Desitvitel'no... Vopreki...
  Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "sys_open не работает"
Сообщение от au emailИскать по авторуВ закладки on 14-Янв-05, 14:04  (MSK)
>>>Т.е. ты хочешь из ядра открыть и прочитать файл. Так?
>>
>>вроде так
>
>Poprobuy etot code:
>

Разбираюсь... спасибо

  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "sys_open не работает"
Сообщение от Murr Искать по авторуВ закладки(??) on 11-Янв-05, 19:50  (MSK)
>Этот код засталяет ядро паниковать и все тут (много чего пришет, в
>конце "EIP bad value").

Скорее всего ядро заставляет паниковать другой код, т.к. то, что написано - корректно.

> Кстати, в kern.log ни слова про панику
>(зачем тогда лог нужен?). Вопрос еще, как зделать чтобы логи паники
>появлялись в kern.log (если вообще возможно)?

man klogd

>Версия ядра - 2.6.9. Если кто сталкивался, раскажите


  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру