সর্বনিম্ন আরআরপি সিপিআইও হ্যালো ওয়ার্ল্ড প্রোগ্রামটি পদক্ষেপে

অসীম লুপে শেষ হওয়া কোনও নির্ভরতা ছাড়াই একটি হ্যালো ওয়ার্ল্ড সংকলন করুন। 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
আমরা ব্যবহার করতে পারি না sys_exit, না হলে কার্নেল প্যানিক্স।
তারপর:
mkdir d
as --64 -o init.o init.S
ld -o init d/init.o
cd d
find . | cpio -o -H newc | gzip > ../rootfs.cpio.gz
ROOTFS_PATH="$(pwd)/../rootfs.cpio.gz"
এটি আমাদের হ্যালো ওয়ার্ল্ডে একটি ফাইল সিস্টেম তৈরি করে /initযা কার্নেলটি চালিত হবে এমন প্রথম ব্যবহারকারীর প্রোগ্রাম। আমরা আরও ফাইল যুক্ত করতে পারতাম এবং যখন কার্নেলটি চালিত হয় তখন সেগুলি প্রোগ্রাম d/থেকে অ্যাক্সেসযোগ্য হবে /init।
তারপরে cdলিনাক্স কার্নেল গাছের মধ্যে, বিল্ডটি যথারীতি হয় এবং এটিকে কিউইএমইউতে চালান:
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
এমুলেটর পর্দায়! মনে রাখবেন এটি শেষ লাইন নয়, তাই আপনাকে আরও কিছুটা উপরে তাকিয়ে থাকতে হবে।
আপনি সি প্রোগ্রামগুলি স্ট্যাটিকালি লিঙ্ক করলে আপনি এটি ব্যবহার করতে পারেন:
#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
আপনি একটি ইউএসবি চালু /dev/sdXএবং সহ সত্যিকারের হার্ডওয়্যারটিতে চালনা করতে পারেন :
make isoimage FDINITRD="$ROOTFS_PATH"
sudo dd if=arch/x86/boot/image.iso of=/dev/sdX
এই বিষয়ে দুর্দান্ত উত্স: http://landley.net/writing/rootfs-howto.html এটি কীভাবে ব্যবহার করতে হয় তাও ব্যাখ্যা করে gen_initramfs_list.sh, যা প্রক্রিয়াটি স্বয়ংক্রিয় করতে সহায়তা করার জন্য লিনাক্স কার্নেল উত্স ট্রি থেকে প্রাপ্ত একটি স্ক্রিপ্ট।
পরবর্তী পদক্ষেপ: ব্যাসিবক্স সেটআপ করুন যাতে আপনি সিস্টেমের সাথে ইন্টারঅ্যাক্ট করতে পারেন: /unix/2692/ কি-is-the-smslest-possible-linux-implementation/203902#203902
উবুন্টু 16.10, QEMU 2.6.1 এ পরীক্ষিত।