ibv_get_device_list
->ibverbs_get_device_list
->find_sysfs_devs_nl
->rdmanl_socket_alloc
->返回
->判断返回值
如果返回值为非0值:
->find_sysfs_devs
->打开目录 /sys/calss/infiniband_verbs (opendir)
然后调用readdir,并返回一个指向 struct dirent 的指针,
这个结构体包含了目录中下个文件的信息
每调用一次readdir,大部分时候都会调用
->setup_sysfs_dev(dirfd(class_dir), dent->d_name, tmp_sysfs_dev_list)
将DIR *转换成int类型的文件描述符
int dirfd(DIR *dirp);
->申请struct verbs_sysfs)dev *sysfs_dev
->打开目录 /sys/class/infiniband_verbs/uverbs0
->ibv_read_sysfs_file_at
->读取文件 /sys/class/infiniband_verbs/uverbs0/ibdev 获取ib设备名
->获取路径
ibdev_name : xib_1
ibdev_path: /sys/class/infiniband/xib_1
简单来说就是读取一些文件内容检查并保存:
ibdev_name : xib_1
ibdev_path: /sys/class/infiniband/xib_1
/sys/class/infiniband_verbs
├──── abi_version 会检查该值
├──── uverbs0 (和uverbs1类似)
└──── uverbs1
├──── abi_version 存储到sysfs_dev->abi_ver
├──── dev 里面是主设备号,从设备号
├──── ibdev 里面是ib_dev设备的名字, 存储到 sysfs_dev->ibdev_name
/sys/class/infiniband/xib_1
├──── fw_ver
├──── node_desc
├──── node_guid
├──── node_type
10-25
687
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
08-23