디바이스 드라이버 권한(EPERM)문제...
QEMU에서 제가 만든 디바이스드라이버를 오픈하려고 하는데 문제가 생겨서
이전에 글을 남겼는데
errno을 검색하면서 어느정도 감을 잡았습니다.
첨엔 errno가 13(permission denied)가 떠서
qemu-system-x86의 uid를 libvirt-bin에서 root로 바꾸었더니
errno가 1로(Operation not permitted)가 나옵니다.
제가 만든 디바이스드라이버를 chmod로 777로 줘도 계속 이런문제가 생기네요
어디에서 권한문제에 의해 꼬인건지 감을 못잡겠습니다 ㅠ
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);
}
코드이구요... errno은 커널내부에서 확인을 했습니다.
Operation not permitted는 장치가
Operation not permitted는 장치가 사용자가 요구하는 기능 지원 안할때 납니다.
qemu면 실제장치는 지원해도 vm인 qemu에서 지원 안해서 났을수도 있을겁니다.
Written By the Black Knight of Destruction
흠...
그럼 qemu에서 디바이스드라이버 오픈은 불가하다고 봐야하나요...
지금 보니까... 그냥 일반파일조차도 오픈이 안되는거 같고...
qemu안에 qemu_open 이란 함수가 있긴 한데 이걸 써도 똑같네요 결과는...
참고로 저 소스는 vm에 있는게 아닌 호스트머신에 있는 소스에요
댓글 달기