代码拉取完成,页面将自动刷新
同步操作将从 src-openEuler/anaconda 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
From ad79c2e137e801c490fc35d4cecefbca6619fbea Mon Sep 17 00:00:00 2001
From: Huang Yang <huangyang@loongson.cn>
Date: Thu, 25 Apr 2024 12:14:01 +0000
Subject: [PATCH] add loongarch support for anaconda
Signed-off-by: yueyuankun <yueyuankun@kylinos.cn>
---
pyanaconda/modules/storage/bootloader/base.py | 9 +++--
pyanaconda/modules/storage/bootloader/efi.py | 35 ++++++++++++++++++-
.../modules/storage/bootloader/factory.py | 4 +++
.../modules/storage/devicetree/fsset.py | 6 +++-
pyanaconda/modules/storage/platform.py | 10 ++++++
5 files changed, 59 insertions(+), 5 deletions(-)
diff --git a/pyanaconda/modules/storage/bootloader/base.py b/pyanaconda/modules/storage/bootloader/base.py
index d40086d..191b8af 100644
--- a/pyanaconda/modules/storage/bootloader/base.py
+++ b/pyanaconda/modules/storage/bootloader/base.py
@@ -796,11 +796,14 @@ class BootLoader(object):
swap_devices = storage.fsset.swap_devices
dracut_devices.extend(swap_devices)
- # Add resume= option to enable hibernation on x86.
+ # Add resume= option to enable hibernation on x86 and loongarch.
# Choose the largest swap device for that.
- if blivet.arch.is_x86() and swap_devices:
+ if (blivet.arch.is_x86() or blivet.arch.is_loongarch())and swap_devices:
resume_device = max(swap_devices, key=lambda x: x.size)
- self.boot_args.add("resume=%s" % resume_device.fstab_spec)
+ if not blivet.arch.is_efi() and blivet.arch.is_loongarch():
+ self.boot_args.add("resume=%s" % resume_device.path)
+ else:
+ self.boot_args.add("resume=%s" % resume_device.fstab_spec)
# Does /usr have its own device? If so, we need to tell dracut
usr_device = storage.mountpoints.get("/usr")
diff --git a/pyanaconda/modules/storage/bootloader/efi.py b/pyanaconda/modules/storage/bootloader/efi.py
index 5a28676..d2fffd2 100644
--- a/pyanaconda/modules/storage/bootloader/efi.py
+++ b/pyanaconda/modules/storage/bootloader/efi.py
@@ -28,7 +28,7 @@ from pyanaconda.product import productName
from pyanaconda.anaconda_loggers import get_module_logger
log = get_module_logger(__name__)
-__all__ = ["EFIBase", "EFIGRUB", "Aarch64EFIGRUB", "ArmEFIGRUB", "MacEFIGRUB"]
+__all__ = ["EFIBase", "EFIGRUB", "Aarch64EFIGRUB", "ArmEFIGRUB", "MacEFIGRUB", "LOONGARCHEFIGRUB"]
class EFIBase(object):
@@ -170,6 +170,39 @@ class Aarch64EFIGRUB(EFIGRUB):
self._packages64 = ["grub2-efi-aa64", "shim-aa64"]
+class LOONGARCHEFIGRUB(EFIGRUB):
+ _efi_binary = "grubloongarch64.efi"
+ stage2_is_valid_stage1 = False
+ stage2_bootable = False
+
+ def __init__(self):
+ super().__init__()
+ self._packages64 = ["grub2-efi-loongarch64"]
+
+ def remove_efi_boot_target(self):
+ return
+
+ def _add_single_efi_boot_target(self, partition):
+ boot_disk = partition.disk
+ boot_part_num = str(partition.parted_partition.number)
+
+ rc = util.execInSysroot("cp", ["-a", "/boot/efi/EFI/openEuler/" + self._efi_binary, "/boot/efi/EFI/BOOT/" + "BOOTLOONGARCH64.EFI"])
+ if rc:
+ raise BootLoaderError("Failed to set new efi boot target. This is most "
+ "likely a kernel or firmware bug.")
+ rc = util.execInSysroot("cp", ["-a", "/boot/efi/EFI/openEuler/" + self._efi_binary, "/boot/efi/EFI/BOOT/" + "BOOTLOONGARCH.EFI"])
+ if rc:
+ raise BootLoaderError("Failed to set new efi boot target for new BIOS. This is most "
+ "likely a kernel or firmware bug.")
+
+ def add_efi_boot_target(self):
+ if self.stage1_device.type == "partition": # pylint: disable=no-member
+ self._add_single_efi_boot_target(self.stage1_device) # pylint: disable=no-member
+ elif self.stage1_device.type == "mdarray": # pylint: disable=no-member
+ for parent in self.stage1_device.parents: # pylint: disable=no-member
+ self._add_single_efi_boot_target(parent)
+
+
class ArmEFIGRUB(EFIGRUB):
_serial_consoles = ["ttyAMA", "ttyS"]
_efi_binary = "\\grubarm.efi"
diff --git a/pyanaconda/modules/storage/bootloader/factory.py b/pyanaconda/modules/storage/bootloader/factory.py
index 4815685..643f633 100644
--- a/pyanaconda/modules/storage/bootloader/factory.py
+++ b/pyanaconda/modules/storage/bootloader/factory.py
@@ -114,6 +114,10 @@ class BootLoaderFactory(object):
from pyanaconda.modules.storage.bootloader.efi import EFIGRUB
return EFIGRUB
+ if platform_class is platform.LOONGARCHEFI:
+ from pyanaconda.modules.storage.bootloader.efi import LOONGARCHEFIGRUB
+ return LOONGARCHEFIGRUB
+
if platform_class is platform.MacEFI:
from pyanaconda.modules.storage.bootloader.efi import MacEFIGRUB
return MacEFIGRUB
diff --git a/pyanaconda/modules/storage/devicetree/fsset.py b/pyanaconda/modules/storage/devicetree/fsset.py
index 4db3759..6f85a37 100644
--- a/pyanaconda/modules/storage/devicetree/fsset.py
+++ b/pyanaconda/modules/storage/devicetree/fsset.py
@@ -23,6 +23,7 @@ import gi
gi.require_version("BlockDev", "3.0")
from gi.repository import BlockDev as blockdev
+from blivet import arch
from blivet.devices import NoDevice, DirectoryDevice, NFSDevice, FileDevice, MDRaidArrayDevice, \
NetworkStorageDevice, OpticalDevice
from blivet.errors import UnrecognizedFSTabEntryError, FSTabTypeMismatchError
@@ -776,7 +777,10 @@ class FSSet(object):
break
if device.encrypted:
options += ",x-systemd.device-timeout=0"
- devspec = device.fstab_spec
+ if not arch.is_efi() and arch.is_loongarch():
+ devspec = device.path
+ else:
+ devspec = device.fstab_spec
dump = device.format.dump
if device.format.check and mountpoint == "/":
passno = 1
diff --git a/pyanaconda/modules/storage/platform.py b/pyanaconda/modules/storage/platform.py
index 20f2c4d..2bb8e41 100644
--- a/pyanaconda/modules/storage/platform.py
+++ b/pyanaconda/modules/storage/platform.py
@@ -287,6 +287,14 @@ class Aarch64EFI(EFI):
return ["vfat", "ntfs"]
+class LOONGARCHEFI(EFI):
+
+ @property
+ def non_linux_format_types(self):
+ """Format types of devices with non-linux operating systems."""
+ return ["vfat", "ntfs"]
+
+
class ArmEFI(EFI):
@property
@@ -522,6 +530,8 @@ def get_platform():
return ArmEFI()
elif arch.is_riscv64():
return RISCV64EFI()
+ elif arch.is_loongarch():
+ return LOONGARCHEFI()
else:
return EFI()
elif arch.is_x86():
--
2.43.0
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。