注册总线pci_bus_type,关注成员dev_attr

static int __init pci_driver_init(void)

{

return bus_register(&pci_bus_type);

}

postcore_initcall(pci_driver_init);

struct bus_type pci_bus_type = {

.name  = "pci",

.match  = pci_bus_match,

.uevent  = pci_uevent,

.probe  = pci_device_probe,

.remove  = pci_device_remove,

.shutdown = pci_device_shutdown,

.dev_attrs = pci_dev_attrs,

.bus_attrs = pci_bus_attrs,

.pm  = PCI_PM_OPS_PTR,

};

pci_dev_attrs关注成员rescan

struct device_attribute pci_dev_attrs[] = {

__ATTR_RO(resource),

__ATTR_RO(vendor),

__ATTR_RO(device),

__ATTR_RO(subsystem_vendor),

__ATTR_RO(subsystem_device),

__ATTR_RO(class),

__ATTR_RO(irq),

__ATTR_RO(local_cpus),

__ATTR_RO(local_cpulist),

__ATTR_RO(modalias),

#ifdef CONFIG_NUMA

__ATTR_RO(numa_node),

#endif

__ATTR_RO(dma_mask_bits),

__ATTR_RO(consistent_dma_mask_bits),

__ATTR(enable, 0600, is_enabled_show, is_enabled_store),

__ATTR(broken_parity_status,(S_IRUGO|S_IWUSR),

broken_parity_status_show,broken_parity_status_store),

__ATTR(msi_bus, 0644, msi_bus_show, msi_bus_store),

#ifdef CONFIG_HOTPLUG

__ATTR(remove, (S_IWUSR|S_IWGRP), NULL, remove_store),

__ATTR(rescan, (S_IWUSR|S_IWGRP), NULL, dev_rescan_store),

#endif

__ATTR_NULL,

};

rescan写操作对应处理函数

static ssize_t dev_rescan_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)

{

unsigned long val;

struct pci_dev *pdev = to_pci_dev(dev);

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

return -EINVAL;

if (val) {

mutex_lock(&pci_remove_rescan_mutex);

pci_rescan_bus(pdev->bus);

mutex_unlock(&pci_remove_rescan_mutex);

}

return count;

}

重新扫描选定PCI总线,配置新设备和向系统添加新设备

unsigned int __ref pci_rescan_bus(struct pci_bus *bus)

{

unsigned int max;

struct pci_dev *dev;

max = pci_scan_child_bus(bus);

down_read(&pci_bus_sem);

list_for_each_entry(dev, &bus->devices, bus_list)

if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE ||

dev->hdr_type == PCI_HEADER_TYPE_CARDBUS)

if (dev->subordinate)

pci_bus_size_bridges(dev->subordinate);

up_read(&pci_bus_sem);

pci_bus_assign_resources(bus);

pci_enable_bridges(bus);

pci_bus_add_devices(bus);

return max;

}

EXPORT_SYMBOL_GPL(pci_rescan_bus);

2. 应用

echo 1 > /sys/bus/pci/devices/0000:00:1e.0/rescan

