当前位置: 技术问答>linux和unix
请教:Linux驱动程序中的llseek函数
来源: 互联网 发布时间:2016-04-04
本文导语: 在Linux下写了一个存储器的驱动程序,需要对这个存储器进行片内寻址(片内地址为16位,分为高8位和低8位两段),用llseek函数实现。 static loff_t llseek (struct file* mfile, loff_t offset, int origint ) { ...
在Linux下写了一个存储器的驱动程序,需要对这个存储器进行片内寻址(片内地址为16位,分为高8位和低8位两段),用llseek函数实现。
static loff_t llseek (struct file* mfile, loff_t offset, int origint )
{
u8 addrMSB, addrLSB;
printk ( "offset = 0x%x n", offset);
addrMSB = (offset >> 8) & 0xff ;
addrLSB = offset & 0xff;
printk("addrMSB = 0x%x, addrLSB = 0x%x n", addrMSB, addrLSB);
}
不知道为什么,打印offset正常,但addrMSB 和addrLSB却不对。
在应用程序中,第一次调用llseek(fd,0,0), 打印offset为0,addrMSB = 0x0, addrLSB = 0x1;
再调用一次llseek(fd,0,0), 打印offset为0,addrMSB = 0xbd, addrLSB = 0x98;
是什么原因导致在驱动程序中,无法取到offset值呢。
第一次做Linux的驱动,请高手指点一下,非常感谢。
static loff_t llseek (struct file* mfile, loff_t offset, int origint )
{
u8 addrMSB, addrLSB;
printk ( "offset = 0x%x n", offset);
addrMSB = (offset >> 8) & 0xff ;
addrLSB = offset & 0xff;
printk("addrMSB = 0x%x, addrLSB = 0x%x n", addrMSB, addrLSB);
}
不知道为什么,打印offset正常,但addrMSB 和addrLSB却不对。
在应用程序中,第一次调用llseek(fd,0,0), 打印offset为0,addrMSB = 0x0, addrLSB = 0x1;
再调用一次llseek(fd,0,0), 打印offset为0,addrMSB = 0xbd, addrLSB = 0x98;
是什么原因导致在驱动程序中,无法取到offset值呢。
第一次做Linux的驱动,请高手指点一下,非常感谢。
|
类型转换问题