모듈 프로그래밍에서 file 읽고 쓰기 ??

전경주의 이미지

안녕하세요 ~~
요즘 커널 모듈 프로그래밍을 하고 있는데~~
감이 없어서 다시 질문을 올립니다.

제가 커널 모듈에서 file 을 만들고 읽고 쓰고 해야 합니다.
근데 인터넷을 돌아다니면 소스을 구해습니다.
소스 내용은 아래와 같습니다.

static void write_file(char *filename, char *data)
{
struct file *file;
loff_t pos = 0;
int fd;
mm_segment_t old_fs = get_fs();
set_fs(KERNEL_DS);
fd = sys_open(filename, O_WRONLY|O_CREAT, 0644);
if (fd >= 0) {
sys_write(fd, data, strlen(data));
file = fget(fd);
if (file) {
vfs_write(file, data, strlen(data), &pos);
fput(file);
}
sys_close(fd);
}
set_fs(old_fs);
}
static int __init init(void)
{
write_file("/tmp/test", "Evil file.\n");
return 0;
}
static void __exit exit(void)
{ }
MODULE_LICENSE("GPL");
module_init(init);
module_exit(exit);

근데 문제는 필자에 말이 이와 같은 방법은 사용하지 않는다고 합니다.
필자는 proc , ioctl , sysfs 방법을 추천하였습니다.

근데 proc , sysfs 파일시스템은 제가 원하는 파일시스템 아닙니다. 이유는 아래와 같습니다.
proc file system : 메모리상에 존재하므로 불가능 (용량이 커서)
sysfs file system : 사용자 마음대로 생성 제거 할수 없습니다.(그리고 사용 할수 없습니다.)

그리고 ioctl 은 어떻게 해야 하는지 모릅니다.
ioctl 을 이용하여 파일을 생성하고 읽고 쓰기 하는 소스가 있으면 좀 부탁합니다.

또는 다른 방법으로 파일, 디렉토리 을 생성,제거 읽기, 쓰기 할수 있는 방법이 있으면
추천과 관련 소스좀 부탁 합니다.

날씨가 포근 해졌네요 이럴때일수록 감기 조심하시구
수고 하세요

bushi의 이미지

필자의 말은 커널과 유저간의 데이타교환에 대한 원론적인 얘기입니다.

netlink를 이용하는 방법도 있습니다.
예제는 lib/kobject_uevent.c

커널에서 파일을 읽고 써야 할 경우, 찾으신 것이 대강 비슷하긴 합니다.
filp_open()/filp_close(), vfs_read()/vfs_write()
물론 전후에 get_fs()/set_fs() 사용해야 하고요.
예제는 drivers/usb/gadget/file_storage.c

토끼아빠의 이미지

안녕하세요~~
님은 작년 이맘때 이 문제에 접하셨군요
지금 제가 이 문제에 부닥쳤는데요~~
님이 올린 소스코드도 이전에 실행시켜보았는데 바라는대로 되지 않는군요...
모듈 프로그래밍에서 파일오퍼레이션문제를 지금쯤은 완벽히 해결하셨다고 생각하는데...
좀 가르쳐주세요~~
잘 부탁드립니다...

좋은 하루 되세요!!

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.