সম্পূর্ণরূপে লিনাক্স বুট করার জন্য প্রয়োজনীয় ন্যূনতম রুট ফাইল সিস্টেম অ্যাপ্লিকেশনগুলি কী?


17

এটি ব্যবহারকারীর স্পেস অ্যাপ্লিকেশন সম্পর্কে একটি প্রশ্ন, তবে শুনুন!

তিনটি "অ্যাপ্লিকেশন", তাই বলতে গেলে লিনাক্সের কার্যকরী বিতরণ বুট করতে হবে:

  1. বুটলোডার - এম্বেডের জন্য সাধারণত এটি ইউ-বুট, যদিও কোনও হার্ড প্রয়োজন হয় না।

  2. কার্নেল - এটি বেশ সোজা।

  3. রুট ফাইল সিস্টেম - এটি ছাড়া কোনও শেল বুট করতে পারে না। ফাইল সিস্টেমে কার্নেল বুট থাকে এবং যেখানে initফর্ম বলা হয়।

আমার প্রশ্ন # 3 সম্পর্কিত। যদি কেউ চূড়ান্ত ন্যূনতম রুটফগুলি তৈরি করতে চান (এই প্রশ্নের জন্য আসুন কেবল জিইআইআই নয়, কেবল শেলই না বলা হয়), শেল বুট করার জন্য কোন ফাইল / প্রোগ্রামগুলি প্রয়োজন?


ন্যূনতম সংজ্ঞায়িত করুন। : যেমন এ ব্যাখ্যা আপনি অন্য কিছুই কেবলমাত্র একটি এক্সিকিউটেবল ব্যবহার করতে পারেন superuser.com/a/991733/128124 প্রতি প্রস্থান বা অন্য আতঙ্ক, তাই আপনি একটি অসীম লুপ বা দীর্ঘ ঘুমের প্রয়োজন না পারেন, শুধু যে। অনুরূপ প্রশ্ন: unix.stackexchange.com/questions/17122/…
Ciro

উত্তর:


32

এটি সম্পূর্ণরূপে আপনার ডিভাইসে কী কী পরিষেবা থাকতে চান তার উপর নির্ভর করে।

প্রোগ্রাম

আপনি লিনাক্স বুটটি সরাসরি শেল হিসাবে তৈরি করতে পারেন । এটি উত্পাদনে খুব কার্যকর নয় - যারা কেবল সেখানে শেল বসতে চান - তবে আপনার ইন্টারেক্টিভ বুটলোডার থাকলে এটি হস্তক্ষেপের প্রক্রিয়া হিসাবে কার্যকর: init=/bin/shকার্নেল কমান্ড লাইনে পৌঁছান। সকল লিনাক্স ব্যবস্থা (এবং সমস্ত ইউনিক্স সিস্টেম সমুহের) একটি বোর্ন / POSIX ধাঁচের শেল আছে /bin/sh

আপনার শেল ইউটিলিটিগুলির একটি সেট প্রয়োজন হবে । ব্যজিবক্স একটি খুব সাধারণ পছন্দ; এটা ফাইল এবং টেক্সট ম্যানিপুলেশন (জন্য একটি শেল এবং সাধারণ ইউটিলিটি রয়েছে cp, grepনেটওয়ার্কিং সেটআপ,, ...) ( ping, ifconfig, ...), প্রক্রিয়া ম্যানিপুলেশন ( ps, nice, ...), এবং বিভিন্ন অন্যান্য সিস্টেম টুলস ( fdisk, mount, syslogd, ...)। ব্যাসিবক্স অত্যন্ত কনফিগারযোগ্য: আপনার অ্যাপ্লিকেশনের জন্য সঠিক আকার / কার্যকারিতা আপোস করার জন্য আপনি সংকলনের সময় কোন সরঞ্জামগুলি চান তা এমনকি ব্যক্তিগত বৈশিষ্ট্যগুলিও নির্বাচন করতে পারেন। এছাড়া sh, ন্যূনতমরূপে যে আপনি সত্যিই ছাড়া কিছু করতে পারেন না mount, umountএবং halt, কিন্তু এটি আছে না এটিপিকাল হবে cat, cp, mv, rm,mkdir, rmdir, ps, syncএবং কয়েক আরও অনেক কিছু। ব্যস্তবক্স busyboxপ্রতিটি ইউটিলিটির প্রতীকী লিঙ্ক সহ একটি একক বাইনারি হিসাবে পরিচিত হিসাবে ইনস্টল করে ।

