「... Linux to Boot」(これを明確にする必要があるかもしれません-Linuxはユーザーランドツールなしで「ブート」できます)
基本的なCLI:initramfsの/ binにash / dash / shをスローし、カーネルコマンドラインでinit = / bin / shを設定します
ここでの実験からデスクトップに移動する簡単なinit.c:http ://murga-linux.com/puppy/viewtopic.php?p=590822#590822
#include <unistd.h>
#include <sys/mount.h>
#include <stdlib.h>
//these could be functions but gcc complains less this way
#define EGGSACK(a) ({if((fork())==0) execvp(a[0],a);})
int main(int argc, char** argv) {
static char **X={ "Xvesa", "-screen", "800x600x16", "-nolisten", "tcp", "-tst", NULL }
EGGSACK(X);
mount("/proc", "/proc", "proc", MS_MGC_VAL, NULL);
mount("/sys", "/sys", "sys", MS_MGC_VAL, NULL);
mount("/dev", "/dev", "devtmpfs", MS_MGC_VAL, NULL);
mount( "/dev/pts", "/dev/pts", "devpts", MS_MGC_VAL, NULL );
putenv("PATH=/bin");
putenv("HOME=/");
putenv("TERM=rxvt");
putenv("PS1=# ");
putenv("SHELL=/bin/sh");
putenv("DISPLAY=:0");
static char **jwm={ "jwm", "-display", ":0", NULL }
EGGSACK(jwm);
while(1) sleep(1); /*keep init alive*/
}
注:/ sys / procおよび/ devptsは、それぞれmdev、top / ps、および端末が必要でない限り、絶対に必要ではありません。静的な/ devツリー(BUILTIN initramfs を作成するために最小限の.configおよびファイルシステムtarballと共にリンクに含まれる)を使用する場合、/ devはdevtmpfsではなくdevとしてマウントされるようにフォールバックする必要があります。サポートしたいカーネルを削除します。まったく削除しないでください。ターミナルエミュレータをサポートするX環境を起動するには、.configが最低限必要でした。ループの代わりにきれいに終了する方が適切かもしれません-リソースの使用を最小限にしようとしていましたが、fork execはjwm(またはお気に入りのwm)を待ち、その後execvpの "sh"で十分です。
/*here is a macro for a fork exec wait */
#define EGGSACKWEIGHT(a) ({int s,p;if((p=fork())==0){execvp(a[0],a);}else{while(wait(&s)!= p);}})