도와주세요!!
안녕하십니까?
mds technology 의 rebis2440보드를 가지고 pc쪽 linux usb 드라이버를 작성하고 있습니다.
작업환경은 fedora8(kernel 2.6.23.1-42.fc8).
작업하는 드라이버 소스는 /usr/src/linux/drivers/usb/usb-skeleton.c 이고 application(파일명은 usb_app.c) 소스는 아래와 같습니다.
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#define USB_SKELETON_NODE "/dev/usb-skeleton"
int main(void)
{
int fd; // File Descripter
int lp; // Loop Counter
int ret;
char buf[64];
fd = open(USB_SKELETON_NODE, O_RDWR);
if(fd < 0) // open error, fd must be unsigned.
{
printf("usb_skelton_Open_function_err is %d\n", fd);
perror("/dev/usb-skeleton open error");
}
ret = read(fd, buf, 64);
if ( ret > 0 )
printf("usb_skelton_read_function_OK is %d\n", ret);
ret = write(fd, buf, 64);
if ( ret > 0 )
printf("usb_skelton_write_function_OK is %d\n", ret);
// ioctl(fd, 0, 0);
close(fd);
return 0;
}
usb device는 MDS technology사의 rebis 2440개발보드입니다. VID와 PID를 host와 Devic가 같게 설정하고 ep1은 BULK IN, ep3은 BULK OUT로 설정하고 host에 련결하였습니다. 실행순서는 아래와 같습니다.
# mknod /dev/usb-skeleton c 200 192
# make
# insmod usb-skeleton.ko
# gcc -o usb_app usb_app.c
# ./usb_app
순서로 진행하였는데 open error 가 나옵니다. (usb-skeleton.c안데 USB_SKEL_MINOR_BASE 가 192 인데 이번호가 어떤 영향을 주는지...??? 그래서 노드를 만들때 192로 했는데...)
device가 련결 되고 insmod 를 실행하면 enumeration이 실행돼여 prob까지 실행되는것은 확인이 돼는데... open을 하면 /dev/usb-skeleton open error: No such device or address 라는 메쎄지가 나옵니다. 원인을 아시는 분들 좀 가르쳐 주세요.(이솝에도 올렸던 질문입니다.)
추가로 usb-skeleton.c로 linux usb host driver 작성하려면 어떤 기능들을 더 추가해야 하는지 도움이 돼는 방법들을 알려 주시면 고맙겠습니다. 감사합니다.