न्यूनतम initrd CPIO हैलो विश्व कार्यक्रम चरण-दर-चरण

किसी भी निर्भरता के बिना एक हैलो दुनिया संकलित करें जो एक अनंत लूप में समाप्त होती है। 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लिनक्स कर्नेल ट्री में, बिल्ड हमेशा की तरह है, और इसे 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
आप USB पर वास्तविक हार्डवेयर पर चल सकते हैं /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/what-is-the-smallest-possible-linux-implementation/203902##902
उबंटू 16.10, QEMU 2.6.1 पर परीक्षण किया गया।