도와주세요!!
글 수 15,339
2003.04.21 19:57:08 (*.230.12.171)
6675
dio의 입출력에 있어서 data와 address를 같이 사용하는 방법에 대해 질문을
한적이 있습니다. 그때 mmap을 사용하라고 조언을 해 주셨는데.. 감사드립니
다. 근데 mmap이 좀 어려워서 제 실력으로는 하기에 좀 벅찬것 같습니다.
제가 필요한 address는 5-2까지 밖에 안되고 12가지 경우의 어드레스만 있으
면 되기 때문에 ioctl을 사용하려고 합니다.
사용하는중에 이상한 점이 있어서 이렇게 질문을 드립니다.
io.c에서 제가 쓰려고 하는 값을 printk에서 확인하면 정확한 값이 나옵니다.
근데.. 실제로 ezflashw로 확인하면 값이 제대로 나오지 않습니다.
무슨이유인지 잘 모르겠다. 파일은 다음과 같이 수정했습니다.
귀찮으시라도.. 부탁드립니다.
*** io.c ***
ioctl( dev, SAMPLE_IO_WRITE, 0xaaaa );
*** test.c ***
int io_ioctl( struct inode *minode, struct file *mfile, unsigned int
cmd, unsigned short arg )
{
unsigned char *addr;
unsigned short c;
switch (cmd)
{
case SAMPLE_IO_READ :
// 어떤일을 수행한다.
return 0;
case SAMPLE_IO_WRITE :
// 쓰기 주소
addr = (unsigned char *)(IO_SAMPLE_BASE +
IO_SAMPLE_WRITE_OFFSET);
// output
*addr = arg;
printk("C : %x
", arg );
printk("Addr : %x
",addr);
return 0;
}
return -EINVAL;
}
이 두곳외에는 수정된곳은 없습니다.
그렇게 했을때..
C : aaaa
Addr : f0100000
값은 잘 나옵니다.
부탁드립니다.
한적이 있습니다. 그때 mmap을 사용하라고 조언을 해 주셨는데.. 감사드립니
다. 근데 mmap이 좀 어려워서 제 실력으로는 하기에 좀 벅찬것 같습니다.
제가 필요한 address는 5-2까지 밖에 안되고 12가지 경우의 어드레스만 있으
면 되기 때문에 ioctl을 사용하려고 합니다.
사용하는중에 이상한 점이 있어서 이렇게 질문을 드립니다.
io.c에서 제가 쓰려고 하는 값을 printk에서 확인하면 정확한 값이 나옵니다.
근데.. 실제로 ezflashw로 확인하면 값이 제대로 나오지 않습니다.
무슨이유인지 잘 모르겠다. 파일은 다음과 같이 수정했습니다.
귀찮으시라도.. 부탁드립니다.
*** io.c ***
ioctl( dev, SAMPLE_IO_WRITE, 0xaaaa );
*** test.c ***
int io_ioctl( struct inode *minode, struct file *mfile, unsigned int
cmd, unsigned short arg )
{
unsigned char *addr;
unsigned short c;
switch (cmd)
{
case SAMPLE_IO_READ :
// 어떤일을 수행한다.
return 0;
case SAMPLE_IO_WRITE :
// 쓰기 주소
addr = (unsigned char *)(IO_SAMPLE_BASE +
IO_SAMPLE_WRITE_OFFSET);
// output
*addr = arg;
printk("C : %x
", arg );
printk("Addr : %x
",addr);
return 0;
}
return -EINVAL;
}
이 두곳외에는 수정된곳은 없습니다.
그렇게 했을때..
C : aaaa
Addr : f0100000
값은 잘 나옵니다.
부탁드립니다.