如何在我的新内核中启动bash?

时间:2019-05-31 22:54:22

标签: c kernel

我想在内核中启动bash。

我尝试使用system(),但是...我发现它实际上只是用于小事情。而不是用于内核开发。而我此刻停留在这里...

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

在上面说print_string的地方,我将用代码替换它以显示bash。但是我需要那部分的帮助...

1 个答案:

答案 0 :(得分:0)

详细介绍@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)来查看使用了哪些系统调用。