ব্যবহারকারীর স্পেস অ্যাপ্লিকেশনগুলিকে কার্নেল শিরোনামগুলির প্রয়োজন কেন?


10

আমি একটি এম্বেড থাকা ডিভাইসের জন্য ব্যস্ত-বাক্স এবং iptables তৈরি করছি এবং তাদের জন্য অন্যতম নির্ভরতা হ'ল কার্নেল শিরোনাম।

আমি * .ko ফাইলের জন্য পুরো ফাইল সিস্টেমটি অনুসন্ধান করেছি এবং কিছুই পাই নি। সুতরাং আমি এই সিদ্ধান্তে পৌঁছেছি যে অ্যাপগুলি কোনও লোডযোগ্য ড্রাইভার (কার্নেল মডিউল) তৈরি করছে না।

কোনও ব্যবহারকারীর স্পেস অ্যাপ্লিকেশনটির জন্য কার্নেল শিরোনামের প্রয়োজনের জন্য অন্যান্য কী কী?


ব্যবহারকারীর স্পেসে থাকা কোনও কিছু যখন সিস্টেম কল দেয় তখন একটি সহজ উদাহরণটি সামনে আসে।
সামি লাইন

@ সামাইলেন আমি অনুমান করব যে সি লাইব্রেরি সিস্টেম কলগুলিতে ইন্টারফেসটি সরবরাহ করবে। আপনি যদি যা বলছেন তা যদি হয় তবে আপনি কি উদাহরণস্বরূপ সকেট খোলার জন্য কার্নেল শিরোনাম আমদানি করতে হবে না?
TheMeaningfulEngineer

সকেট (2), একটি সিস্টেম কল, কোনও পাঠাগার ফাংশন নয়, তাই হ্যাঁ।
সামি লাইন

@ সামিলেন আপনি কি একটি উদাহরণ দিতে পারেন যেখানে আপনাকে include <linux/*.h>সকেট খুলতে হবে? (আমি সাইস / সকেট এইচ এর জন্য লক্ষ্য রেখেছিলাম)
দ্য মিনিংফুল ইঞ্জিনিয়ার

উত্তর:


8

কারণ এই প্রোগ্রামগুলি কার্নেল শিরোনামে সংজ্ঞায়িত জিনিসগুলি ব্যবহার করতে নির্মিত:

busybox-1.22.1]$ egrep -RHn '^#include <linux'
modutils/modutils-24.c:194:#include <linux/elf-em.h>
include/fix_u32.h:17:#include <linux/types.h>
libbb/loop.c:11:#include <linux/version.h>
console-tools/openvt.c:23:#include <linux/vt.h>
console-tools/kbd_mode.c:23:#include <linux/kd.h>
console-tools/showkey.c:19:#include <linux/kd.h>
util-linux/blockdev.c:36:#include <linux/fs.h>
util-linux/mkfs_ext2.c:50:#include <linux/fs.h>
util-linux/mkfs_vfat.c:28:#include <linux/hdreg.h> /* HDIO_GETGEO */
util-linux/mkfs_vfat.c:29:#include <linux/fd.h>    /* FDGETPRM */
....

প্রতিটি নির্দিষ্ট সরঞ্জামের জন্য, ঠিক কী কী তা নির্ধারণ করার জন্য আপনাকে সরঞ্জামটির উত্স এবং প্রাসঙ্গিক কার্নেল শিরোনাম পড়তে হবে।

এটিকে সহজ করার জন্য আপনি কয়েকটি জিনিস মন্তব্য করা দেখতে পাচ্ছেন।

উদাহরণস্বরূপ, পেতে mkfs_vfatঅন্তর্ভুক্ত :linux/fd.hFDGETPRM

$ egrep -RHn FDGETPRM util-linux/mkfs_vfat.c
util-linux/mkfs_vfat.c:29:#include <linux/fd.h>    /* FDGETPRM */
util-linux/mkfs_vfat.c:351:         int not_floppy = ioctl(dev, FDGETPRM, &param);

