Технологія PowerFlex: Компіляція драйвера PowerFlex SDC на вимогу
Summary: У цій статті, заснованій на знаннях, описано, як увімкнути компіляцію драйвера PowerFlex SDC на вимогу в системах Linux.
Instructions
Ця функція призначена для врахування змін у ядрі Linux Application Binary Interface (ABI), які можуть спричинити збій завантаження драйвера SDC, попередньо скомпільованого для іншого ядра.
Історично склалося так, що інсталяційний пакет SDC для Linux (RPM/DEB) містив кілька модулів ядра SDC для різних ядер цього дистрибутиву Linux. Для користувачів, які встановлюються на такі дистрибутиви, як Ubuntu, яка часто випускає оновлення ядра, була можливість налаштувати службу SDC для підключення до віддаленого репозиторію драйверів SDC Dell і спроби завантажити SDC з нього.
За допомогою нової функції користувачі можуть скомпілювати ідеальну відповідність драйвера SDC для свого запущеного ядра, не покладаючись на наявність відповідного SDC у репозиторії драйвера.
Цільова аудиторія: Користувачі, які часто оновлюють свої ядра з міркувань безпеки та використовують спеціалізовані користувацькі ядра, можуть отримати вигоду від цієї функції.
Передумови
Щоб процедура компіляції пройшла успішно, на хості служби 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 вручну, виконайте такі дії:
-
Скопіюйте пакет компіляції з його директорії в кеші драйверів до тимчасового каталогу. Розташування пакета залежить від версії 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
Докладнішу інформацію про кеш драйверів дивіться в розділі Кеш драйверів нижче. -
Перейдіть до тимчасового каталогу та розпакуйте пакет компіляції.
Приклад: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 і 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 або вище
Відео інструкція