我正在将我的 linux 驱动程序移植到 freebsd。我使用“filp->private_data”变量来存储驱动程序所需的一些信息。(为了避免多线程情况下的锁)。我发现 BSD 在 linux 中不使用“文件”结构,而是使用 cdev。cdev 没有“private_data”变量。但我确信BSD中一定还有其他变量?
有谁知道如何实现我想要做的事情。
谢谢。
我正在将我的 linux 驱动程序移植到 freebsd。我使用“filp->private_data”变量来存储驱动程序所需的一些信息。(为了避免多线程情况下的锁)。我发现 BSD 在 linux 中不使用“文件”结构,而是使用 cdev。cdev 没有“private_data”变量。但我确信BSD中一定还有其他变量?
有谁知道如何实现我想要做的事情。
谢谢。
您的设备的每个实例都有一个 softc 结构实例。那通常会有一个互斥锁。您可以使用 的si_drv1
成员cdev
来保留指向 的指针softc
。就像是:
struct mydev_softc {
struct mtx m_lock;
struct cdev* m_cdev;
device_t m_dev;
/* ... whatever else you need ... */
};
static int mydev_attach(device_t dev)
{
struct mydev_softc* sc = device_get_softc(dev);
mtx_init(&sc->m_lock);
sc->m_cdev = make_dev(...);
sc->m_cdev->si_drv1 = sc;
sc->m_dev = dev;
/* Plus whatever else you need */
}
我省略了所有其他驱动程序初始化的东西,所以你可以看到这部分。