Чтобы уточнить ответ @ Адама Захрана:
Чтобы запустить процесс из ядра, вам нужно создать новый процесс, а затем 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)
, чтобы увидеть, какие системные вызовы используются.