কীভাবে একটি একক অ্যাপ্লিকেশন চালিত একটি লিনাক্স সিস্টেম তৈরি করবেন?


17

আমি একটি লিনাক্স অ্যাপ্লিকেশন চালানোর চেষ্টা করছি এবং আমি যা চালাতে চাই তা হ'ল এটিই একটি অ্যাপ্লিকেশন boot আমার নেটওয়ার্কিং দরকার এবং এগুলি সবই (কোনও প্রদর্শন, পেরিফেরিয়াল ইত্যাদি নেই)। আমি অন্য কোনও অ্যাপ্লিকেশন চলমান চাই না যাতে আমি চালিত অ্যাপ্লিকেশনটির সিপিইউ এর 100% থাকে। এটা কি সম্ভব?


এটি আপনার ওএসকে এখনও কিছু সংস্থান দরকার বলে 100% সিপিইউ দখল করতে সক্ষম হবে না।
n0pe

@ ম্যাক্সম্যাকি স্পষ্টতই, তবে আমি চাই ওএস কেবলমাত্র অ্যাপ্লিকেশনটির পক্ষে (উদাহরণস্বরূপ নেটওয়ার্কিংয়ের উদ্দেশ্যে) গ্রহণ করবে।
dschatz

1
আপনি বুঝতে পেরেছেন যে এমনকি কোনও ডেস্কটপ এনভায়রনমেন্ট বোঝাই রয়েছে, কিন্তু সেখানে অলস বসে আছেন, এটি কোনও সিপিইউ সময় সঠিকভাবে ব্যবহার করছে না? এবং এটি ব্যবহার করা মেষটি যদি অন্য অ্যাপ্লিকেশনগুলির কাছে দাবি করে তবে তা অদলবদল হওয়া সাপেক্ষ।
psusi

@dschatz আপনি যদি আপনার প্রশ্নে আরও বিশদ অন্তর্ভুক্ত করেন তবে এটি সাহায্য করবে। আপনি কী অ্যাপ্লিকেশনটি চালাতে চান, কীভাবে এটি সম্পাদন করতে চান এবং কী ধরণের হার্ডওয়্যার ব্যবহার করছেন সে সম্পর্কে আমাদের আরও জানানোর মতো।
এনএন

যদি সম্ভব হয় তবে আমি জানতে চাই আপনি কেন এটি চান। আমি যা বুঝি তা থেকে, আপনি কেবল অ্যাপ্লিকেশন চালাতে ওএস থেকে সমস্ত কিছু সরিয়ে ফেলতে চান (কনসোল অন্তর্ভুক্ত)। পারফরম্যান্স লাভগুলি প্রান্তিক হবে তাই সেই সমস্ত কাজ করার কী লাভ?
এনএম্যাট

উত্তর:


13

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

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

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


3

আপনি init=/path/to/myappবুটলোডারটিতে সংজ্ঞায়িত পরামিতি দিয়ে কার্নেল শুরু করতে পারেন ।


2
এটি একটি বরং চরম সমাধান। ব্যবহারকারীর অ্যাপ্লিকেশনটির সাথে স্টার্টআপ স্ক্রিপ্টটি প্রতিস্থাপনের ক্ষেত্রে অ্যাপ্লিকেশনটি নেটওয়ার্কিং ছাড়াই চলবে, রুটফেস মাউন্ট করা (কোনও সিএসএফস বা প্রোক বা টিএমপিএফ) ব্যতীত অন্য কোনও ফাইল সিস্টেম ছাড়াই, এবং সম্ভবত কিছু ডিভাইস নোড তৈরি হবে না।
d

2
@ সাউডস্ট: সম্পূর্ণরূপে একমত তবে প্রশ্নটিও কিছুটা চরম ছিল ... :-)
মাইচা আরাজার

2

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


