1つのプログラムだけを実行し、他のプログラムは実行しないカスタムLinuxディストリビューションを作成する方法は?

1つのプログラムだけを実行し、他のプログラムは実行しないカスタムLinuxディストリビューションを作成する方法は?

1つのプログラムのみを実行する独自の「カスタム」Linuxディストリビューションを作成する方法は次のとおりです。XBMCこの写真

ベストアンサー1

段階的最小初期化 Hello Worldプログラム

ここに画像の説明を入力してください。

依存関係なしでHello Worldをコンパイルし、無限ループで終了します。init.S:

.global _start
_start:
    mov $1, %rax
    mov $1, %rdi
    mov $message, %rsi
    mov $message_len, %rdx
    syscall
    jmp .
    message: .ascii "FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR\n"
    .equ message_len, . - message

シャットダウンシステムコールは使用できません。それ以外の場合、カーネルがクラッシュしてinitを正常に終了する唯一の方法は次のとおりです。rebootシステムコールを使用してシステムの電源を切る

それから:

mkdir d
as --64 -o init.o init.S # assemble
ld -o d/init init.o      # link
cd d
find . | cpio -o -H newc | gzip > ../rootfs.cpio.gz
ROOTFS_PATH="$(pwd)/../rootfs.cpio.gz"

/initこれにより、カーネルが実行する最初のユーザーモードプログラムであるhello worldを使用してファイルシステムが作成されます。また、より多くのファイルを追加し、カーネルの実行中にプログラムがそのファイルd/にアクセスできるようにすることもできます。/init

次に、cdLinuxカーネルツリーに移動し、通常どおりビルドし、QEMUで実行します。

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux
git checkout v4.9
make mrproper
make defconfig
make -j"$(nproc)"
qemu-system-x86_64 -kernel arch/x86/boot/bzImage -initrd "$ROOTFS_PATH"

次の行が表示されます。

FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR

エミュレータ画面で!これが最後の行ではないので、もっと詳しく見てください。

Cプログラムを静的にリンクする場合にも使用できます。

#include <stdio.h>
#include <unistd.h>

int main() {
    printf("FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR\n");
    sleep(0xFFFFFFFF);
    return 0;
}

そして:

gcc -static init.c -o init

ダイナミックリンクのためには、ダイナミックリンカ実行可能ファイルを設定する必要があり、その最も一般的なものはC標準ライブラリ(glibcなど)の一部です。

USBを使用して物理ハードウェアで実行でき、/dev/sdX次のことができます。

make isoimage FDINITRD="$ROOTFS_PATH"
sudo dd if=arch/x86/boot/image.iso of=/dev/sdX

このトピックの重要なソース:技術的なヒント:initramfsの使い方landley.com |gen_initramfs_list.shまた、プロセスの自動化に役立つLinuxカーネルソースツリーのスクリプトであるこれを使用する方法についても説明します。

Ubuntu 16.10、QEMU 2.6.1でテストされました。

次のステップ

次の作業は設定です。忙しい箱、次のトピックも参照してください。最小のLinux実装は何ですか?

BusyBoxはPOSIX-yシェルを含む基本的なPOSIX-y CLIユーティリティを実装しているため、対話的にシステムをより簡単にテストできます。

個人的に今の時点でルート構築、ソースからすべてを自動的に構築し、ルートファイルシステムを生成する素晴らしいスクリプトのセットです。

これについて非常に詳細で自動化されたヘルパーをアップロードしました。https://github.com/cirosantilli/linux-kernel-module-cheat

おすすめ記事