PowerFlex: On-demand compilatie van de PowerFlex SDC driver
Summary: In dit op kennis gebaseerde artikel wordt beschreven hoe u on-demand compilatie van de PowerFlex SDC-driver op Linux-systemen kunt inschakelen.
Instructions
Deze functie is bedoeld voor wijzigingen in de Application Binary Interface (ABI) in de Linux-kernel, die ertoe kunnen leiden dat een SDC-driver, die vooraf is gecompileerd voor een andere kernel, niet kan worden geladen.
In het verleden bevatte een SDC-installatiepakket voor Linux (RPM/DEB) verschillende SDC-kernelmodules voor verschillende kernels van die Linux-distributie. Voor gebruikers die installeren op distributies zoals Ubuntu, die regelmatig kernelupdates uitbrengen, is er de mogelijkheid geweest om de SDC-service in te stellen om verbinding te maken met de externe repository van SDC-drivers van Dell en te proberen een SDC van deze service te downloaden.
Met de nieuwe functie kunnen gebruikers een perfecte match samenstellen van de SDC-driver voor hun draaiende kernel zonder afhankelijk te zijn van de beschikbaarheid van een overeenkomende SDC in de repository van de driver.
Doelgroep: Gebruikers die hun kernels vaak bijwerken om veiligheidsredenen en die gespecialiseerde aangepaste kernels gebruiken, kunnen profiteren van de functie.
Voorwaarden
Om de compilatieprocedure te laten slagen, moeten de volgende pakketten op de host van de SDC-service worden geïnstalleerd:
- De nieuwste versie van de GNU C-compiler (GCC), GCC
- GNU make(1).
- Het kernelontwikkelingspakket voor de actieve kernel. Dit pakket is algemeen verkrijgbaar met de volgende namen:
- kernel-devel voor distributies met behulp van de RPM package manager. (Red Hat, SUSE, enzovoort)
- linux-headers voor distributies die gebruik maken van de Debian package manager (Debian, Ubuntu, enzovoort)
Automatische on-demand compilatie
Om automatische, on-demand compilatie van de SDC-driver mogelijk te maken, moet de host voldoen aan alle vereisten die worden vermeld in het gedeelte Vereisten hierboven. Wanneer de SDC-driver wordt geopend, probeert de SDC-service de SDC-driver te compileren als aan alle volgende voorwaarden is voldaan:
-
Een SDC die overeenkomt met de actieve kernel is niet beschikbaar in de drivercache.
Zie Drivercache hieronder voor meer informatie over de drivercache . -
Een bestand met de naam
/etc/emc/scaleio/scini_sync/.build_sciniBestaat.
De inhoud van het bestand wordt genegeerd. Gebruikers moeten deze echter leeg houden voor mogelijke toekomstige verbeteringen.
Het bestand kan worden gemaakt door eentouch(1)bevelen.
Handmatige compilatie
SDC-driver, moet de compilatiehost voldoen aan alle vereisten die worden vermeld in het gedeelte Vereisten hierboven.
Volg deze stappen om het SDC-stuurprogramma handmatig te compileren:
-
Kopieer de compilatiebundel van de map in de drivercache naar een tijdelijke map. De locatie van de bundel is afhankelijk van de PowerFlex-versie en Linux-distributie.
De bundel voor de PowerFlex 3.6.3 SDC voor Red Hat Enterprise Linux 9-distributies is bijvoorbeeld:/bin/emc/scaleio/scini_sync/driver_cache/RHEL9/3.6.3000.128/Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
Zie Drivercache hieronder voor meer informatie over de drivercache . -
Ga naar de tijdelijke map en pak de compilatiebundel uit.
Voorbeeld:tar xzf Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
-
Start de
build_driver.shscript, dat zich op het hoogste niveau van de uitgepakte inhoud bevindt. Zonder argumenten probeert het script de driver voor de draaiende kernel te compileren.
Om te compileren voor een andere kernel, geef je het pad naar de header directory's van die kernel op met de "-o" en "-s" opdrachtregelargumenten.
Voor meer informatie over aanroepen voert u de volgende opdracht uit:build_driver.sh -h
-
De uitvoer van het compilatieproces wordt afgedrukt naar standaarduitvoer.
Na een succesvolle compilatie is het resulterende SDC-stuurprogrammabestand, scini.ko, te vinden op./ini/scini.kote installeren. -
Kopieer het driverbestand van de compilatiehost naar de doel-SDC-host, naar een map die overeenkomt met de doelkernelversie, op dezelfde locatie als de compilatiebundel, in de drivercache.
Bijvoorbeeld, voor een driver die voldoet voor kernelversie 5.14.0-362.24.1.el9_3.x86_64, is het doelpad voor het driverbestand/bin/emc/scaleio/scini_sync/driver_cache/RHEL9/3.6.3000.128/5.14.0-362.24.1.el9_3.x86_64/scini.kote installeren.
Additional Information
Drivercache
Een SDC-driver die voor een specifieke kernel is gecompileerd, wordt naar de juiste map in de drivercache gekopieerd en de compilatie wordt niet opnieuw geactiveerd.
De locatie van de drivercache is /bin/emc/scaleio/scini_sync/drive_cachete installeren.
Build-logboek
Als automatische compilatie op aanvraag is ingeschakeld, worden alle compilatielogbestanden toegevoegd aan /bin/emc/scaleio/scini_sync/driver_build.log.
Een geslaagde compilatie eindigt met berichten die vergelijkbaar zijn met de volgende:
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
De SDC init-container is vooraf geconfigureerd voor het gebruik van de functie. Het omvat de gcc en maakt pakketten, en de /etc/emc/scaleio/scini_sync/.build_scini Bestand is aanwezig. Om compilaties te laten slagen, moet de map met kernelheaders voor de hostkernel echter worden toegewezen aan de container, om /usr/srcte installeren. Als u de container bijvoorbeeld handmatig wilt uitvoeren met docker, voegt u na het installeren van het juiste kernel-devel-pakket op de host -v/usr/src:/usr/src naar de opdrachtregel, zodat de map kernel headers beschikbaar is voor het compilatiescript.
Beperking
Er kan zich een situatie voordoen waarin de GCC-compiler die beschikbaar wordt gesteld op de Linux-distributie van de host niet geavanceerd genoeg is om de SDC tegen een kernel te compileren. Deze situatie zou zeldzaam moeten zijn, omdat het waarschijnlijk een aangepaste kernel zal betreffen en niet een die gebruikelijk is voor die distributie. In dit geval moet de gebruiker een geavanceerdere GCC installeren vanuit een niet-standaard pakketrepository en moet de locatie van die GCC worden opgegeven in $PATH. Er is geen automatische manier om een alternatief GCC-pad naar de SDC-service te bieden.
Versies
3.6.3 of hoger
4.5.2 of hoger
Video-instructies