2
হুম, আমি সত্যিই কেবল নেটওয়ার্কিং দিয়ে একটি একক অ্যাপ্লিকেশন চালানোর চেষ্টা করছি। আমি কোনও এক্স এবং অন্যান্য কয়েকটি অ্যাপ্লিকেশন যতটা সম্ভব চলমান চাই না। আমি দেখতে পাচ্ছি না কীভাবে এটি সমস্ত অপ্রয়োজনীয় ডেমনগুলি চালানো থেকে সীমাবদ্ধ করে।
dschatz

অ্যাপ্লিকেশন এক্স ছাড়া চালানো যেতে পারে?
যাত্রামন গীক

2

কার্নেল বুট করার পরে আপনি অবশ্যই একটি ব্যবহারকারী অ্যাপ্লিকেশন চালাতে পারবেন। তবে এতে সিপিইউ এর 100% থাকবে না কারণ কার্নেল-সম্পর্কিত আরও কিছু প্রক্রিয়া রয়েছে যা অবশ্যই বিদ্যমান। এটি সাধারণত এমবেডড-লিনাক্স ডিভাইসগুলিতে করা হয়, যেমন ওয়্যারলেস রাউটারগুলিতে। মাল্টি-থ্রেড অ্যাপ্লিকেশনটির জন্য আমার প্রথম হাতের অভিজ্ঞতাও রয়েছে।

কার্নেলটি বুট হয়ে গেলে, একটি সূচনা বা প্রারম্ভিক স্ক্রিপ্টটি চালিত হয়। লিনাক্স রানলেভেলস এবং init প্রক্রিয়া পড়ুন। বিভিন্ন স্টার্টআপ স্কিম ব্যবহার রয়েছে তাই সুনির্দিষ্ট হওয়া সম্ভব নয়। তবে লিনাক্স আপনাকে আপনার অবস্থার জন্য ঠিক কোন অ্যাপ্লিকেশন এবং ডেমোনগুলি কার্যকর করবে তা কনফিগার করতে দেয়। মূলটিতে স্টার্টআপ ফাইল ব্যতীত যে ফাইলগুলি সংশোধন করা দরকার সেগুলি হ'ল / ইত্যাদি এবং বিশেষত /etc/init.d

বিটিডাব্লু যদি না আপনি সুপারপ্রগ্রামের কিছু লোক হন বা কোনও রিমোট জিডিবি সার্ভার চালু হওয়ার আগে আপনার অ্যাপ্লিকেশনটির জন্য আপনাকে কিছুটা ডিবাগ কনসোল (পিসি কনসোল বা সিরিয়াল বন্দর) প্রয়োজন হবে। এটি আপনাকে সেগ ত্রুটি, বাস ত্রুটি এবং দৃ fail় ব্যর্থতা সম্পর্কে অবহিত করার অনুমতি দেবে। সুতরাং "নেটওয়ার্কিং" এর পাশাপাশি কিছু পেরিফেরাল থাকার পরিকল্পনা করুন।


1

কিছু সিস্টেম অ্যাপ্লিকেশন রয়েছে যা অবশ্যই চালিত হওয়া উচিত, এগুলি ছাড়াও নিশ্চিতভাবেই আপনি সেই কম্পিউটারের বাকী কম্পিউটার সংস্থানগুলি উত্সর্গ করতে পারেন। খুব ন্যূনতম পাওয়ার জন্য আপনি টিনিকোর লিনাক্স ইত্যাদির মতো ছোট্ট লিনাক্স ডিস্ট্রোগুলিকে দেখে নিতে পারেন etc.

এছাড়াও এটি অ্যাপ্লিকেশনের উপরও নির্ভর করে, নেটওয়ার্ক ছাড়াও কী পরিষেবা প্রয়োজন requires

আমি মনে করি আপনি যদি আরও নির্দিষ্ট তথ্য সরবরাহ করতে পারেন তবে আপনি আরও বিশদ প্রতিক্রিয়া পাবেন।

কোন ধরণের অ্যাপ ইত্যাদি পছন্দ করুন


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

