[Armadillo:00436] Re: カーネルモードでのファイル読み込み

Masahiro Hanada email@hidden
2005年 8月 5日 (金) 12:17:20 JST


花田です。

<email@hidden> wrote:

> 現在ドライバーの中でファイルを読み込もうとして、
> 以下のコードを実行していますが:
>  int BytesRead;
>  struct file  *filp;
>  mm_segment_t oldfs;
> 
>  filp = filp_open( filename, O_RDONLY | O_LARGEFILE, 0 );
>  filp->f_pos = 0x0000;
>  oldfs = get_fs();
>  set_fs(KERNEL_DS);
>  BytesRead = filp->f_op->read( filp, Buffer, size_t, &filp->f_pos );
>  set_fs( oldfs );
> 
>  set_fs(KERNEL_DS);を実行した時点で、処理が進まなくなっています。

何がどういう理由で動かなかったのかわかりませんが…
下記のコードで動作することを確認しました。
(KERNEL_DSをget_ds()に変えたりしてますが、
 Armの場合はinclude/asm-arm/uaccess.hで
 #define get_ds() (KERNEL_DS)
 されてるだけなので、この点は結局変わらないようです)

--------------------------------------------------------------------------------
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <asm/processor.h>
#include <asm/uaccess.h>

static int ds_init(void)
{
        struct file *filp;
        mm_segment_t fs;
        char buf[16];
        int nr_read;

        filp = filp_open("/etc/passwd", O_RDONLY | O_LARGEFILE, 0);
        if (!filp) {
                printk("can't open /etc/passwd\n");
                goto end;
        }

        fs = get_fs();
        set_fs(get_ds());

        nr_read = filp->f_op->read(filp, buf, sizeof(buf)-1, &filp->f_pos);
        buf[nr_read] = '\0';
        printk("%d bytes read '%s'\n", nr_read, buf);

        set_fs(fs);

        filp_close(filp, NULL);

end:
        return 0;
}

static void ds_exit(void)
{
}

module_init(ds_init);
module_exit(ds_exit);

MODULE_AUTHOR("Yasushi SHOJI <email@hidden>");
MODULE_DESCRIPTION("ds test module");
MODULE_LICENSE("GPL");
--------------------------------------------------------------------------------

____________________________________________________

    花田 政弘 (はなだ まさひろ)

      (株)アットマークテクノ IT開発部
        TEL: 011-207-6550    FAX: 011-207-6570
        URL: http://www.atmark-techno.com/

    E-mail: email@hidden
____________________________________________________




armadillo メーリングリストの案内