在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的驱动,请高手指点一下,非常感谢。