도와주세요!!
글 수 15,339
2004.02.03 17:57:48 (*.248.234.14)
6659
궁금합니다...
제가 알고 있기로 Device driver에서 아래와 같이 file operations함수를
만들어 주고(read, write 등등도 마찬가지로)
static int gpio_ioctl
( struct inode *inode, struct file *filp, unsigned int cmd, unsigned
long arg )
이걸 써먹기 위해서 응용프로그램에서
ioctl( fd, GPIO_IOCTL_DIR, 0x8002 );
이런 식으로 호출을 하면 gpio_ioctl함수가 실제 실행되는 건가요?
그렇다면 인수 전달이 어떻게 되는 건가요.. 물론 ioctl함수 자체 인수는
위의 ioctl 처럼 되있는게 맞지만... 이게 gpio_ioctl로 전달되면서..
inode나 filp 등은 어떻게 되는 건가요...
강좌의 GPIO예제 처럼 디바이스 드라이버 함수(gpio_ioctl같은)에서 inode나
filp 인수를 사용하지 않는 경우는 모르고 넘어 가도 상관 없지만,
아래의 open함수 같은 경우는 꽤 복잡하게 filp 등의 인수를 사용하는데
실제 응용프로그램에서 filp에 어떤 데이터를 전달하려면 어떻게 해야 하는지
요...
shift_open(struct inode *inode, struct file *filp)
{
int minor;
struct shift *d;
int result = 0;
minor = MINOR(inode->i_rdev);
if (minor < 0 || SHIFT_NUM_DEVICES <= minor) {
printk(KERN_INFO "74hc595a: minor out of range
");
result = -ENODEV;
goto out;
}
d = shift_device[minor];
if (d == NULL) {
printk(KERN_INFO
"74hc595a: no device registerred for minor %
d
", minor);
result = -ENODEV;
goto out;
}
filp->private_data = d;
out:
return result;
}
read나 wirte함수도 그렇고 이 부분을 확실히 모르겠습니다..
설명 좀 부탁드려도 될까요.. 질문이 제대로 된 건지도 잘 모르겠네요..
죄송합니다.
제가 알고 있기로 Device driver에서 아래와 같이 file operations함수를
만들어 주고(read, write 등등도 마찬가지로)
static int gpio_ioctl
( struct inode *inode, struct file *filp, unsigned int cmd, unsigned
long arg )
이걸 써먹기 위해서 응용프로그램에서
ioctl( fd, GPIO_IOCTL_DIR, 0x8002 );
이런 식으로 호출을 하면 gpio_ioctl함수가 실제 실행되는 건가요?
그렇다면 인수 전달이 어떻게 되는 건가요.. 물론 ioctl함수 자체 인수는
위의 ioctl 처럼 되있는게 맞지만... 이게 gpio_ioctl로 전달되면서..
inode나 filp 등은 어떻게 되는 건가요...
강좌의 GPIO예제 처럼 디바이스 드라이버 함수(gpio_ioctl같은)에서 inode나
filp 인수를 사용하지 않는 경우는 모르고 넘어 가도 상관 없지만,
아래의 open함수 같은 경우는 꽤 복잡하게 filp 등의 인수를 사용하는데
실제 응용프로그램에서 filp에 어떤 데이터를 전달하려면 어떻게 해야 하는지
요...
shift_open(struct inode *inode, struct file *filp)
{
int minor;
struct shift *d;
int result = 0;
minor = MINOR(inode->i_rdev);
if (minor < 0 || SHIFT_NUM_DEVICES <= minor) {
printk(KERN_INFO "74hc595a: minor out of range
");
result = -ENODEV;
goto out;
}
d = shift_device[minor];
if (d == NULL) {
printk(KERN_INFO
"74hc595a: no device registerred for minor %
d
", minor);
result = -ENODEV;
goto out;
}
filp->private_data = d;
out:
return result;
}
read나 wirte함수도 그렇고 이 부분을 확실히 모르겠습니다..
설명 좀 부탁드려도 될까요.. 질문이 제대로 된 건지도 잘 모르겠네요..
죄송합니다.