টিনিকোরের মাইক্রো কোর নামে একটি ছোট ভাই রয়েছে। জিইউআই নেই, এটি পরীক্ষা করে দেখুন।
n0pe

1
@ ম্যাক্সম্যাকি আমি আসলে টিসিপি / আইপি স্ট্যাকের বাইরে মেশিনে কোনও ইন্টারফেস চাই না। অ্যাপ্লিকেশনটি কোনও বন্দরে অবরুদ্ধ হতে পারে এবং সেই বন্দরে প্রেরিত টিসিপি প্যাকেটের মাধ্যমে নিয়ন্ত্রণ করা যায়।
dschatz

1
আমি সামান্য পরিষেবাগুলি চলমান (এমন একটি linuxhelp.blogspot.com/2006/04/… দেখুন ) এবং আপনার অ্যাপ্লিকেশন ব্যতীত অন্য কোনও কিছু এবং এর নির্ভরতা ইনস্টল করা আছে এমন পরিবেশের প্রস্তাব দেব ।
n0pe

1
@dschatz ভাল, তারপরে আপনাকে কার্নেল হ্যাক করতে হবে, অন্য সমস্ত কিছু মুছে ফেলতে হবে এবং এতে আপনার অ্যাপ্লিকেশনটি সংকলন করতে হবে। কোন বাশ আর কিছু না। শুধু আপনার অ্যাপ্লিকেশন .. লল।
বাকিটন

1

আপনি যদি লিনাক্স কার্নেল, নেটওয়ার্কিং এবং আপনার অ্যাপ্লিকেশন ব্যতীত সত্যিই কিছু না চান তবে এটি করার একমাত্র উপায় হ'ল:

  • আপনার অ্যাপ্লিকেশনটিকে কার্নেল মডিউল তৈরি করতে হবে - এটি ডিবাগ এবং ভাল পরীক্ষা করা হয়েছে তা নিশ্চিত করুন। এই কার্নেল মডিউলটি সাধারণত ব্যবহারকারী স্পেসের মাধ্যমে সম্পন্ন জিনিস যেমন সেট ইন্টারফেসের আইপি অ্যাড্রেস এবং সমস্ত ভাল স্টাফ শুরু করতে হবে।
  • আপনাকে make menuconfigনিজের কাস্টম কার্নেলটি ডাউনলোড এবং কনফিগার করতে হবে ( সিস্টেম) এবং নেটওয়ার্কিং চালনার সাথে সম্পর্কিত নয় এমন সমস্ত বৈশিষ্ট্য সরিয়ে ফেলতে হবে। আপনি স্তরটি ব্লক করতে অক্ষম করতে চাইবেন, সাম্প্রতিক কার্নেলের মাধ্যমে কীভাবে এটি করবেন তা আমি জানি না make menuconfig
  • তারপরে আপনাকে আপনার মডিউলটি কার্নেলের সাথে অন্তর্ভুক্ত করতে হবে যাতে এটি কার্নেলের অংশ হিসাবে অন্তর্ভুক্ত হয় তবে লোডযোগ্য মডিউল নয়। আপনি সম্ভবত উপরের পদক্ষেপে লোডযোগ্য মডিউলগুলি অক্ষম করবেন। কার্নেল মডিউল তৈরি করতে আপনি যদি যথেষ্ট সি / সি ++ জানেন তবে এটি আপনার পক্ষে সহজ হওয়া উচিত।
  • আতঙ্কিত কর্নেলের যে কোনও অংশই প্যানিকগুলি তা initকরতে ব্যর্থ হলে আপনাকে পরিবর্তন করতে হবে, বা 1 অতিরিক্ত ব্যবহারকারী-স্থান প্রক্রিয়া সহ বেঁচে থাকার জন্য প্রস্তুত থাকতে হবে।

