আমি একটি খুব ন্যূনতম লিনাক্স সিস্টেম তৈরি করছি যা কেবলমাত্র কার্নেল (v4.1-rc5) এবং ব্যস্তবক্স (v1.23.2) দ্বারা পপুলেটেড একটি initramfs নিয়ে গঠিত। এটি বেশিরভাগ অংশের জন্য সূক্ষ্মভাবে কাজ করে, তবে আমি / initে কমান্ড প্রয়োগের আচরণের মধ্যে একটি পার্থক্য লক্ষ্য করি যে আমি একটি এম্বেডেড থ্রিমফ বনাম একটি বাহ্যিক ব্যবহার করছি কিনা।
/ Init স্ক্রিপ্টটি হ'ল:
#!/bin/sh
dmesg -n 1
mount -t devtmpfs none /dev
mount -t sysfs none /sys
mount -t proc none /proc
echo "Welcome"
while true
do
setsid cttyhack /bin/sh
done
তারপরে আমি কার্নেলের সিএনএফআইজিপিআইপিআইটিআরএএমএফএসএসসিআরইসি বিকল্পটি সেট করেছিলাম। থ্রিমারফের জন্য সমস্ত ফোল্ডার সম্বলিত ডিরেক্টরিতে কনফিগ করুন, বা আমি চালাচ্ছি
find . | cpio -H newc -o | gzip > ../rootfs.cpio.gz
এটি নির্মাণ।
আমি যখন তখন কার্নেলটি সিএনএফআইজিপিআইআইটিআরএএমএফএসএসসিআরইসি সেট সহ বা ছাড়াই সংকলন করি তখন আমি আমার সিস্টেমের দুটি রূপ দিয়ে শেষ করি:
BZI छवि এম্বেড এম্বার দিয়ে
bzI छवि + rootfs.cpio.gz (বাহ্যিক initramfs)
যখন আমি এখন তাদের ব্যবহার শুরু করি qemu
qemu-system-x86_64 -enable-kvm -kernel bzImage
অথবা
qemu-system-x86_64 -enable-kvm -kernel bzImage -initrd rootfs.cpio.gz
আমি আচরণের মধ্যে নিম্নলিখিত পার্থক্য পেয়েছি:
সংস্করণ 2 সহ (বাহ্যিক উদ্যোগ) সমস্ত কিছু ঠিকঠাকভাবে কাজ করে, "স্বাগতম" প্রদর্শিত হয় এবং আমি একটি প্রম্পট পাই। সংস্করণ 1 সহ তবে (এম্বেডেড initramfs) আমি সতর্কতা পেয়েছি
unable to open an initial console
"স্বাগতম" প্রদর্শিত হয় না এবং আমি আমার প্রম্পটটি পাই।
আমি যতক্ষণ না প্রক্রিয়াটি বুঝতে পারি, ইনি্রামফের এই দুটি সংস্করণে একই ফাইল থাকা উচিত, যেহেতু আমি একটি অভিন্ন ফোল্ডার থেকে এটি তৈরি করেছি (বা কার্নেল এটি তৈরি করেছি)।
আমি ভাবছি কেউ যদি এই আচরণের ব্যাখ্যা দিয়ে আমাকে সহায়তা করতে পারে?
* হালনাগাদ *
মাইকজার্ভ মন্তব্যগুলিতে যেমন বলেছিলেন, কার্নেলটিতে ডিফল্টর মধ্যে একটি ন্যূনতম এমবেডড ইন্ট্রামফ অন্তর্ভুক্ত রয়েছে। বাহ্যিকটি ব্যবহার করার সময় এটি এখনও উপস্থিত রয়েছে, তবে আপনি নিজের এম্বেড করলে ওভাররাইট হয়ে যায়। আমি স্পেসিফিকেশনের বিপরীতে দেখতে পেয়েছি, এটি প্রকৃতপক্ষে খালি নয়, তবে এতে একটি ডিভ ফোল্ডার, একটি রুট ফোল্ডার এবং / dev / কনসোল ডিভাইস রয়েছে। এই ডিভাইসটি বাহ্যিক initramfs ব্যবহার করার পরে ব্যবহৃত হবে, তবে আপনি নিজের এম্বেড করলে ওভাররাইট করে ten সুতরাং mknod -m 622 initramfs_src/dev/console c 5 1
আপনার নিজের এম্বেড করার সময় আপনাকে / init / কনসোল ডিভাইসটি আপনার initramfs উত্সে অন্তর্ভুক্ত করতে হবে ।
মাইক্রোজার, ফ্রস্টচুটজ এবং জেডিবিপি-কে আমার চারপাশে আমার মাথা পেতে সাহায্য করার জন্য অনেক ধন্যবাদ!
/dev/console
আপনার অন্তর্নির্মিতটিতে কীসের জন্য অনুমতি সেট করা আছে ? আমি মনে করি পার্থক্য সম্পর্কে হতে পারে যারা দুই মামলার প্যাকিং করে।