qemu 소스에서 제가 만든 디바이스 드라이버 오픈이 안되네요
모듈 형식으로 만든 디바이스드라이버를 오픈을 qemu에서 오픈하려고 하는데
계속 리턴값이 -1 즉 실패로 뜨네요
따로 테스트프로그램을 만들땐 완벽하게 오픈이 되서 작동을 합니다
커널메세지에도 당연히 뜨구요
근데 qemu소스에 pwrite부분이 있는 곳 직전에 오픈을 하려고 하는데
단순히 -1만 뜨고 원인을 찾기가 너무 힘드네요...
보통 무엇이 문제일때 이러는걸까요
static ssize_t handle_aiocb_rw_linear(RawPosixAIOData *aiocb, char *buf)
{
ssize_t offset = 0;
ssize_t len;
unsigned int devfd;
while (offset < aiocb->aio_nbytes) {
if (aiocb->aio_type & QEMU_AIO_WRITE) {
//devfd = qemu_open("/dev/mydev",O_RDWR | O_NDELAY);
devfd = open("/dev/mydev",O_RDWR | O_NDELAY,0777);
printf("devfd : %d\n", devfd);
if(devfd != -1)
{
len = syscall(__NR_my_pwrite64,devfd, (const char *)buf + offset, aiocb->aio_nbytes - offset, aiocb->aio_offset + offset,aiocb->aio_fildes);
close(devfd);
}
else
{
close(devfd);
len = pwrite(aiocb->aio_fildes, (const char *)buf + offset, aiocb->aio_nbytes - offset, aiocb->aio_offset + offset);
}
혹시나 해서 소스를 올렸습니다.
오픈을 해서 제가 만든 syscall로 들어가야 하는데 -1이 리턴이 계속 되네요
다른 테스트유저프로그램으로는 확실하게 돌아가는게 확인됐습니다.
http://man7.org/linux/man
http://man7.org/linux/man-pages/man2/open.2.html#RETURN_VALUE
http://man7.org/linux/man-pages/man3/errno.3.html#DESCRIPTION
http://man7.org/linux/man-pages/man3/errno.3.html#SEE_ALSO
댓글 달기