একটি সাধারণ ইউনিক্স সিস্টেমে প্রথম প্রক্রিয়া বলা হয় init। এর কাজ অন্যান্য পরিষেবা শুরু করা। ব্যাসিবক্সে একটি ইনিও সিস্টেম রয়েছে। initবাইনারি ছাড়াও (সাধারণত অবস্থিত /sbin) আপনাকে এর কনফিগারেশন ফাইলগুলি (সাধারণত বলা হয় /etc/inittab- কিছু আধুনিক আরম্ভ প্রতিস্থাপন সেই ফাইলটি বাদ দেয় তবে আপনি এটি একটি ছোট এমবেডড সিস্টেমে পাবেন না) যা কোন পরিষেবাগুলি শুরু করতে হবে তা নির্দেশ করে that এবং কখন. ব্যাসিবক্সের জন্য, /etc/inittabএটি alচ্ছিক ; যদি এটি অনুপস্থিত থাকে তবে আপনি কনসোলে একটি রুট শেল পাবেন এবং স্ক্রিপ্ট /etc/init.d/rcS(ডিফল্ট অবস্থান) বুট করার সময় কার্যকর করা হবে।

অবশ্যই এটি আপনার প্রয়োজন, অবশ্যই সেই প্রোগ্রামগুলি যা আপনার ডিভাইসটিকে কিছু উপকারী করে তোলে। উদাহরণস্বরূপ, আমার হোম রাউটারে একটি ওপেনআরটি বৈকল্পিক চলমান , কেবলমাত্র প্রোগ্রামগুলি হ'ল ব্যাসিবক্স, nvram( এনভিআরএমে সেটিংস পড়তে এবং পরিবর্তন করতে) এবং নেটওয়ার্কিং ইউটিলিটিগুলি।

আপনার সমস্ত এক্সিকিউটেবল স্থিতিশীলভাবে সংযুক্ত না হলে আপনার গতিশীল লোডার ( ld.soযা libc পছন্দ এবং প্রসেসরের আর্কিটেকচারের উপর নির্ভর করে বিভিন্ন নামে ডাকা যেতে পারে) এবং সমস্ত গতিশীল লাইব্রেরি ( /lib/lib*.soসম্ভবত এগুলির মধ্যে কিছু /usr/lib) প্রয়োজন হবে এই এক্সিকিউটেবল।

ডিরেক্টরি কাঠামো

ফাইলসিস্টেম শ্রেণীক্রম স্ট্যান্ডার্ড লিনাক্স সিস্টেমের সাধারণ ডিরেক্টরির গঠন বর্ণনা করা হয়েছে। এটি ডেস্কটপ এবং সার্ভার ইনস্টলেশনের দিকে প্রস্তুত: এটি একটি এম্বেডড সিস্টেমে অনেকগুলি বাদ দেওয়া যেতে পারে। এখানে একটি সাধারণ সর্বনিম্ন।

  • /bin: এক্সিকিউটেবল প্রোগ্রাম (কিছু /usr/binপরিবর্তে হতে পারে )।
  • /dev: ডিভাইস নোড (নীচে দেখুন)
  • /etc: কনফিগারেশন ফাইল
  • /lib: ডায়নামিক লোডার সহ ভাগ করা লাইব্রেরি (সমস্ত এক্সিকিউটেবল স্থিতিশীলভাবে সংযুক্ত না হলে)
  • /proc: প্রোক ফাইল সিস্টেমের জন্য মাউন্ট পয়েন্ট
  • /sbin: এক্সিকিউটেবল প্রোগ্রাম। পার্থক্যটি /binহ'ল /sbinপ্রোগ্রামগুলির জন্য যা কেবলমাত্র সিস্টেম প্রশাসকের জন্য দরকারী তবে এম্বেড থাকা ডিভাইসে এই পার্থক্যটি অর্থবহ নয়। আপনি /sbinএকটি প্রতীকী লিঙ্ক করতে পারেন /bin
  • /mnt: রক্ষণাবেক্ষণের সময় স্ক্র্যাচ মাউন্ট পয়েন্ট হিসাবে কেবল পঠনযোগ্য রুট ফাইল সিস্টেমগুলিতে ব্যবহার করা সহজ
  • /sys: সিস্টেফ ফাইল সিস্টেমের জন্য মাউন্ট পয়েন্ট
  • /tmp: অস্থায়ী ফাইলগুলির জন্য অবস্থান (প্রায়শই একটি tmpfsমাউন্ট)
  • /usr: উপ-ডিরেক্টরি অন্তর্ভুক্ত bin, libএবং sbin/usrমূল ফাইল সিস্টেমে নেই এমন অতিরিক্ত ফাইলের জন্য উপস্থিত রয়েছে। আপনার যদি তা না থাকে তবে আপনি /usrমূল ডিরেক্টরিতে একটি প্রতীকী লিঙ্ক তৈরি করতে পারেন ।