আমি জানি যে কার্নেল মডিউলগুলির জন্য প্রক্রিয়া তৈরি করা সম্ভব - ps auxএকটি সাধারণ একটি সাধারণ সিস্টেমে অনেকগুলি দেখায় (তারা সমস্ত বন্ধনীতে থাকে)। আপনি সম্ভবত আপনার মডিউলটি কার্নেল প্রক্রিয়া তৈরি করতে চান। আপনার ছাড়াও কার্নেল দ্বারা নির্মিত সমস্ত প্রক্রিয়া থেকে মুক্তি পাওয়ার জন্য আপনাকে থ্রেড [ kthreadd], পাওয়ার ম্যানেজমেন্ট [ pm], ইভেন্ট স্তর [ events] এবং অন্যান্য অক্ষম করতে হবে ।


আপনি যদি কার্নেল +1 ব্যবহারকারীর স্থান প্রক্রিয়াটির আরও কার্যকর সেটআপ চান, তবে এটি সম্ভব।

লিনাক্সের একটি কার্নেল কমান্ড লাইন বিকল্প রয়েছে init=- এটি লোডিংয়ের পরে কার্নেলটি শুরু হবে। প্রোগ্রামটি অবশ্যই মূল ডিভাইসে থাকা উচিত root=যা initrd বা আপনার বুটলোডার দ্বারা লোড করা হয়েছে specified

যদি এই প্রোগ্রামটি প্রস্থান করে, লিনাক্স আতঙ্কিত হবে, তাই এটি কখনও প্রস্থান না করে তা নিশ্চিত করুন।

Linux- র অনেক আধুনিক ডিস্ট্রিবিউশন এটি সেটআপ তাই একটি আছে initinitrd- র মধ্যে প্রোগ্রাম আরম্ভ করার পূর্বে, কিছু অতিরিক্ত ব্যবহারকারী-স্পেস আরম্ভের করে /sbin/initবা /sbin/systemd। আপনার ডিস্ট্রো এখানে কী করে তা আপনাকে খুঁজে বের করতে হবে (ডেবিয়ানের জন্য তথ্য এখানে রয়েছে ) এবং আপনি চূড়ান্ত "হ্যান্ডঅফ" প্রোগ্রামটি নির্দিষ্ট করতে পারেন এবং সেখান থেকে আপনি এটিকে initবা তার পরিবর্তে আপনার অ্যাপ্লিকেশন শুরু করতে বলতে পারেন systemd

systemdবিল্ডিং /dev, হোস্ট-নেম সেট করা এবং অন্যান্য জিনিসগুলির মতো প্রচুর মৌলিক কার্যকারিতা পরিচালনা করে , সুতরাং আপনি নমনীয় হলে পরিবর্তে systemdকোনও একক প্রক্রিয়া সঞ্চার করার জন্য কনফিগারেশনটি সন্ধান করতে পারেন এবং এটি ব্যর্থ হলে optionচ্ছিকভাবে এটি পুনরায় চালু করতে পারেন। আমি যদি ভুল না হয়ে থাকি তবে এটি সিঙ্গল-ব্যবহারকারী বা পুনরুদ্ধার মোডের জন্য এটি মূলত করে - এটি একটি শেল শুরু করে।

আপনার 2 প্রক্রিয়া চলবে ( systemdএবং আপনার প্রোগ্রাম) তবে আপনার প্রোগ্রামটি প্রস্থান বা ক্রাশ হয়ে গেলে সিস্টেম আতঙ্কিত হবে না।

কেবলমাত্র ডেবিয়ানের একটি হালকা ওজনের ইনস্টলটি বিবেচনা করুন - একটি "নেটিনস্ট" ইনস্টলের কার্নেল, শেল এবং একটি দম্পতি পরিষেবাগুলি ছাড়া অন্য কোনও চলমান নেই - বা ওপেনডব্লিউআরটি / এলইডিই বিবেচনা করুন - এটি লুসি জন্য একটি ডিফল্টরূপে চলমান এবং একটি ওয়েবসভার রয়েছে দম্পতি অন্যান্য পরিষেবা কিন্তু সহজেই অক্ষম disabled

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