PowerFlex:按需编译 PowerFlex SDC 驱动程序
Summary: 本知识库文章介绍如何在 Linux 系统上启用 PowerFlex SDC 驱动程序的按需编译。
Instructions
此功能旨在适应 Linux 内核中的应用程序二进制接口 (ABI) 更改,这可能会导致为其他内核预编译的 SDC 驱动程序加载失败。
从历史上看,适用于 Linux 的 SDC 安装包 (RPM/DEB) 包含多个 SDC 内核模块,适用于该 Linux 发行版的各种内核。对于在发布频繁内核更新的 Ubuntu 等发行版上安装的用户,可以选择设置 SDC 服务以连接到戴尔的 SDC 驱动程序远程存储库,并尝试从中下载 SDC。
借助新功能,用户可以为其正在运行的内核编译完美匹配的 SDC 驱动程序,而无需依赖于驱动程序存储库中匹配 SDC 的可用性。
目标受众:出于安全原因经常更新内核和运行专用自定义内核的用户可能会从该功能中受益。
先决条件
要使编译过程成功,必须在 SDC 服务的主机上安装以下程序包:
- 最新版本的 GNU C 编译器 (GCC),GCC
- GNU make(1)。
- 正在运行的内核的内核开发包。此软件包通常具有以下名称:
- kernel-devel,用于使用 RPM 软件包管理器的发行版。(Red Hat、SUSE 等)
- linux-headers,用于使用 Debian 软件包管理器的发行版(Debian、Ubuntu 等)
自动按需编译
要允许自动按需编译 SDC 驱动程序,主机应满足上述 “前提条件 ”部分下列出的所有前提条件。启动 SDC 驱动程序时,如果满足以下所有条件,SDC 服务会尝试编译 SDC 驱动程序:
-
驱动程序高速缓存中没有与正在运行的内核匹配的 SDC。
有关驱动程序高速缓存的详细信息,请参阅下面的 驱动程序高速缓存 。 -
名为
/etc/emc/scaleio/scini_sync/.build_scini存在。
该文件的内容将被忽略。但是,用户应将其保留为空,以便将来可能进行增强。
可以通过运行touch(1)命令。
手动编译
SDC 驱动程序,编译主机应满足上述“ 前提条件 ”部分下列出的所有前提条件。
要手动编译 SDC 驱动程序,请执行以下步骤:
-
将编译捆绑包从驱动程序缓存中的目录复制到临时目录。捆绑包的位置取决于 PowerFlex 版本和 Linux 发行版。
例如,对于基于 Red Hat Enterprise Linux 9 的发行版,PowerFlex 3.6.3 SDC 的捆绑包为:/bin/emc/scaleio/scini_sync/driver_cache/RHEL9/3.6.3000.128/Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
有关驱动程序高速缓存的详细信息,请参阅下面的 驱动程序高速缓存 。 -
转到临时目录并解压编译包。
示例:tar xzf Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
-
运行
build_driver.sh脚本,位于提取内容的顶层。如果没有参数,脚本将尝试编译正在运行的内核的驱动程序。
要针对其他内核进行编译,请使用”-o“和”-s“的命令行参数。
有关调用的更多信息,请运行:build_driver.sh -h
-
编译过程输出将打印为标准输出。
成功编译后,可以在以下位置找到生成的 SDC 驱动程序文件 scini.ko:./ini/scini.ko。 -
将驱动程序文件从编译主机复制到目标 SDC 主机,复制到驱动程序高速缓存中与编译捆绑包位于同一位置下与目标内核版本匹配的目录。
例如,对于内核版本 5.14.0-362.24.1.el9_3.x86_64 满足的驱动程序,驱动程序文件的目标路径为/bin/emc/scaleio/scini_sync/driver_cache/RHEL9/3.6.3000.128/5.14.0-362.24.1.el9_3.x86_64/scini.ko。
Additional Information
驱动程序高速缓存
为特定内核成功编译的 SDC 驱动程序将被复制到驱动程序缓存的相应目录,并且不会再次触发其编译。
驱动程序高速缓存的位置是 /bin/emc/scaleio/scini_sync/drive_cache。
构建日志
启用自动按需编译后,所有编译日志将附加到 /bin/emc/scaleio/scini_sync/driver_build.log。
成功的编译以类似于以下内容的消息结束:
make: Entering directory '/usr/src/linux-headers-5.15.0-30-generic' "Following additional compilation's conditions are defined:" BLK_MQ_HEADER BLK_DEV_MAX_SEGMENTS SOCKET_HAS_NET_IN_CREATE BIO_BI_BDEV BIO_BI_STATUS BLK_QUEUE_FLAG_FUNCS BLK_INITIALIZE_RMQ_FN WAIT_QUEUE_ENTRY_T HAS_SCSI_REQUEST HAS_SCSI_REQ HAS_SCSI_CMND HAS_SCSI_IOCTL HAS_SCSI_IOCTL_WITH_GENDISK HAS_QUEUE_FLAG_DISCARD HAS_DISK_LIVE_IN_GENHD CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_main.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_mos.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_net.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_ioctl.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_blk_io.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_blk_dev.o LD [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.o "Following additional compilation's conditions are defined:" BLK_MQ_HEADER BLK_DEV_MAX_SEGMENTS SOCKET_HAS_NET_IN_CREATE BIO_BI_BDEV BIO_BI_STATUS BLK_QUEUE_FLAG_FUNCS BLK_INITIALIZE_RMQ_FN WAIT_QUEUE_ENTRY_T HAS_SCSI_REQUEST HAS_SCSI_REQ HAS_SCSI_CMND HAS_SCSI_IOCTL HAS_SCSI_IOCTL_WITH_GENDISK HAS_QUEUE_FLAG_DISCARD HAS_DISK_LIVE_IN_GENHD MODPOST /tmp/PowerFlex_driver_build_hpoM6l/ini/Module.symvers CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.mod.o LD [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.ko BTF [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.ko Skipping BTF generation for /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.ko due to unavailability of vmlinux make: Leaving directory '/usr/src/linux-headers-5.15.0-30-generic' 02-Apr-2024 11:46:48 INFO: Success.
SDC init-container
SDC 初始化容器预配置为使用该功能。它包括 gcc 和 makes 包,以及 /etc/emc/scaleio/scini_sync/.build_scini 文件存在。但是,要使编译成功,必须将主机内核的内核头目录映射到容器,以便 /usr/src。例如,要使用 docker 手动运行容器,请在主机上安装正确的 kernel-devel 软件包后,添加 -v/usr/src:/usr/src 到命令行,使内核头目录可供编译脚本使用。
限度
可能会出现这样的情况:主机的 Linux 发行版上提供的 GCC 编译器不够先进,无法针对某些内核编译 SDC。这种情况应该很少见,因为它可能涉及自定义内核,而不是该发行版的通用内核。在这种情况下,用户必须从非标准包存储库安装更高级的 GCC,并且必须在 $PATH 中指定该 GCC 的位置。没有自动方法可为 SDC 服务提供备用 GCC 路径。
版本
3.6.3 或更高版本
4.5.2 或更高版本
视频说明