ডিভাইস ফাইল

এখানে নূন্যতমটিতে কিছু সাধারণ এন্ট্রি রয়েছে /dev:

  • console
  • full (এটিকে লেখার ক্ষেত্রে সর্বদা "ডিভাইসে কোনও স্থান অবশিষ্ট থাকে না" বলে প্রতিবেদন করা হয়)
  • log(একটি সকেট যা প্রোগ্রামগুলি লগ এন্ট্রিগুলি প্রেরণের জন্য ব্যবহার করে), যদি আপনার কোনও syslogdডেমন থাকে (যেমন বুসিবক্স এর) থেকে
  • null (এমন ফাইলের মতো কাজ করে যা সর্বদা খালি থাকে)
  • ptmxএবং ptsডিরেক্টরি , যদি আপনি সিউডো-টার্মিনাল ব্যবহার করতে চান (যেমন কনসোল ব্যতীত অন্য কোনও টার্মিনাল) - উদাহরণস্বরূপ যদি ডিভাইসটি নেটওয়ার্কযুক্ত হয় এবং আপনি টেলনেট বা এসএসএস করতে চান
  • random (এলোমেলো বাইটগুলি ফেরত দেয়, ব্লক করে ঝুঁকি থাকে)
  • tty (সর্বদা প্রোগ্রামের টার্মিনালকে মনোনীত করে)
  • urandom (এলোমেলো বাইট ফেরত দেয়, কখনই ব্লক করে না তবে তাজা-বুট করা ডিভাইসে অ-র্যান্ডম হতে পারে)
  • zero (নাল বাইটের একটি অসীম অনুক্রম রয়েছে)

এর বাইরে আপনার নিজের হার্ডওয়্যারের জন্য প্রবেশের প্রয়োজন হবে (নেটওয়ার্ক ইন্টারফেস বাদে এগুলি এন্ট্রি পায় না /dev): সিরিয়াল পোর্ট, স্টোরেজ ইত্যাদি

এম্বেড থাকা ডিভাইসের জন্য, আপনি সাধারণত রুট ফাইল সিস্টেমে সরাসরি ডিভাইস এন্ট্রিগুলি তৈরি করতে পারেন। হাই-এন্ড সিস্টেমে একটি স্ক্রিপ্ট রয়েছে যা এন্ট্রিগুলি MAKEDEVতৈরি করার জন্য ডাকা হয় /dev, তবে এম্বেড থাকা সিস্টেমে স্ক্রিপ্টটি প্রায়শই চিত্রটিতে বান্ডিল হয় না। যদি কিছু হার্ডওয়্যার হটপ্লাগ করা যায় (উদাহরণস্বরূপ যদি ডিভাইসটির ইউএসবি হোস্ট পোর্ট থাকে) তবে ইউদেব/dev দ্বারা পরিচালনা করা উচিত (আপনার এখনও মূল ফাইল সিস্টেমে একটি ন্যূনতম সেট থাকতে পারে)।

বুট-সময় ক্রিয়া

