我想在内核中启动bash。

我曾经尝试过使用system(),但是...我发现它只是真正的小事。而不是用于内核开发。我现在被困在这里...

void kernel_entry()
{
  init_vga(GREEN, BLACK);
  print_string("$ ");
  test_input();


它说print_string我将替换为代码以显示bash。但是我需要那部分的帮助...

最佳答案

要详细说明@Adam Zahran的答案:

为了从内核运行一个进程,您需要创建一个新进程,然后创建一个execve("/bin/bash")

参考为:
start_kernel()-> arch_call_rest_init()-> rest_init()-> kernel_init()-> try_to_run_init_process()-> run_init_process()
所有这些都可以找到here

特别是bash,至少在Linux上,被编译为动态链接的ELF二进制文件(/sbin/init ...)
因此,您的内核需要能够支持ELF binary format and dynamic loading

不用说,它还需要支持bash进行的所有系统调用,您可以在bash下运行strace(1)来查看使用了哪些系统调用。

关于c - 如何在我的新内核中启动bash?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56402510/

10-17 01:51