Технологія PowerFlex: Компіляція драйвера PowerFlex SDC на вимогу

Summary: У цій статті, заснованій на знаннях, описано, як увімкнути компіляцію драйвера PowerFlex SDC на вимогу в системах Linux.

This article applies to This article does not apply to This article is not tied to any specific product. Not all product versions are identified in this article.

Instructions

Ця функція призначена для врахування змін у ядрі Linux Application Binary Interface (ABI), які можуть спричинити збій завантаження драйвера SDC, попередньо скомпільованого для іншого ядра.

Історично склалося так, що інсталяційний пакет SDC для Linux (RPM/DEB) містив кілька модулів ядра SDC для різних ядер цього дистрибутиву Linux. Для користувачів, які встановлюються на такі дистрибутиви, як Ubuntu, яка часто випускає оновлення ядра, була можливість налаштувати службу SDC для підключення до віддаленого репозиторію драйверів SDC Dell і спроби завантажити SDC з нього.

За допомогою нової функції користувачі можуть скомпілювати ідеальну відповідність драйвера SDC для свого запущеного ядра, не покладаючись на наявність відповідного SDC у репозиторії драйвера.

Примітка: Самостійно скомпільований функціонал підтримується тільки в системах Linux, на яких підтримується SDC. Подробиці дивіться в матриці підтримки PowerFlex.

Цільова аудиторія: Користувачі, які часто оновлюють свої ядра з міркувань безпеки та використовують спеціалізовані користувацькі ядра, можуть отримати вигоду від цієї функції.

 

Передумови
Щоб процедура компіляції пройшла успішно, на хості служби SDC повинні бути встановлені наступні пакети:

  • Остання версія компілятора GNU C (GCC), GCC
  • GNU make(1).
  • Пакет розробки ядра для запущеного ядра. Цей пакет зазвичай доступний з наступними назвами:
    • kernel-devel для дистрибутивів з використанням менеджера пакетів RPM. (Червоний капелюх, SUSE та ін.)
    • linux-заголовки для дистрибутивів, що використовують менеджер пакетів Debian (Debian, Ubuntu тощо)

Автоматична компіляція за запитом
Щоб дозволити автоматичну компіляцію драйвера SDC на вимогу, хост повинен відповідати всім передумовам, переліченим у розділі «Передумови » вище. Під час виклику драйвера SDC служба SDC намагається скомпілювати драйвер SDC, якщо виконуються всі наступні умови:

  • SDC, який відповідає запущеному ядру, недоступний у кеші драйверів.
    Докладнішу інформацію про кеш драйверів дивіться в розділі Кеш драйверів нижче.

  • Файл з іменем /etc/emc/scaleio/scini_sync/.build_scini Існує.
    Вміст файлу буде проігноровано. Однак користувачі повинні тримати його порожнім для можливих майбутніх покращень.
    Файл можна створити, виконавши команду touch(1) команда.

Ручна компіляція
Драйвер SDC, хост компіляції повинен відповідати всім передумовам, переліченим у розділі «Передумови» вище.
Щоб скомпілювати драйвер SDC вручну, виконайте такі дії:

  1. Скопіюйте пакет компіляції з його директорії в кеші драйверів до тимчасового каталогу. Розташування пакета залежить від версії PowerFlex та дистрибутива Linux.
    Наприклад, зв'язка для PowerFlex 3.6.3 SDC, для дистрибутивів на базі Red Hat Enterprise Linux 9 виглядає наступним чином: /bin/emc/scaleio/scini_sync/driver_cache/RHEL9/3.6.3000.128/Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
    Докладнішу інформацію про кеш драйверів дивіться в розділі Кеш драйверів нижче.

  2. Перейдіть до тимчасового каталогу та розпакуйте пакет компіляції.
    Приклад:

    tar xzf Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
  3. Запустіть команду build_driver.sh скрипт, розташований на верхньому рівні видобутого контенту. Без аргументів скрипт намагається скомпілювати драйвер для запущеного ядра.
    Щоб скомпілювати для іншого ядра, вкажіть шлях до директорій заголовків цього ядра за допомогою «-o" і "-s" аргументи командного рядка.
    Щоб дізнатися більше про виклик, запустіть:

    build_driver.sh -h
  4. Вихідні дані процесу компіляції виводяться на стандартний вивід.
    Після успішної компіляції отриманий файл драйвера SDC, scini.ko, можна знайти за адресою ./ini/scini.ko.

  5. Скопіюйте файл драйвера з хоста компіляції на цільовий хост 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 і makes, а також /etc/emc/scaleio/scini_sync/.build_scini файл присутній. Однак, щоб компіляції були успішними, каталог заголовків ядра хоста повинен бути зіставлений з контейнером, щоб /usr/src. Наприклад, щоб запустити контейнер вручну за допомогою docker, після встановлення правильного пакета kernel-devel на хост, додайте -v/usr/src:/usr/src до командного рядка, щоб каталог заголовків ядра був доступний для скрипту компіляції.

Обмеження
Може виникнути ситуація, коли компілятор GCC, доступний у дистрибутиві Linux хоста, недостатньо просунутий для компіляції SDC проти якогось ядра. Така ситуація має бути рідкісною, оскільки, ймовірно, вона стосуватиметься користувацького ядра, а не типового для цього дистрибутива. У цьому випадку користувачеві доведеться встановити більш просунутий GCC з нестандартного репозиторію пакетів, а розташування цього GCC доведеться вказувати в $PATH. Не існує автоматичного способу надання альтернативного шляху GCC до служби SDC.

Версії
3.6.3 або вище
4.5.2 або вище

Відео інструкція

 

Affected Products

PowerFlex rack, PowerFlex Appliance, PowerFlex Software

Products

PowerFlex custom node
Article Properties
Article Number: 000224134
Article Type: How To
Last Modified: 18 Sep 2024
Version:  6
Find answers to your questions from other Dell users
Support Services
Check if your device is covered by Support Services.