我想在内核中启动bash。
我尝试使用system(),但是...我发现它实际上只是用于小事情。而不是用于内核开发。而我此刻停留在这里...
void kernel_entry()
{
init_vga(GREEN, BLACK);
print_string("$ ");
test_input();
在上面说print_string的地方,我将用代码替换它以显示bash。但是我需要那部分的帮助...
答案 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)
来查看使用了哪些系统调用。