c - 如何在我新制作的内核中启动 bash?
问题描述
我想在我的内核中启动 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()
all you can find here。
特别是 bash,至少在 Linux 上,被编译为动态链接的 ELF 二进制文件(原样/sbin/init
......)所以你的内核需要能够支持ELF 二进制格式和动态加载。
不用说,它还需要支持 bash 所做的所有系统调用,你可以在下运行bash
看看strace(1)
使用了哪些系统调用。
推荐阅读
- c# - 如何将复杂类作为参数传递给httpget
- jquery - 如何在 localStorage 中切换和记住 div
- javascript - React-Table 在选择时重新渲染整个表格
- python - 如何从 l=string 中提取 0207 而不是 207?
- apache-drill - 为什么 Apache Drill RDBMS 存储插件中的写访问受到限制?有没有可能的解决方法?
- cassandra - 我们如何在 RHEL 上仅安装 cqlsh(仅 CLI)而不是完整的 cassandra?
- regex - Hbase 远程 shell 命令
- c# - 使用 DateTime.Now 更新 2 个字段的代码重复
- django - 如何从另一个详细信息视图进入详细信息视图并正确获取模板中的所有查询集?
- linux - 将文件从 /usr/local/lib 复制到 Raspbian-stretch 中的 /usr/local/lib/python2.7/site-packages