1

我正在将我的 linux 驱动程序移植到 freebsd。我使用“filp->private_data”变量来存储驱动程序所需的一些信息。(为了避免多线程情况下的锁)。我发现 BSD 在 linux 中不使用“文件”结构,而是使用 cdev。cdev 没有“private_data”变量。但我确信BSD中一定还有其他变量?

有谁知道如何实现我想要做的事情。

谢谢。

4

1 回答 1

4

您的设备的每个实例都有一个 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 */
 }

我省略了所有其他驱动程序初始化的东西,所以你可以看到这部分。

于 2013-03-19T03:27:42.797 回答