রুট ফাইল সিস্টেমের বাইরেও আপনাকে সাধারণ অপারেশনের জন্য আরও কয়েকটি মাউন্ট করতে হবে:

  • procfs চালু /proc(বেশ অপরিহার্য)
  • sysfs চালু /sys(বেশ অপরিহার্য)
  • tmpfsফাইল সিস্টেম চালু /tmp(প্রোগ্রামগুলি অস্থায়ী ফাইলগুলি তৈরি করতে দেয় যা র‌্যামে থাকবে, মূল ফাইল সিস্টেম যা ফ্ল্যাশ বা কেবল পঠনযোগ্য হতে পারে তার চেয়ে বেশি হবে)
  • /devগতিশীল হলে tmpfs, devfs বা devtmpfs (উপরের "ডিভাইস ফাইলগুলিতে" udev দেখুন)
  • /dev/ptsআপনি যদি [সিউডো-টার্মিনালগুলি ব্যবহার করতে চান তবে উপরের দিকে তাকান ( ptsউপরের মন্তব্যটি দেখুন )

আপনি একটি /etc/fstabফাইল তৈরি করতে এবং কল করতে mount -aবা mountম্যানুয়ালি চালাতে পারেন ।

আপনার লগ লেখার কোনও জায়গা থাকলে সিসলগ ডেমন শুরু করুন (তেমনি klogdকার্নেল লগগুলির জন্য, যদি syslogdপ্রোগ্রামটি এটি যত্ন না করে)।

এর পরে, ডিভাইসটি অ্যাপ্লিকেশন-নির্দিষ্ট পরিষেবাগুলি শুরু করতে প্রস্তুত।

কিভাবে একটি রুট ফাইল সিস্টেম তৈরি করতে হয়

এটি একটি দীর্ঘ এবং বিচিত্র কাহিনী, সুতরাং আমি এখানে যা কিছু করব তা হল কয়েকটি পয়েন্টার।

মূল ফাইল সিস্টেমটি র‌্যামে রাখা যেতে পারে (রম বা ফ্ল্যাশ-এ একটি (সাধারণত সংক্ষেপিত) চিত্র থেকে লোড করা), অথবা ডিস্ক-ভিত্তিক ফাইল-সিস্টেমে (রম বা ফ্ল্যাশ-এ সঞ্চিত) রাখা যেতে পারে, বা প্রযোজ্য ক্ষেত্রে নেটওয়ার্ক থেকে লোড করা (প্রায়শই টিএফটিপি-র উপরে ) থাকতে পারে applicable । মূল ফাইল সিস্টেমটি যদি র‌্যামে থাকে তবে এটিকে initramfs করুন - এমন একটি র‌্যাম ফাইল সিস্টেম যা বুট করার সময় তৈরি হয়।

এম্বেড থাকা সিস্টেমগুলির জন্য মূল চিত্র একত্রিত করার জন্য অনেকগুলি ফ্রেমওয়ার্ক বিদ্যমান। ব্যাসিবক্স এফএকিউতে কয়েকটি পয়েন্টার রয়েছে । বিল্ডরুট একটি জনপ্রিয় যা আপনাকে লিনাক্স কার্নেল এবং ব্যাসিবক্সের মতো একটি সেটআপ সহ পুরো মূল চিত্র তৈরি করতে দেয় build ওপেন এম্বেড এমন আরও একটি কাঠামো।

উইকিপিডিয়ায় জনপ্রিয় এম্বেডড লিনাক্স বিতরণের একটি (অসম্পূর্ণ) তালিকা রয়েছে । আপনার কাছাকাছি থাকা এম্বেড থাকা লিনাক্সের একটি উদাহরণ হ'ল নেটওয়ার্ক অ্যাপ্লিকেশনগুলির জন্য অপারেটিং সিস্টেমের ওপেনআরটি পরিবার (টিনকার্সের হোম রাউটারগুলিতে জনপ্রিয়)। যদি আপনি অভিজ্ঞতার মাধ্যমে শিখতে চান তবে আপনি স্ক্র্যাচ থেকে লিনাক্স চেষ্টা করতে পারেন , তবে এটি এম্বেডড ডিভাইসের পরিবর্তে শখের জন্য ডেস্কটপ সিস্টেমগুলির দিকে তত্পর।

লিনাক্স বনাম লিনাক্স কার্নেলের উপর একটি নোট

লিনাক্স কার্নেলে যে একমাত্র আচরণ সেঁকেছে তা হ'ল প্রথম প্রোগ্রাম যা বুট সময়ে চালু হয়েছিল। (আমি ঢোকা করা হবে না হলে initrd এবং initramfs -র সুক্ষ্ণ বিষয়গুলো এখানে।) এই প্রোগ্রাম, ঐতিহ্যগতভাবে নামক Init , প্রক্রিয়া আইডি 1 এবং নির্দিষ্ট বিশেষাধিকার (ইমিউনিটি হয়েছে বধ সংকেত ) ও দায়িত্ব (শস্যচ্ছেদন এতিমদের )। আপনি লিনাক্স কার্নেল দিয়ে একটি সিস্টেম চালাতে পারেন এবং প্রথম প্রক্রিয়া হিসাবে যা যা শুরু করতে পারেন তবে লিনাক্স কার্নেলের উপর ভিত্তি করে আপনার কাছে একটি অপারেটিং সিস্টেম এবং সাধারণভাবে "লিনাক্স" - লিনাক্স নামে  পরিচিত নয় শব্দটির, একটি ইউনিক্স- মত অপারেটিং সিস্টেম যার কার্নেলটি লিনাক্স কার্নেল। উদাহরণস্বরূপ, অ্যান্ড্রয়েড একটি অপারেটিং সিস্টেম যা ইউনিক্সের মতো নয় তবে লিনাক্স কার্নেলের উপর ভিত্তি করে।


দুর্দান্ত উত্তর। আমি শুধুমাত্র বুটিং উল্লিখিত মধ্যে শিরোনাম বি / সি যে কি সম্ভবত, অনুসন্ধান করা হবে লিনাক্স বনাম লিনাক্স কার্নেল সম্পর্কে তাই মহান ছাড়াও, যে চাহিদা আরো ব্যাপক জ্ঞান হতে লিনাক্স।
MDMoore313

@ বিগহমি মনে রাখবেন, ফ্রি সফটওয়্যার ফাউন্ডেশন আমাদের সবাইকে এটি জিএনইউ / লিনাক্স বলতে চাইছে, যেহেতু বেশিরভাগ (সমস্ত?) "লিনাক্স ডিগ্রোস" সফ্টওয়্যারটি জিএনইউ, যদিও কার্নেলটি লিনাক্স (অতএব জিএনইউ / লিনাক্স) হলেও।
বেনজিওয়েব

মেহ, কেউ এর জন্য সময় পান না। তাহলে আমার ডিসট্রোকে বুজিবক্স / লিনাক্স বলা উচিত ?? আমি জানি আমি জানি, এটি আপনি তার স্টলওয়ার্থ নয়, সবেমাত্র
উদ্রেক করছেন

1
@ বেনজিওয়েব বা জিএনইউ / এক্স 11 / অ্যাপাচি / লিনাক্স / টেক্স / পার্ল / পাইথন / ফ্রিসিভ । আরএমএস বাদে প্রত্যেকে একে “লিনাক্স” বলে ডাকে।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

@ গিলস ওয়েল, ডিবিয়ান ছাড়াও, আমার ধারণা। :)
একটি সিএনএন

