openEuler ubutils与内核模块交互:ubfi.ko与ubus.ko加载指南
openEuler ubutils与内核模块交互:ubfi.ko与ubus.ko加载指南
【免费下载链接】ubutilsAn UB device information qeuery and configuration tool.项目地址: https://gitcode.com/openeuler/ubutils
前往项目官网免费下载:https://ar.openeuler.org/ar/
openEuler ubutils是UB设备信息查询与配置工具,专为UB总线设备管理设计。本文将详细介绍如何使用ubutils工具与内核模块ubfi.ko和ubus.ko进行交互,帮助您快速掌握UB设备管理技巧。😊
🔧 内核模块依赖关系
ubutils工具的正常运行依赖于三个关键内核模块:
- ubfi.ko- UB总线基础接口模块
- ubus.ko- UB总线核心驱动模块
- hisi_ubus.ko- HiSilicon UB总线特定驱动模块
这些内核模块构成了UB总线设备的完整软件栈,为ubutils提供了必要的系统接口和功能支持。
🚀 内核模块加载步骤
1. 准备工作
在加载内核模块之前,请确保您的系统满足以下要求:
- 操作系统:openEuler OLK-6.6内核版本
- 权限:需要root或sudo权限
- 模块文件:确保内核模块文件存在于系统中
2. 加载内核模块
使用以下命令按顺序加载所需的内核模块:
# 加载UB总线基础接口模块 sudo insmod ubfi.ko # 加载UB总线核心驱动模块 sudo insmod ubus.ko # 加载HiSilicon UB总线驱动模块 sudo insmod hisi_ubus.ko3. 验证模块加载状态
加载完成后,可以使用以下命令验证模块是否正确加载:
# 查看已加载的内核模块 lsmod | grep ub # 查看模块详细信息 modinfo ubfi.ko modinfo ubus.ko modinfo hisi_ubus.ko📦 ubutils工具安装指南
1. 获取项目源码
首先从仓库克隆ubutils项目:
git clone https://gitcode.com/openeuler/ubutils cd ubutils2. 编译安装ubutils
使用项目提供的构建脚本进行安装:
# 编译并安装ubutils sudo ./build.sh install安装脚本会自动完成以下操作:
- 创建构建目录并编译源代码
- 安装lsub和setub可执行文件到
/usr/bin - 安装ID数据库文件到
/usr/share/hwdata - 安装手册页到
/usr/share/man/man8
3. 验证安装
安装完成后,可以通过以下命令验证工具是否正常工作:
# 查看lsub帮助信息 lsub -h # 查看setub帮助信息 setub -h🔍 ubutils核心功能详解
1. lsub工具 - UB实体信息查询
lsub模块主要用于查询UB实体信息和实体拓扑结构。它通过调用/sys/bus/ub/devices系统文件来获取设备信息。
主要功能:
- 显示UB实体拓扑结构 (
-t选项) - 列出所有UB实体 (
-l选项) - 显示数字ID信息 (
-n选项) - 查看内核驱动程序处理情况 (
-k选项) - 按EID显示特定UB总线实例 (
-b -E <eid>)
常用命令示例:
# 显示UB实体拓扑 lsub -t # 显示所有UB实体列表 lsub -l # 显示实体详细信息(包含内核驱动) lsub -k2. setub工具 - UB协议配置空间管理
setub模块用于配置和查询UB协议的配置空间,支持读写操作和总线实例管理。
主要功能:
- 读写配置空间 (
-s选项) - 总线实例操作:创建、销毁、绑定、解绑 (
-b选项) - 总线实例GUID管理 (
-g选项) - 实体GUID管理 (
-d选项)
常用命令示例:
# 读取配置空间信息 setub -s 0x1000 # 创建总线实例 setub -b create -g vendor-device-version-type-rsvd-seq_num # 绑定实体到总线实例 setub -b bind -d entity_guid -g bus_instance_guid📁 项目文件结构解析
了解ubutils项目的文件结构有助于更好地理解其工作原理:
ubutils/ ├── include/ │ ├── lsub-regs.h # 寄存器定义头文件 │ └── ubutils.h # 通用工具头文件 ├── lib/ │ ├── common.c # 通用功能实现 │ └── sysfs.c # 系统文件操作实现 ├── lsub/ │ ├── lsub.c # lsub主程序源码 │ ├── topo.c # 拓扑查询实现 │ ├── lsub.h # lsub头文件 │ └── CMakeLists.txt # lsub构建配置 ├── setub/ │ ├── setub.c # setub主程序源码 │ ├── kernel_headers/ │ │ └── ubus.h # 内核头文件 │ └── CMakeLists.txt # setub构建配置 ├── ub.ids # ID数据库文件 ├── lsub.man # lsub手册文档 ├── setub.man # setub手册文档 └── build.sh # 安装/卸载脚本🔧 高级配置与管理
1. 使用自定义ID数据库
ubutils支持使用自定义的ID数据库文件:
# 使用指定ID数据库文件 lsub -i /path/to/custom/ub.ids2. 实体选择与过滤
lsub支持多种实体选择和过滤选项:
# 显示指定实体编号的设备信息 lsub -e <entity_num> # 显示指定实体和端口的信息 lsub -p <port> # 显示指定切片的信息 lsub -s <slice>3. 总线实例管理
setub提供了完整的总线实例生命周期管理:
# 销毁总线实例 setub -b destroy -g bus_instance_guid # 从总线实例解绑实体 setub -b unbind -d entity_guid -g bus_instance_guid # 集群模式下的EID管理 setub -b bind -e eid_value -u upi_value🛠 故障排除与调试
常见问题解决方案
内核模块加载失败
# 检查内核版本兼容性 uname -r # 查看dmesg日志获取详细错误信息 dmesg | tail -20权限问题
# 确保使用root或sudo权限 sudo lsub -t工具无法找到设备
# 检查UB总线设备是否存在 ls /sys/bus/ub/devices/ # 检查内核模块是否加载 lsmod | grep ub
调试技巧
- 使用
-v选项查看详细输出(如果支持) - 检查系统日志:
journalctl -f - 验证sysfs接口:
ls -la /sys/bus/ub/
📈 性能优化建议
批量操作优化对于大量设备管理,建议使用脚本批量处理,减少单个命令的开销。
缓存利用ubutils会缓存部分查询结果,重复查询相同信息时速度更快。
定期更新定期更新ID数据库文件以支持新设备识别。
🔮 未来发展方向
openEuler ubutils作为UB设备管理的重要工具,未来可能会在以下方面继续发展:
- 支持更多硬件平台和设备类型
- 增强性能监控和诊断功能
- 提供更友好的用户界面
- 集成到系统管理工具链中
通过本文的详细指南,您已经掌握了ubutils工具与内核模块ubfi.ko、ubus.ko的交互方法。无论是设备查询、配置管理还是故障排除,ubutils都能为您提供强大的支持。🌟
记住关键步骤:
- ✅ 按顺序加载内核模块:ubfi.ko → ubus.ko → hisi_ubus.ko
- ✅ 正确安装ubutils工具:
sudo ./build.sh install - ✅ 掌握核心工具用法:lsub查询、setub配置
- ✅ 了解项目结构:源码位置在lsub/lsub.c和setub/setub.c
现在您可以自信地管理openEuler系统中的UB总线设备了!🚀
【免费下载链接】ubutilsAn UB device information qeuery and configuration tool.项目地址: https://gitcode.com/openeuler/ubutils
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