linux 重新扫描pci设备,linux重新扫描pci总线相关推荐

  1. linux如何禁止pci设备,Linux 内核PCI去除一个设备

    一个 PCI 可用多个不同的方法被从系统中去除. 所有的 card-bus 设备在一个不同的物 理因素上是真正的 PCI 设备, 并且内核 PCI 核心不区分它们. 允许在机器运行时加减 PCI 设备 ...

  2. linux查看硬件PCI设备,Linux系统查看硬件信息神器,比pci设备好用100倍!

    大家都知道,当我们的 Linux 系统计算机出现问题时,需要对其排除故障,首先需要做的是找出计算机的硬件信息.下面介绍一个简单易用的应用程序--HardInfo,你可以利用它来显示你电脑的每个硬件方面 ...

  3. Linux驱动无硬件设备,Linux设备驱动与硬件通信

    Linux物理设备驱动,主要有几种类型,如:IO类.内存类.总线类.IO类我们平时接触的最多,其主要特点是,通过IO设备的寄存器操作硬件,具体需要去查看硬件手册. 1. IO端口和IO内存 在硬件层, ...

  4. 查看linux服务器下接设备,linux下如何查看设备信息_网站服务器运行维护

    linux下如何查看php是否启动_网站服务器运行维护 linux下查看php是否启动的方法是:可以通过执行[ps -ef | grep php]命令来查看,或者是通过执行[ps -A | grep ...

  5. linux中怎么查看设备,linux怎么查看硬件设备信息

    你们知道怎么直接查看Linux中的硬件信息吗?下面是学习啦小编带来的关于linux怎么查看硬件设备信息的内容,欢迎阅读! linux怎么查看硬件设备信息? 建议直接进主板的bios查看硬件信息, li ...

  6. linux脚本获取usb设备,Linux基于USB端口执行脚本

    您应该弄清楚您的外部端口与哪个USB总线连接.在我的电脑上所有外部USB端口都连接到Bus 01 要做这个检查lsusb -t的输出,然后附上一个usb设备并再次检查输出lsusb -t.那么你知道什 ...

  7. linux 增加回环设备,linux命令练习:mount fdisk swap dd创建本地回环设备

    练习一 1.创建一个1G的分区,文件系统为ext4,卷标为MYDATA,块大小为1024,预留管理空间为磁盘 分区的3%,要求开机后制动挂载至/data目录,并且自动挂载的设备要使用卷标进行引用. f ...

  8. linux内核定义注册设备,linux字符型设备驱动 一.注册设备并创建设备文件

    1.字符设备 字符设备.字符设备驱动与用户空间访问该设备的程序三者之间的关系 Linux内核中: a -- 使用cdev结构体来描述字符设备; b -- 通过其成员dev_t来定义设备号(分为主.次设 ...

  9. linux下spi添加设备,Linux Kernl添加spidev的设备节点

    一.spidev介绍 如果在内核中配置spidev,会在/dev目录下产生设备节点,通过此节点可以操作挂载在该SPI总线上的设备.用户空间通过该节点可以访问内核空间. 二.配置spidev设备步骤 在 ...

最新文章

  1. 清华大学邀请阿里专家授课 主讲大数据
  2. Mac 安装 Eclipse
  3. Python-自定义函数-参数
  4. Ajax — 大事件项目(第二天)
  5. web前端【补充】CSS补充
  6. 中学计算机教育特点,中学信息技术考点:信息的概念和基本特征
  7. 即将到来的“分布式云”(DPaaS):分布式计算+ DB +存储即服务
  8. 计算机网络---TCP/UDP协议(一)
  9. linux显示 cron 服务是否正在运行_通过Linux系统自带日志监控系统安全
  10. 如何使用Xilisoft Video Editor快速剪切视频
  11. 德信计算机真人发声怎么变音乐,文字转语音真人发声 文字转语音制作真人语音广告...
  12. java 数字转换字母大写_大写字母或小写字母转换为数字
  13. 扫描二维码登入PC的工作原理
  14. 第1关 Numpy创建数组 (educoder
  15. perspective 3D 效果和动画配合
  16. python 信用卡系统+购物商城见解
  17. 敏捷开发之XP极限编程
  18. 安装thrift错误的处理方法
  19. git撤销未提交的commit
  20. cad在线转换_手绘稿画好后我熬了一个通宵描图,结果组长给我说可以一键生成CAD!...

热门文章

  1. office 转 pdf文件
  2. 《迷宫》之站立会议—5.16
  3. 转载JNI(Windows)
  4. Session丢失的解决办法小结(转)
  5. mavenFailed to execute goal org.apache.maven.plugins:maven-surefire-plugin解决方法
  6. SpringCloud的Eureka客户端(解决自动退出问题)
  7. 【报告分享】中国数据智能应用趋势报告:解码数据中台最佳实践,企业数字化转型新引擎.pdf(附下载链接)...
  8. AAAI2020中的四篇推荐系统好文(附论文下载链接)
  9. pyhthon下中文报错问题
  10. python基本词汇的特点_开课吧老师为你讲解 Python都有什么优点?