How do I make my device driver respond to lseek?

Lee D embaudarm at gmail.com
Sun Dec 3 17:13:57 UTC 2017


Hi,

I've been trying to figure out how to make my device driver respond to
lseek(). There doesn't seem to be an appropriate entry in the cdevsw
structure (in src/sys/sys/conf.h).

Obviously I can make an ioctl() call for this (and I have, in the
interim), but I'd like to do it it the right way.

I have a feeling like I am misunderstanding some critical abstraction
layer...  But at some point the device driver must be told what
position to start reading from/writing to, right?

FWIW, this is a device driver interface to a SPI flash in my custom
ARM embedded system. I need to be able to locate to a point in the
flash to read and write my app config info, without disturbing my boot
loader.

I want to be able to write code like this:

    int fd = open ("/dev/my_spi_flash0", O_RDWR);
    lseek(fd, 0x10000, SEEK_SET);
    write(fd, buf, 100);
    close(fd);

Does anyone know the proper way to implement lseek?


More information about the freebsd-hackers mailing list