簡介: What is Fake PCI Hotplug Controoler

Fake PCI Hotplug Controller是一個虛擬的PCI熱插拔控制器。

它可以透過以軟體的方式來模擬PCI 裝置的插拔行為

該控制器在啟動時就會預先掃描整個PCI BUS上的所有裝置,

並為每一個裝置在sysfs中建立一個對應的資料夾,與一個一Power屬性檔

使用者只要對Power屬性寫入0,驅動程式就會呼叫pci_remove_device

API將裝置自PCI BUS上移除。

反之,只要使用者寫入1,則驅動程式就會呼叫pci_rescan_bus來重新掃描

該裝置所屬的slot,以檢查是否有新的裝置加入

必須要注意的是,使用Fake PCI hotplug只是使用軟體的方式來移除裝置,

就使用者的角度看來,裝置的確已不存在,但實際上PCI腳位仍處於通電的狀態。

static int __init init_legacy(void)

{

struct pci_dev *pdev = NULL;

/* Add existing devices */

while ((pdev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pdev)))

legacy_add_slot(pdev);

/* Be alerted of any new ones */

bus_register_notifier(&pci_bus_type, &legacy_notifier);

return 0;

}

static void remove_callback(void *data)

{

pci_remove_bus_device((struct pci_dev *)data);

}

static ssize_t legacy_store(struct kobject *kobj, struct attribute *attr,

const char *buf, size_t len)

{

    struct legacy_slot *slot = container_of(kobj, typeof(*slot), kobj);

    unsigned long val;

    if (strict_strtoul(buf, 0, &val) < 0)

    return -EINVAL;

    if (val)

        pci_rescan_bus(slot->dev->bus);

    else

        sysfs_schedule_callback(&slot->dev->dev.kobj, remove_callback,

slot->dev, THIS_MODULE);

    return len;

}

 

啟用Fake PCI Hotplug Contorller:

  1) make menuconfig

  2) Bus options (PCI, PCMCIA, EISA, ISA, TC)  --->
        [*] Support for PCI controller
        [*] Support for PCI Hotplug  --->
            [*]   Fake PCI Hotplug driver
           
           

arrow
arrow
    全站熱搜

    kaivy2001 發表在 痞客邦 留言(0) 人氣()