1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-30 23:58:12 +00:00

Kernel: Allow the user to specify the virtual console when booting

This commit is contained in:
Liav A 2021-05-14 00:22:02 +03:00 committed by Andreas Kling
parent 99eab4667a
commit ab52108982
4 changed files with 17 additions and 2 deletions

View file

@ -201,4 +201,13 @@ Vector<String> CommandLine::userspace_init_args() const
return init_args; return init_args;
} }
UNMAP_AFTER_INIT size_t CommandLine::switch_to_tty() const
{
const auto default_tty = lookup("switch_to_tty").value_or("1");
auto switch_tty_number = default_tty.to_uint();
if (switch_tty_number.has_value() && switch_tty_number.value() >= 1) {
return switch_tty_number.value() - 1;
}
PANIC("Invalid default tty value: {}", default_tty);
}
} }

View file

@ -72,6 +72,7 @@ public:
[[nodiscard]] String userspace_init() const; [[nodiscard]] String userspace_init() const;
[[nodiscard]] Vector<String> userspace_init_args() const; [[nodiscard]] Vector<String> userspace_init_args() const;
[[nodiscard]] String root_device() const; [[nodiscard]] String root_device() const;
[[nodiscard]] size_t switch_to_tty() const;
private: private:
CommandLine(const String&); CommandLine(const String&);

View file

@ -5,8 +5,10 @@
*/ */
#include <AK/Singleton.h> #include <AK/Singleton.h>
#include <Kernel/CommandLine.h>
#include <Kernel/Debug.h> #include <Kernel/Debug.h>
#include <Kernel/Graphics/GraphicsManagement.h> #include <Kernel/Graphics/GraphicsManagement.h>
#include <Kernel/Panic.h>
#include <Kernel/TTY/ConsoleManagement.h> #include <Kernel/TTY/ConsoleManagement.h>
namespace Kernel { namespace Kernel {
@ -39,7 +41,11 @@ UNMAP_AFTER_INIT void ConsoleManagement::initialize()
m_consoles.append(VirtualConsole::create(index)); m_consoles.append(VirtualConsole::create(index));
} }
// Note: By default the active console is the first one. // Note: By default the active console is the first one.
m_active_console = m_consoles[0]; auto tty_number = kernel_command_line().switch_to_tty();
if (tty_number > m_consoles.size()) {
PANIC("Switch to tty value is invalid: {} ", tty_number);
}
m_active_console = m_consoles[tty_number];
ScopedSpinLock lock(m_lock); ScopedSpinLock lock(m_lock);
m_active_console->set_active(true); m_active_console->set_active(true);
} }

View file

@ -166,7 +166,6 @@ extern "C" UNMAP_AFTER_INIT [[noreturn]] void init()
PCI::initialize(); PCI::initialize();
GraphicsManagement::the().initialize(); GraphicsManagement::the().initialize();
ConsoleManagement::the().initialize(); ConsoleManagement::the().initialize();
ConsoleManagement::the().switch_to(0);
Thread::initialize(); Thread::initialize();
Process::initialize(); Process::initialize();