5

আপনার যা দরকার তা হ'ল স্ট্যাটিকালি লিঙ্কযুক্ত এক্সিকিউটেবল, ফাইল সিস্টেমে স্থাপন করা হয় বিচ্ছিন্নভাবে। আপনার অন্য কোনও ফাইলের দরকার নেই। যে এক্সিকিউটেবল হ'ল init প্রক্রিয়া। এটি ব্যস্তবক্স হতে পারে। এটি আপনাকে নিজের মধ্যে শেল এবং অন্যান্য ইউটিলিটিগুলির হোস্ট দেয়। রুট ফাইল সিস্টেম রিড-রাইটিং, তৈরি / ডেভ নোড, এক্সিকিউট রিয়েল ইন, ইত্যাদির জন্য মাউন্ট করতে ব্যস্তবক্সে ম্যানুয়ালি কমান্ড প্রয়োগ করে আপনি একটি সম্পূর্ণ কার্যক্ষম সিস্টেমে যেতে পারেন real


হ্যাঁ, আমি জানতাম ব্যস্তবক্সটি কমিন '। আর কিছু দেখায় কিনা দেখা যাক।
MDMoore313

4

আপনার যদি কোনও শেল ইউটিলিটিগুলির প্রয়োজন না হয় তবে একটি স্ট্যাটিকালি লিঙ্কযুক্ত mkshবাইনারি (যেমন লিনাক্স / i386 এ klibc - 130K এর বিপরীতে) কাজ করবে। আপনি একটি প্রয়োজন /linuxrcবা /initবা /sbin/initস্ক্রিপ্ট যে শুধু কল mksh -l -T!/dev/tty1একটি লুপ মধ্যে:

#!/bin/mksh
while true; do
    /bin/mksh -l -T!/dev/tty1
done

