| // Copyright (c) 2012 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef INSTALLER_CHROMEOS_LEGACY_H_ |
| #define INSTALLER_CHROMEOS_LEGACY_H_ |
| |
| #include <string> |
| #include <vector> |
| |
| #include "installer/chromeos_install_config.h" |
| |
| // Attempts to update boot files needed by the legacy bios boot |
| // (syslinux config files) on the boot partition. Returns false on error. |
| bool RunLegacyPostInstall(const InstallConfig& install_config); |
| |
| // Attempts to update boot files needed by u-boot (not our secure u-boot) |
| // in some development situations. |
| bool RunLegacyUBootPostInstall(const InstallConfig& install_config); |
| |
| // Attempts to update boot files needed by the EFI bios boot |
| // (grub config files) on the boot partition. Returns false on error. |
| bool RunEfiPostInstall(const InstallConfig& install_config); |
| |
| // Valid boot slots for kernel command lines. |
| enum class BootSlot { A, B }; |
| |
| // Class to manipulate grub.cfg templates for updates. |
| class EfiGrubCfg { |
| public: |
| // Type of dm= option for a kernel command line being |
| // selected. |
| enum class DmOption { |
| None, // dm= option is missing from the cmdline |
| Present, // dm= option is present in the cmdline |
| }; |
| |
| EfiGrubCfg() = default; |
| EfiGrubCfg(const EfiGrubCfg&) = delete; |
| EfiGrubCfg& operator=(const EfiGrubCfg&) = delete; |
| |
| // Read the contents of the grub.cfg file at |path|. |
| bool LoadFile(const base::FilePath& path); |
| |
| // String of the full grub.cfg file contents. |
| std::string ToString() const; |
| |
| // Retrieves the full command line for the |slot| and |dm| argument. |
| // With |dm| DmOption::Present it will return the line with a dm= argument. |
| // With |dm| DmOption::None it will return the non-dm argument line. |
| std::string GetKernelCommand(BootSlot slot, DmOption dm) const; |
| |
| // Replaces the full command lines for the |slot| with the given |
| // command line. |
| // With |dm| DmOption::Present will replace the dm= argument lines. |
| // With |dm| DmOption::None it will replace the non-dm argument lines. |
| // It is up to the caller to ensure the |cmd| to replace the entry |
| // is valid. |
| bool ReplaceKernelCommand(BootSlot slot, DmOption dm, std::string cmd); |
| |
| // Modifies the grub boot parameters as needed for the update. |
| // Update all boot lines for the |slot| replacing PARTUUID and dm= |
| // kernel arguments with the |root_uuid| and |verity_args| values. |
| bool UpdateBootParameters(BootSlot slot, |
| const std::string& root_uuid, |
| const std::string& verity_args); |
| |
| private: |
| std::vector<std::string> file_lines_; |
| }; |
| |
| #endif // INSTALLER_CHROMEOS_LEGACY_H_ |