copy_to_user 질문입니다.
usb 드라이버를 만들어보고 있습니다.
APP에서 ioctl()함수를 사용해서 H/W의 Register값을 읽어오고 싶어서
아래와 같이 작업했습니다.
int skel_ioctl (struct inode *inode, struct file *file, unsigned int ioctl_num, unsigned long ioctl_param )
{
.......
struct usb_skel *dev;
dev = (struct usb_skel *)file->private_data;
dev->UserBuffer = (unsigned char*)ioctl_param; // Read_bulk_callback() 에서 사용하기 위해서...
.......
}
static void Read_bulk_callback(struct urb *urb)
{
struct usb_skel *dev;
dev = (struct usb_skel *)urb->context;
........
// urb를 내려보내서 읽어온 H/W Register 값을 APP에게 넘겨주려는 의도
if (copy_to_user((void*)dev->UserBuffer, (const void*)&urb->transfer_buffer[0], urb->transfer_buffer_length))
printk("copy_to_user UserBuffer error \n");
else
printk("copy_to_user UserBuffer success \n");
........
}
위와 같은 드라이버 소스를 돌려보면
copy_to_user 함수 자체가 에러를 리턴하게 되는데
어떤게 잘 못된 건지 알고 싶습니다.
감사합니다.
댓글 달기