как запустить bash в моем новом ядре? - PullRequest
0 голосов
/ 01 июня 2019

Я хочу запустить bash внутри своего ядра.

Я пытался использовать system (), но ... я обнаружил, что это действительно только для мелочей.И не для разработки ядра.И я застрял здесь на данный момент ...

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

, где написано print_string, я заменю его кодом, чтобы вызвать bash.Но мне нужна помощь с этой частью ...

1 Ответ

0 голосов
/ 02 июня 2019

Чтобы уточнить ответ @ Адама Захрана:

Чтобы запустить процесс из ядра, вам нужно создать новый процесс, а затем execve("/bin/bash").

Ссылка будет: start_kernel() -> arch_call_rest_init() -> rest_init() -> kernel_init() -> try_to_run_init_process() -> run_init_process() здесь .

В частности, bash, по крайней мере в Linux, скомпилирован в виде динамически связанного двоичного файла ELF (как /sbin/init ...) Таким образом, ваше ядро ​​должно поддерживать двоичный формат ELF и динамическую загрузку .

Само собой разумеется, что он также должен поддерживать все системные вызовы, которые делает bash, вы можете запустить bash в strace(1), чтобы увидеть, какие системные вызовы используются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...