আপনি সম্ভবত প্রাসঙ্গিক অপসারণ করতে #includeএবং সহজতর করার জন্য সংকলক ত্রুটিগুলি দেখতে পারেন, আপনি সতর্কতা পাবেন যে কিছু জিনিস সংজ্ঞায়িত নয় are এই জিনিসগুলি সম্ভবত কার্নেল শিরোনাম থেকে আসে।


2
1. ব্যস্তবক্স এম্বেড এবং অন্যান্য লাইটওয়েট সিস্টেমের জন্য ডিজাইন করা হয়েছে, যেখানে আপনি যতটা সম্ভব মেমরিতে কম লাইব্রেরি লোড করতে চান। আমি উত্সটি পড়িনি, তবে সম্ভবত বিবি মূলত গ্রন্থাগারগুলিকে পাশ কাটিয়ে সরাসরি কার্নেলের বিপরীতে লিঙ্ক করেছে link ২. না It এটি আপনার ব্যবহারকারীর বাইনারিটিকে কার্নেল এপিআই -র একটি সংস্করণের সাথে সংযুক্ত করে , যা পিছনের দিকে সামঞ্জস্যপূর্ণ: একটি বাইনারি সংকলনটি সম্ভবত কোনও পুরানো কার্নেলের উপর কাজ করতে পারে না (অন্তর্ভুক্ত চিহ্নগুলির উপর নির্ভর করে ... উত্স কোডটি পড়ুন) তবে তা করবে ভবিষ্যতের কার্নেলগুলির সাথে কাজ করুন।
অগ্নি

1
@ সুপ্রজামী এবিআই স্ট্যান্ডার্ড এসআইএসভি এবিআইকে মান্য করে, যা পরিবর্তন না করার পক্ষে যুক্তিসঙ্গতভাবে ধরে নেওয়া যেতে পারে; অন্যান্য জিনিসগুলির মধ্যে, এসআইএসভি এবিআই হ'ল কেন আপনি কার্নেলের সাথে আপনার পছন্দসই সংকলক (এবং সংস্করণ) দিয়ে সংযোগ স্থাপন করতে পারেন, কার্নেলের বাইনারি নিঃসরণকারী খুব সম্ভবত একই নয়।
ফায়ার

1
... এটি আলাদা কার্নেলের সাহায্যে পাঠানো ডিস্ট্রোতে ক্রট / এলএক্সসি করা সম্ভব করে তোলে। ইত্যাদি
অগ্নি

1
(স্পষ্টতার জন্য: নোট করুন যে কার্নেলের একটি বাহ্যিক এবিআই রয়েছে , যার বিষয়ে আমরা এখানে আলোচনা করছি এবং কার্নেল মডিউলগুলির মধ্যে একটি অভ্যন্তরীণ এবিআই রয়েছে, যা ঘন ঘন এবং সম্ভবত বেমানান পরিবর্তনগুলি সহ্য করে তবে এটি ব্যবহারকারী স্পেস দ্বারা দেখা যায় না এবং ব্যবহারকারীস্পেস সংকলনের সময় অপ্রাসঙ্গিক হয়) কোড।)
অজানা

1
(এটিও লক্ষ করুন যে এবিআই = / = এপিআই The কার্নেলের (বাহ্যিক) এপিআইতে উত্স কোডে উল্লিখিত চিহ্নগুলি অন্তর্ভুক্ত রয়েছে, এবং কার্নেল বিকাশকারীরা সামঞ্জস্যতা বজায় রাখতে প্রতিশ্রুতিবদ্ধ হয়েছে; যদি না প্রতীকগুলি বাস্তব বিশ্বের সফ্টওয়্যারটিতে খুব কম ব্যবহার করা হয় তবে এটি হবে) তাদের জন্য একটি অযৌক্তিক পদক্ষেপ বেমানান পরিবর্তন করতে, যদিও কোন তৃতীয় পক্ষের মান ম্যান্ডেট লিনাক্স API- এর পুরো এবং সেইজন্য কিছুই টেকনিক্যালি এটা বাধাগ্রস্থ করে)।
অগ্নি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.