angelawushuang 发表于 2008-07-30 17:03

spi驱动中的这两函数实现的是什么功能?

int spi_add_adapter(struct spi_adapter *adap)
{
      printk("SPI: adding adapter %s\n", adap->name);
        INIT_LIST_HEAD(&adap->clients);
        down(&adapter_lock);//什么意思
      init_MUTEX(&adap->lock);
        list_add(&adap->adapters, &adapter_list);
        up(&adapter_lock);//什么意思
        return 0;       

static struct spi_adapter *__spi_get_adapter(const char *name)
{
        struct list_head *l;

        list_for_each(l, &adapter_list) {
struct spi_adapter *adap = list_entry(l, struct spi_adapter, adapters);

                if (strcmp(adap->name, name) == 0)
                        return adap;
        } //这函数什么功能?

        return NULL;
}

angelawushuang 发表于 2008-08-01 10:19

补充

本人理解up().down()分别是解锁和上锁··
第2个函数是从spi_adapter结构的list链表中通过adap->name, name获取adapter结构。
请教是否正确呢··
truct spi_adapter *spi_get_adapter(const char *name)
{
        struct spi_adapter *adap = NULL;
        int try;

        for (try = 0; try < 2; try ++) {
                down(&adapter_lock);
                adap = __spi_get_adapter(name);
                if (adap && !try_inc_mod_count(adap->owner))
                        adap = NULL;
                up(&adapter_lock);

                if (adap)
                        break;
                if (try == 0)
                        request_module(n ame);
        }

        return adap;
}
这个函数有谁知道你干嘛用的吗?麻烦知道的回复下啊···

dreamice 发表于 2008-08-01 10:30

原帖由 angelawushuang 于 2008-7-30 17:03 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
int spi_add_adapter(struct spi_adapter *adap)
{
      printk("SPI: adding adapter %s\n", adap->name);
        INIT_LIST_HEAD(&adap->clients);
        down(&adapter_lock);//什么意思
      init_MUTEX(&a ...

up() 和down()分别是信号量的PV操作,即增加信号量计数和减少信号量计数。

embeddedlwp 发表于 2011-06-26 08:38

看看ldd3就知道了
页: [1]
查看完整版本: spi驱动中的这两函数实现的是什么功能?