모듈 프로그래밍에서 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 을 이용하여 파일을 생성하고 읽고 쓰기 하는 소스가 있으면 좀 부탁합니다.
또는 다른 방법으로 파일, 디렉토리 을 생성,제거 읽기, 쓰기 할수 있는 방법이 있으면
추천과 관련 소스좀 부탁 합니다.
날씨가 포근 해졌네요 이럴때일수록 감기 조심하시구
수고 하세요
필자의 말은 커널과
필자의 말은 커널과 유저간의 데이타교환에 대한 원론적인 얘기입니다.
netlink를 이용하는 방법도 있습니다.
예제는 lib/kobject_uevent.c
커널에서 파일을 읽고 써야 할 경우, 찾으신 것이 대강 비슷하긴 합니다.
filp_open()/filp_close(), vfs_read()/vfs_write()
물론 전후에 get_fs()/set_fs() 사용해야 하고요.
예제는 drivers/usb/gadget/file_storage.c
전경주님께 부탁드립니다.
안녕하세요~~
님은 작년 이맘때 이 문제에 접하셨군요
지금 제가 이 문제에 부닥쳤는데요~~
님이 올린 소스코드도 이전에 실행시켜보았는데 바라는대로 되지 않는군요...
모듈 프로그래밍에서 파일오퍼레이션문제를 지금쯤은 완벽히 해결하셨다고 생각하는데...
좀 가르쳐주세요~~
잘 부탁드립니다...
좋은 하루 되세요!!
댓글 달기