Need help adding platform UIO devices to board
Hello!
I'm trying to add UIO device to my system to handle interrupt. But i'm facing following problem. Docs says, on reading device /dev/uio0 it will block until interrupt occurs. I've made simple program for test. It tries to write 1 to enable interrupts.
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
int main()
{
int fd;
char c = 1;
fd = open("/dev/uio0", O_RDONLY);
if (fd<0) {
printf("open error: %d\n", errno);
return 0;
}
printf("fd == %d\n", fd);
int res = write(fd, &c, 1);
if(res<0) {
printf("write error: %d\n", errno);
}
return 0;
}And as the output i get
fd ==
3
write error: 9 error 9 means "bad file descriptor". File /dev/uio0 is here. /sys/class/uio/uio0 folder i also. Reading are fails the same way.
Here is how i add device to the system in board specific code
static struct uio_info cross_uio_info = {
.name = "uio_mcross",
.version = "0.1",
.irq = IRQ_EINT14,
.irq_flags = 0,
};
static struct platform_device minipos_cross_device = {
.name = "uio_pdrv_genirq",
.id = -1,
.dev = {
.platform_data = &cross_uio_info,
}
};and then add platform device.
Please, help.
Quoted 19 lines · Alexander Varnin
Hello!
I'm trying to add UIO device to my system to handle interrupt. But i'm facing following problem. Docs says, on reading device/dev/uio0it will block until interrupt occurs. I've made simple program for test. It tries to write 1 to enable interrupts.#include <unistd.h> #include <errno.h> #include <fcntl.h> #include <stdio.h> int main() { int fd; char c = 1; fd = open("/dev/uio0", O_RDONLY); if (fd<0) { printf("open error: %d\n", errno); return 0;
Quoted 9 lines
}
printf("fd == %d\n", fd);
int res = write(fd, &c, 1);
if(res<0) {
printf("write error: %d\n", errno);
}
return 0;
}open O_RDONLY and then write to it ?
return of 9 == EBADF
man 2 write
EBADF fd is not a valid file descriptor or is not open for writing.
hofrat
28.11.2012 23:03, Nicholas Mc Guire пишет:
Quoted 9 lines
open
O_RDONLYand then write to it ?return of 9 == EBADF
man 2 write
EBADF fd is not a valid file descriptor or is not open for writing.
hofrat
Yes, sorry, stupid mistake.
But with the correct rights O_RDWR i get error 22 EINVAL both on read and write. So problem is still there.
29.11.2012 13:29, Alexander Varnin пишет:
Quoted 8 lines
28.11.2012 23:03, Nicholas Mc Guire пишет:
Yes, sorry, stupid mistake.
But with the correct rightsO_RDWRi get error 22 EINVAL both on read and write. So problem is still there.Signature · 3 lines
To unsubscribe from this list: send the line "unsubscribe linux-embedded" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Seems to be solved.
Problem was due to lines
if (count != sizeof(s32))
return -EINVAL;
in uio_read kernel function.
I've made read of 4 bytes, and it is ok.
A message that is not in the archive (sent off-list or not yet received): [email protected]
Where to add printk?
29.11.2012 12:45, 游競雄 пишет:
Quoted 3 lines
Did you add printk to understand what happened?
BR