[嵌入式linux]PCIe 热拔插(rescan)

2024-05-14 22:18

本文主要是介绍[嵌入式linux]PCIe 热拔插(rescan),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

linux下可通过/sys/bus/pci/devices/0000\:[bus number]\:[device number].[function number]/ 目录下的节点进行热拔插操作。

板子上电前PCIe插槽有一块NVME的固态硬盘

[    0.198515] pci 0000:00:00.0: [16c3:abcd] type 01 class 0x060400
[    0.199284] pci 0000:01:00.0: [126f:2263] type 00 class 0x010802
[    8.161374] nvme nvme0: pci function 0000:01:00.0
[    8.166407] nvme 0000:01:00.0: enabling device (0000 -> 0002)# ls /sys/bus/pci/devices/0000\:01\:00.0
broken_parity_status      enable                    rescan
class                     irq                       reset
config                    local_cpulist             resource
consistent_dma_mask_bits  local_cpus                subsystem
device                    modalias                  subsystem_device
devspec                   msi_bus                   subsystem_vendor
dma_mask_bits             power                     uevent
driver_override           remove                    vendor

现在需要在板子保持开机运行的状态下,先取下NVME的固态硬盘,再换上一块PCIe 网卡,并让网卡正常工作。

  • remove 原有设备,然后lspci查看, 0000:01:00.0: [126f:2263]已经不见了
# echo 1 > /sys/bus/pci/devices/0000\:01\:00.0/remove
#
# lspci
00:00.0 Class 0604: 16c3:abcd
  • 现在可以从插槽取下固态硬盘,插上网卡
  • 通过上游bus进行rescan
 echo 1 > /sys/bus/pci/devices/0000\:00\:00.0/rescan
[   72.436704] pci 0000:00:00.0: bridge configuration invalid ([bus 00-00]), reconfiguring
[   72.445041] pci 0000:01:00.0: [10ec:8168] type 00 class 0x020000
[   72.451319] pci 0000:01:00.0: reg 0x10: initial BAR value 0x00000000 invalid
[   72.458380] pci 0000:01:00.0: reg 0x10: [io  size 0x0100]
[   72.464113] pci 0000:01:00.0: reg 0x18: [mem 0x00000000-0x00000fff 64bit]
[   72.471112] pci 0000:01:00.0: reg 0x20: [mem 0x00000000-0x00003fff 64bit]
[   72.479299] pci 0000:01:00.0: supports D1 D2
[   72.483583] pci 0000:01:00.0: PME# supported from D0 D1 D2 D3hot D3cold
[   72.490667] pci_bus 0000:01: busn_res: [bus 01] end is updated to 01
[   72.497090] pci 0000:00:00.0: BAR 7: assigned [io  0x1000-0x1fff]
[   72.503202] pci 0000:01:00.0: BAR 4: assigned [mem 0xf1100000-0xf1103fff 64bit]
[   72.510683] pci 0000:01:00.0: BAR 2: assigned [mem 0xf1104000-0xf1104fff 64bit]
[   72.518162] pci 0000:01:00.0: BAR 0: assigned [io  0x1000-0x10ff]
# [   72.569018] r8169 0000:01:00.0: no of_node; not parsing pinctrl DT
[   72.575313] r8169 Gigabit Ethernet driver 2.3LK-NAPI loaded
[   72.580996] r8169 0000:01:00.0: enabling device (0000 -> 0003)
[   72.603261] r8169 0000:01:00.0 eth1: RTL8168h/8111h at 0xc8ea0000, e8:4e:06:72:f5:8a, XID 14100800 IRQ 66
[   72.612886] r8169 0000:01:00.0 eth1: jumbo features [frames: 9200 bytes, tx checksumming: ko]
[   72.846167] r8169 0000:01:00.0: Direct firmware load for rtl_nic/rtl8168h-2.fw failed with error -2
[   72.855262] r8169 0000:01:00.0 eth1: unable to load firmware patch rtl_nic/rtl8168h-2.fw (-2)
[   72.876122] r8169 0000:01:00.0 eth1: link down

 

  • 查看新的网卡设备,多了一个eth1
# lspci
00:00.0 Class 0604: 16c3:abcd
01:00.0 Class 0200: 10ec:8168
#
#
# ifconfig
eth0      Link encap:Ethernet  HWaddr 02:67:AB:81:02:BBUP BROADCAST MULTICAST  MTU:1500  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)Interrupt:16eth1      Link encap:Ethernet  HWaddr E8:4E:06:72:F5:8AUP BROADCAST MULTICAST  MTU:1500  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)lo        Link encap:Local Loopbackinet addr:127.0.0.1  Mask:255.0.0.0UP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

 

这篇关于[嵌入式linux]PCIe 热拔插(rescan)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/990008

相关文章

基于Linux的ffmpeg python的关键帧抽取

《基于Linux的ffmpegpython的关键帧抽取》本文主要介绍了基于Linux的ffmpegpython的关键帧抽取,实现以按帧或时间间隔抽取关键帧,文中通过示例代码介绍的非常详细,对大家的学... 目录1.FFmpeg的环境配置1) 创建一个虚拟环境envjavascript2) ffmpeg-py

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

详解Linux中常见环境变量的特点与设置

《详解Linux中常见环境变量的特点与设置》环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息,理解环境变量对于系统管理、软件开发都很重要,下面小编就为大家详细介绍一下吧... 目录前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变

Linux系统中的firewall-offline-cmd详解(收藏版)

《Linux系统中的firewall-offline-cmd详解(收藏版)》firewall-offline-cmd是firewalld的一个命令行工具,专门设计用于在没有运行firewalld服务的... 目录主要用途基本语法选项1. 状态管理2. 区域管理3. 服务管理4. 端口管理5. ICMP 阻断

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流

Linux中修改Apache HTTP Server(httpd)默认端口的完整指南

《Linux中修改ApacheHTTPServer(httpd)默认端口的完整指南》ApacheHTTPServer(简称httpd)是Linux系统中最常用的Web服务器之一,本文将详细介绍如何... 目录一、修改 httpd 默认端口的步骤1. 查找 httpd 配置文件路径2. 编辑配置文件3. 保存

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-

Linux CPU飙升排查五步法解读

《LinuxCPU飙升排查五步法解读》:本文主要介绍LinuxCPU飙升排查五步法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录排查思路-五步法1. top命令定位应用进程pid2.php top-Hp[pid]定位应用进程对应的线程tid3. printf"%