initはUnixライクなオペレーティングシステムでの最初のユーザープロセスです
init-システムのカーネルによって直接起動されます。
init-システムのすべてのユーザー(ユーザー空間)プロセスの親です。
標準/ sbin / initは、構成ファイル/ etc / inittabを読み取り、システムを起動して、いくつかの「ランレベル」を使用してシステムを管理します。
同じ名前の
initキーを使用して、Linuxカーネルにstandard / sbin / initの代わりに別のファイルを使用するように指示できます
この機会に、次の設定を/boot/grub/menu.lstに追加します
タイトルLinuxカーネルとカスタムinit
ルート(hd0,1)
カーネル/linux/vmlinuz-2.6.26-1-686 root = / dev / hda2 init = / linux / init
initrd /linux/initrd.img-2.6.26-1-686
initプロセスを置き換える機会は誰にありますか? 組み込みシステムの開発者はこれに頼ることがあります-このようにして、デバイスの開発を簡素化し、オペレーティングシステムの環境全体に沿ってドラッグすることはできません。
私の場合、initを置き換えるという要望は別の面にありました。Linuxカーネルによって実行されるXameleonシステムのinitプロセスがどのように動作するかを確認したかったのです。 あなたも試してみませんか?
標準/ sbin / initをXameleon initに変更した方法。 (ソースコードと説明)
プロジェクトをビルドするには、gcc開発ツールがインストールされた最新のLinuxディストリビューションを使用します。 最も簡単なMakefileを書きましょう。
プログラム= init
Srcs = init.cc
LDFLAGS + = -static
Libs + = -lc
すべて:
g ++ -D POSIX -D LINUX $(CFLAGS)$(SRCS)$(LIBS)$(LDFLAGS)-o init
実際、この記事をこれ以上読むことはできません。この方法で収集されたほとんどすべてのソースコードは、initの代替として使用できます。 好奇心reader盛な読者のために、私はChameleonオペレーティングシステムの初期initプロセスを投稿します。 これは特定の初期化プロセスです。オペレーティングシステムの唯一のプロセスとして使用できます。これには、いくつかのコマンドの最も原始的なインタープリターとプロセスを開始する機能が含まれています。
この記事について考えながら、初期化コードをどのライセンスに適用するかについての疑問に悩まされました。 多くの苦痛を伴う審議の後、選択は
Two Clause BSD Licenseに落ちました。
このソースの歴史は単純です-カメレオンオペレーティングシステム用に作成され、現在カメレオンが意図した目的で使用しています。 最近、アイデアが浮上しました-Linuxでinitバージョンを試してみませんか? 一種の互換性テスト。
typedef struct typeCommandEntry { const char * szCmd; int nLength; int (*fHandler)( int argc, char * argv[], char * envp[] ); const char * szHelpString; } typeCommandEntry;
たとえば、標準シェルを起動するには、次のコマンドを使用します
/#exec / bin / sh
コンピューターの電源を切るには
/#exec / sbin / halt
コードの英語が下手で申し訳ありません-ロシア語のメッセージの方が良いでしょうが、初期化プロセスの段階では、ロシア語の文字ジェネレータはまだロードされていません-これは最初のプロセスの子孫の懸念です。
パッチを受け入れます。
FreeBSDで試しませんでした。 あなたが突然集まらない場合-書き込みます。
xameleon initソースコードのダウンロード
http://narod.ru/disk/26585438001/xam_init.tgz.htmlいいメイクをしてください。