안녕하세요?

첨부된 GPIO 테스트 소스에서 다음 부분을 잘 모르겠습니다.

[ test.c ]

ioctl( dev, IOCTL_GPIO_LED_ON_OFF, &pData );

[ gpio.h ]

typedef struct
{
int Cmd; // 명령어
unsigned long Data; // 입출력 데이타
} GPIO_CmdData;

// 제어 명령 리스트
#define IOCTL_GPIO_LED_ON_OFF _IOW(GPIO_IOC_MAGIC, 0,
GPIO_CmdData *)


[ gpio.c ]

int gpio_ioctl(struct inode *inode, struct file *filp, unsigned
int cmd,
unsigned long arg)
{
switch (cmd)
{
case IOCTL_GPIO_LED_ON_OFF:
return gpio_led_on_off ( (GPIO_CmdData *)
arg );
}
}

==> test.c에서 ioctl함수를 호출하면 gpio.h의 정의된 명령을 통하여 디바이
스 드라이브의 gpio.c로 명령과 데이타를 넘겨 주게 된다고 되어 있습니다.
다시 한번 써보면 다음과 같습니다.
ioctl( dev, _IOW(GPIO_IOC_MAGIC, 0, GPIO_CmdData *), &pData );
->
int gpio_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
unsigned long arg)

여기서 데이터가 어떻게 전달되는지 모르겠습니다. dev->inode,
GPIO_IOC_MAGIC->filp, 0->cmd 이런 식으로 전달 되는것인지요?

그리고 염치 없지만 한가지 더 질문하겠습니다.
GPIO_IOC_MAGIC = 'g'라고 되어 있는데.. 이게 뭘하는 것인지 잘 모르겠습니
다.

혹시 설명하시기 어렵다면 이런것을 알려면 뭘 보면 되는지라고 가르쳐주시면
고맙겠습니다. 책을 보고 싶어도 무슨 책을 봐야 하는지 감을 못 잡겠습니다.

그럼 읽어주셔서 감사합니다.