diff options
Diffstat (limited to 'gnu/packages/firmware.scm')
-rw-r--r-- | gnu/packages/firmware.scm | 224 |
1 files changed, 149 insertions, 75 deletions
diff --git a/gnu/packages/firmware.scm b/gnu/packages/firmware.scm index 68229aab85..79c34ef8aa 100644 --- a/gnu/packages/firmware.scm +++ b/gnu/packages/firmware.scm @@ -8,7 +8,7 @@ ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com> ;;; Copyright © 2020, 2021, 2022 Marius Bakke <marius@gnu.org> ;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com> -;;; Copyright © 2022, 2023, 2025 Maxim Cournoyer <maxim.cournoyer@gmail.com> +;;; Copyright © 2022, 2023, 2025 Maxim Cournoyer <maxim@guixotic.coop> ;;; Copyright © 2023 Foundation Devices, Inc. <hello@foundationdevices.com> ;;; Copyright © 2023, 2024 Zheng Junjie <873216071@qq.com> ;;; Copyright © 2024 Ricardo Wurmus <rekado@elephly.net> @@ -92,7 +92,10 @@ #:use-module (gnu packages xml) #:use-module (ice-9 format) #:use-module (ice-9 match) + #:autoload (ice-9 pretty-print) (pretty-print) #:use-module (ice-9 regex) + #:autoload (ice-9 textual-ports) (get-string-all) + #:use-module (srfi srfi-26) #:export (make-ergodox-firmware make-qmk-firmware)) @@ -492,8 +495,8 @@ utilities used to process FCODE, OpenFirmware's byte code, consisting of: "i686-linux-gnu") (else (string-append arch "-linux-gnu")))) ;; 1.1 was released in May 2013. - (commit "af97fd7af5e7c18f591a7b987291d3db4ffb28b5") - (revision "1")) + (commit "c3a19c1e54977a53027d6232050e1e3e39a98a1b") + (revision "2")) (package (name name) (version (git-version "1.1" revision commit)) @@ -505,7 +508,7 @@ utilities used to process FCODE, OpenFirmware's byte code, consisting of: (file-name (git-file-name "openbios" version)) (sha256 (base32 - "1xp1b6xgx40i0j3a5y3id0d1p8vdvapai8szganxg3zrvj53fh0n")) + "00a6lpbmknvy5qr8q3y2gd0mmv1lywmhch2fgssyhq7nczb6f34r")) (patches (search-patches "openbios-aarch64-riscv64-support.patch")))) (build-system gnu-build-system) (arguments @@ -663,7 +666,7 @@ executing in M-mode.") (define-public seabios (package (name "seabios") - (version "1.16.2") + (version "1.17.0") (source (origin (method git-fetch) @@ -672,7 +675,7 @@ executing in M-mode.") (commit (string-append "rel-" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "1mal2zqn4ppxdjxddrxcphm6z9n8n4rw97xl2hldd7spw57nwq97")) + (base32 "0v4rsv2mh6rmb9n2fc1df439z16qgmnkbv0vb5ylmpqzqfbjjd3q")) (modules '((guix build utils))) (snippet #~(begin @@ -703,17 +706,11 @@ executing in M-mode.") ;; If we use (cc-for-target) then we have the system prefix ;; twice or we might have the wrong prefix. (setenv "CC" "gcc"))) - (add-before 'build 'build-description-tables - (lambda _ - ;; Regenerate the ACPI description tables. - (invoke "make" "iasl") - ;; Clear temporary files added by the iasl target. - (invoke "make" "clean"))) (replace 'install (lambda _ (install-file "out/bios.bin" (string-append #$output "/share/firmware"))))))) - (home-page "https://www.seabios.org/SeaBIOS") + (home-page "https://www.seabios.org/") (synopsis "BIOS implementation") (description "SeaBIOS is an implementation of a 16bit x86 BIOS. SeaBIOS can run in an emulator or it can run natively on X86 hardware with the use of @@ -727,6 +724,18 @@ coreboot.") ;; cpl with a linking exception. license:cpl1.0)))) +(define (format-qemu-firmware-config-options config-file) + "Format a Scheme list of all the configuration options found in CONFIG-FILE, +configuration file such as \"roms/config.seabios-256k\", as found in the QEMU +source." + (pretty-print (map (cut string-drop <> 7) ;strip CONFIG_ prefix + (filter (cut string-prefix? "CONFIG_" <>) + (string-split + (string-trim-right + (call-with-input-file config-file + get-string-all)) + #\newline))))) + (define-public seabios-qemu (package/inherit seabios (name "seabios-qemu") @@ -757,68 +766,133 @@ coreboot.") (replace 'build (lambda* (#:key (make-flags #~'()) #:allow-other-keys) ;; Note: These BIOS configurations are taken from QEMUs roms/ - ;; directory. - (let ((biosen - '( ;; The standard BIOS using default options. - ("bios-256k" . ("QEMU=y" "ROM_SIZE=256" "ATA_DMA=n")) - ;; A minimal BIOS for old QEMU machine types. - ("bios-128k" - . ("QEMU=y" "ROM_SIZE=128" "ATA_DMA=n" "BOOTSPLASH=n" - "XEN=n" "USB_OHCI=n" "USB_XHCI=n" "USB_UAS=n" - "SDCARD=n" "TCGBIOS=n" "MPT_SCSI=n" "ESP_SCSI=n" - "MEGASAS=n" "PVSCSI=n" "NVME=n" "USE_SMM=n" - "VGAHOOKS=n" "HOST_BIOS_GEOMETRY=n" "ACPI_PARSE=n")) - ;; Minimal BIOS for the "microvm" machine type. - ("bios-microvm" - . ("QEMU=y" "ROM_SIZE=128" "XEN=n" "BOOTSPLASH=n" - "ATA=n" "AHCI=n" "SDCARD=n" "PVSCSI=n" "ESP_SCSI=n" - "LSI_SCSI=n" "MEGASAS=n" "MPT_SCSI=n" "FLOPPY=n" - "FLASH_FLOPPY=n" "NVME=n" "PS2PORT=n" "USB=n" - "LPT=n" "RTC_TIMER=n" "USE_SMM=n" "PMTIMER=n" - "TCGBIOS=n" "HARDWARE_IRQ=n" "ACPI_PARSE=y")))) - (vgabiosen - '(("ati" . ("VGA_ATI=y" "VGA_PCI=y")) - ("bochs-display" . ("DISPLAY_BOCHS=y" "VGA_PCI=y")) - ("cirrus" . ("VGA_CIRRUS=y" "VGA_PCI=y")) - ("stdvga" . ("VGA_BOCHS=y" "VGA_PCI=y")) - ("virtio" . ("VGA_BOCHS=y" "VGA_BOCHS_VIRTIO=y" - "VGA_PCI=y")) - ("vmware" . ("VGA_BOCHS=y" "VGA_BOCHS_VMWARE=y" - "VGA_PCI=y")) - ("qxl" . ("VGA_BOCHS=y" "VGA_BOCHS_QXL=y" - "VGA_PCI=y")) - ("isavga" . ("VGA_BOCHS=y" "VGA_PCI=n")) - ("ramfb" . ("VGA_RAMFB=y" "VGA_PCI=n"))))) - (mkdir "out") - (n-par-for-each - (parallel-job-count) - (match-lambda - ((target . config) - (let* ((dot-config (string-append (getcwd) "/" target - "/.config")) - (flags (append - make-flags - (list (string-append "KCONFIG_CONFIG=" - dot-config) - (string-append "OUT=" target "/"))))) - (mkdir target) - (call-with-output-file dot-config - (lambda (port) - (for-each (lambda (entry) - (format port "CONFIG_~a~%" entry)) - config))) - (apply invoke "make" "oldnoconfig" flags) - (apply invoke "make" flags) - (link (string-append target "/" - (if (string-prefix? "vgabios" target) - "vgabios.bin" "bios.bin")) - (string-append "out/" target ".bin"))))) - (append biosen - (map (lambda (pair) - `(,(string-append "vgabios-" (car pair)) - . - ,(cons "BUILD_VGABIOS=y" (cdr pair)))) - vgabiosen)))))) + ;; directory. To extract the config options, you can use the + ;; `format-qemu-firmware-config-options' helper procedure + ;; defined above. + (define bioses + '( ;; The standard BIOS using default options. + ("bios-256k" . ("QEMU=y" "ROM_SIZE=256" "ATA_DMA=n")) + ;; A minimal BIOS for old QEMU machine types. + ("bios-128k" + . ("QEMU=y" + "ROM_SIZE=128" + "ATA_DMA=n" + "XEN=n" + "ATA_PIO32=n" + "AHCI=n" + "SDCARD=n" + "VIRTIO_BLK=n" + "VIRTIO_SCSI=n" + "PVSCSI=n" + "ESP_SCSI=n" + "LSI_SCSI=n" + "MEGASAS=n" + "MPT_SCSI=n" + "NVME=n" + "USE_SMM=n" + "VGAHOOKS=n" + "HOST_BIOS_GEOMETRY=n" + "USB=n" + "PMTIMER=n" + "PCIBIOS=n" + "DISABLE_A20=n" + "WRITABLE_UPPERMEMORY=n" + "TCGBIOS=n" + "ACPI=n" + "ACPI_PARSE=n" + "DEBUG_SERIAL=n" + "DEBUG_SERIAL_MMIO=n")) + ;; Minimal BIOS for the "microvm" machine type. + ("bios-microvm" + . ("QEMU=y" + "QEMU_HARDWARE=y" + "PERMIT_UNALIGNED_PCIROM=y" + "ROM_SIZE=128" + "XEN=n" + "BOOTSPLASH=n" + "ATA=n" + "AHCI=n" + "SDCARD=n" + "PVSCSI=n" + "ESP_SCSI=n" + "LSI_SCSI=n" + "MEGASAS=n" + "MPT_SCSI=n" + "FLOPPY=n" + "FLASH_FLOPPY=n" + "NVME=n" + "PS2PORT=n" + "USB=n" + "LPT=n" + "RTC_TIMER=n" + "USE_SMM=n" + "PMTIMER=n" + "TCGBIOS=n" + "HARDWARE_IRQ=n" + "ACPI_PARSE=y")) + ("vgabios-ati" + . ("QEMU=y" + "BUILD_VGABIOS=y" + "VGA_ATI=y" + "VGA_PCI=y")) + ("vgabios-bochs-display" + . ("BUILD_VGABIOS=y" + "DISPLAY_BOCHS=y" + "VGA_PCI=y")) + ("vgabios-cirrus" . + ("BUILD_VGABIOS=y" "VGA_CIRRUS=y" "VGA_PCI=y")) + ("vgabios-isavga" . + ("BUILD_VGABIOS=y" "VGA_BOCHS=y" "VGA_PCI=n")) + ("vgabios-qxl" + . ("BUILD_VGABIOS=y" + "VGA_BOCHS=y" + "VGA_PCI=y" + "OVERRIDE_PCI_ID=y" + "VGA_VID=0x1b36" + "VGA_DID=0x0100")) + ("vgabios-ramfb" . + ("BUILD_VGABIOS=y" "VGA_RAMFB=y" "VGA_PCI=n")) + ("vgabios-stdvga" . + ("BUILD_VGABIOS=y" "VGA_BOCHS=y" "VGA_PCI=y")) + ("vgabios-virtio" + . ("BUILD_VGABIOS=y" + "VGA_BOCHS=y" + "VGA_PCI=y" + "OVERRIDE_PCI_ID=y" + "VGA_VID=0x1af4" + "VGA_DID=0x1050")) + ("vgabios-vmware" + . ("BUILD_VGABIOS=y" + "VGA_BOCHS=y" + "VGA_PCI=y" + "OVERRIDE_PCI_ID=y" + "VGA_VID=0x15ad" + "VGA_DID=0x0405")))) + (mkdir "out") + (n-par-for-each + (parallel-job-count) + (match-lambda + ((target . config) + (let* ((dot-config (string-append (getcwd) "/" target + "/.config")) + (flags (append + make-flags + (list (string-append "KCONFIG_CONFIG=" + dot-config) + (string-append "OUT=" target "/"))))) + (mkdir target) + (call-with-output-file dot-config + (lambda (port) + (for-each (lambda (entry) + (format port "CONFIG_~a~%" entry)) + config))) + (apply invoke "make" "oldnoconfig" flags) + (apply invoke "make" flags) + (link (string-append target "/" + (if (string-prefix? "vgabios" target) + "vgabios.bin" "bios.bin")) + (string-append "out/" target ".bin"))))) + bioses))) (replace 'install (lambda _ (let ((firmware (string-append #$output "/share/qemu"))) |