我正在尝试使用x86-64桌面学习和理解Linux。我使用OpenSuse 13.1作为我的工作系统来多启动Linux。我在自己的分区上创建了一个只有2个文件的学习系统。我在/ boot中编译了一个带有默认选项的3.16.2内核。以下文件init:
int main() {
int nbytes = 100;
char * str;
str = (char *) malloc(nbytes + 1);
puts ("Please Enter text");
while (1) {
getline(&str, &nbytes, stdin);
puts(str);
puts("line recieved");
if (str[0] == 'r')
reboot(0x1234567);
if (str[0] == 's')
reboot(0x4321fedc);
}
return 0;
}
是静态编译的,位于/ sbin中。 Init是一个非常原始的shell,但在C代码中进一步开发它将是一件苦差事。维基百科说:
“Linux控制台是Linux内核内部的系统控制台”
所以如果这真的在内核中我可以从我的init程序调用这个控制台而不必添加任何其他依赖项/文件/程序吗?如果是这样的话?我是否需要使用特定选项重建内核?如果不是,我如何使用绝对最少的文件获得控制台/终端/ CLI shell,以便我可以轻松调用基本系统命令?
注意我已多次安装Arch,但Arch和Linux From Scratch在其最基本的系统中有数百个(如果不是数千个)文件。此外,我正在尝试理解Linux,嵌入式Linux和Android可以使用完全不同的附加功能,所以我正在尝试不同的学习方法。
答案 0 :(得分:0)
尝试使用fork()和exec()来启动bash程序。
fork();
exec("path/to/bash");
你甚至可以做像exec这样的事情(“bash myscript.sh”);
编辑:您可能需要选择一个exec系列函数