-T!$ttyবিকল্প একটি সাম্প্রতিক উপরন্তু হয় mkshএটি বলে দেওয়া টার্মিনাল-এ একটি নতুন শেল ডিম এবং এটি জন্য অপেক্ষা করতে। (যে আগে, সেখানে মাত্র ছিল -T-একটি প্রোগ্রাম এবং dæmonise করার -T$ttyএকটি টার্মিন্যালে ডিম কিন্তু তার জন্য অপেক্ষা করবেন। এই এত সুন্দর ছিল না।) -lবিকল্প কেবল বলা হয়েছে যে সব লগ-ইন শেল চালানোর জন্য (যা লেখা আছে /etc/profile, ~/.profileএবং ~/.mkshrc)।

এটি আপনার টার্মিনালটি /dev/tty1বিকল্প হিসাবে ধরে নিয়েছে । (আরও যাদু দিয়ে, টার্মিনালটি স্বয়ংক্রিয়ভাবে সন্ধান করা যাবে /dev/consoleyou আপনাকে পুরো কাজের নিয়ন্ত্রণ দেবে না))

/devএটি কাজ করার জন্য আপনার কয়েকটি ফাইল দরকার :

  • আপনার / dev / কনসোল
  • আপনার / dev / নাল
  • আপনার / dev / TTY
  • আপনার / dev / tty1

কার্নেল বিকল্পের সাহায্যে বুট করা ভরাটের devtmpfs.mount=1প্রয়োজনীয়তা সরিয়ে দেয় /dev, কেবল এটি একটি ফাঁকা ডিরেক্টরি (মাউন্টপয়েন্ট হিসাবে ব্যবহারের জন্য উপযুক্ত) হতে দিন।

আপনি সাধারণত কিছু ইউটিলিটি (ক্লিবিসি, ব্যস্তবক্স, বিস্টিবক্স, টয়বক্স বা টুলবক্স থেকে) রাখতে চান তবে এগুলি সত্যই প্রয়োজন হয় না।

আপনি একটি ~/.mkshrcফাইল যুক্ত করতে চাইতে পারেন , যা $ PS1 এবং কিছু বেসিক শেল অ্যালিয়াস এবং ফাংশন সেট করে।

আমি একবার mksh (এবং এর নমুনা mkshrc ফাইল) এবং klibc-utils ব্যবহার করে লিনাক্স / m68k এর জন্য 171K সংক্ষেপিত (371 কে কমপ্রেসড) আরআরআার্ড তৈরি করেছি। (এটি টি-এর আগে ছিল! শেলের সাথে যুক্ত করা হয়েছিল, যদিও এটি লগইন শেলটির /dev/tty2পরিবর্তে চালু করে এবং কনসোলে একটি বার্তা প্রতিধ্বনিত করে যা ব্যবহারকারীকে টার্মিনাল স্যুইচ করতে বলে।) এটি দুর্দান্ত কাজ করে।

এটি সত্যিই বেয়ার ন্যূনতম সেটআপ। অন্যান্য উত্তরগুলি আরও কিছু বৈশিষ্ট্যযুক্ত সিস্টেমের জন্য দুর্দান্ত পরামর্শ সরবরাহ করে। এটি একটি বাস্তব বিশেষ ক্ষেত্রে জিনিস।

দাবি অস্বীকার: আমি ম্যাক বিকাশকারী।


এটি একটি দুর্দান্ত উত্তর, ভাগ করে নেওয়ার জন্য ধন্যবাদ এবং এছাড়াও ধন্যবাদ mksh
জোশুআরআলি

2

সর্বনিম্ন আরম্ভ হ্যালো ওয়ার্ল্ড প্রোগ্রাম ধাপে ধাপে

এখানে চিত্র বর্ণনা লিখুন

অসীম লুপে শেষ হওয়া কোনও নির্ভরতা ছাড়াই একটি হ্যালো ওয়ার্ল্ড সংকলন করুন। 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, যা প্রক্রিয়াটি স্বয়ংক্রিয় করতে সহায়তা করার জন্য লিনাক্স কার্নেল উত্স ট্রি থেকে প্রাপ্ত একটি স্ক্রিপ্ট।

পরবর্তী পদক্ষেপ: ব্যাসিবক্স সেটআপ করুন যাতে আপনি সিস্টেমের সাথে যোগাযোগ করতে পারেন: https://github.com/cirosantilli/runlinux

উবুন্টু 16.10, QEMU 2.6.1 এ পরীক্ষিত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.