PowerFlex:按需求編譯 PowerFlex SDC 驅動程式
Summary: 這篇知識文章說明如何在 Linux 系統上啟用 PowerFlex SDC 驅動程式的隨選編譯。
Instructions
此功能旨在適應 Linux 內核中的應用程式二進位介面 (ABI) 更改,這可能會導致為不同內核預編譯的 SDC 驅動程式無法載入。
從歷史上看,Linux 的 SDC 安裝包 (RPM/DEB) 包含用於該 Linux 發行版的各種內核的多個 SDC 內核模組。對於在 Ubuntu 等發行版本上安裝的使用者,可以選擇設定 SDC 服務,以連線至 Dell 的 SDC 驅動程式遠端存放庫,並嘗試從中下載 SDC。
借助新功能,用戶可以為其運行的內核編譯完全匹配的 SDC 驅動程式,而無需依賴驅動程式存儲庫中匹配的 SDC 的可用性。
目標受眾:出於安全原因經常更新其內核並運行專門自定義內核的使用者可能會從該功能中受益。
事前準備作業
要使編譯過程成功,必須在 SDC 服務的主機上安裝以下包:
- 最新版本的GNU C編譯器(GCC),GCC
- GNU make(1).
- 正在運行的內核的內核開發包。此套件通常具有以下名稱:
- 使用 RPM 套件管理員發佈的核心開發。(Red Hat、SUSE 等)
- 使用 Debian 套件管理員 (Debian、Ubuntu 等) 的 Linux 標頭
自動按需編譯
若要允許自動按需編譯 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 初始化容器
SDC 初始化容器已預先配置為使用該功能。它包括 gcc 和製作包,以及 /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 或更高版本
視訊說明