我想在内核中启动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/