একটি লোডযোগ্যযোগ্য কার্নেল মডিউল [বন্ধ] সহ লিনাক্স 3.2.x এ একটি নতুন সিস্টেম কল যুক্ত করা হচ্ছে


11

আমি লিনাক্স কার্নেল ৩.২.x এ একটি নতুন নতুন সিস্টেম কল যুক্ত করতে চাইছি তবে লোডযোগ্যযোগ্য কার্নেল মডিউল হিসাবে (যেহেতু আমি কার্নেলটি পুনরায় পুনরায় কম্পাইল করতে চাই না)

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

ইহা কোনটা? এটি সম্ভব হলে কীভাবে করা হয়?


এই প্রশ্নটি এখানে অফ-টপিক: ইউনিক্স এবং লিনাক্স প্রোগ্রামিং সম্পর্কে নয়, ব্যবহার এবং প্রশাসনের বিষয়ে। আপনার স্ট্যাক ওভারফ্লোতে জিজ্ঞাসা করা উচিত । এত অস্পষ্ট হয়ে উঠবেন না: স্ট্যাক ওভারফ্লোতে যে পোস্টগুলি খুঁজে পেয়েছেন তার সাথে লিঙ্ক করুন এবং আপনি কী বেমানান বা বৈপরীত্য বলে মনে করেন তা ব্যাখ্যা করুন।
গিলস 'খারাপ হয়ে যাওয়া বন্ধ করুন'

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

1
লিনাক্স কার্নেল মেইলিং লিস্টে অসংখ্য <স্ট্রোক> শিখা </ স্ট্রোক> আলোচনা ছিল, উদাহরণস্বরূপ, রিসফর্মগুলি নিজস্ব সিস্কেল ব্যবহার করেছে, যা কিছু মূল বিকাশকারী সত্যই পছন্দ করেননি, অন্তর্ভুক্ত লিনাস। আপনার ক্ষেত্রে আমি ioctl()টাস্কটির জন্য কেবল এস ব্যবহার করব, সেগুলি সহজেই পরিবর্তনযোগ্য। আফিক এটিকে কঠোর করার পিছনে মূল কারণ হিসাবে এটি সম্ভব যে সাইককলের সংখ্যাটি একটি অত্যন্ত হার্ডকোডযুক্ত জিনিস এবং এটি ছবিতে কী হবে তা নিয়ে কেউ বিশৃঙ্খলা চায় না। কিন্তু একই কার্যকারিতাটিতে পৌঁছানোর জন্য অনেকগুলি কার্নেল ইন্টারফেস রয়েছে, উদাহরণস্বরূপ sysfs, ioctls বা এ জাতীয়।
পিটারহ - মনিকা পুনরায় ইনস্টল করুন 2'15

উত্তর:


14

এটি সম্ভব নয় কারণ সিস্টেম কল টেবিল (ডাকা sys_call_table) একটি স্থির আকারের অ্যারে। এবং এর আকারটি সংকলিত সময়ে নিবন্ধীকৃত সিস্টস্কেলের সংখ্যা দ্বারা নির্ধারিত হয়। এর অর্থ অন্য একের জন্য কোনও স্থান নেই।

আপনি উদাহরণস্বরূপ arch/x86/kernel/syscall_64.cফাইলের x86 আর্কিটেকচারের জন্য বাস্তবায়ন পরীক্ষা করতে পারেন , যেখানে sys_call_tableসংজ্ঞায়িত করা হয়েছে। এর আকার হুবহু __NR_syscall_max+1। হিসাবে __NR_syscall_maxএটি সংজ্ঞায়িত করা হয়েছে (এটি শেষ সিসকলের সংখ্যা), যেখানে সমস্ত সিস্কল সহ একটি টেবিল রয়েছে।arch/x86/kernel/asm-offsets_64.csizeof(syscalls) - 1syscall

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

আপনি যদি নতুন সিস্কেল বিকাশ করে থাকেন এবং পরীক্ষার সময় পুনরায় চালনা এড়াতে চান তবে আপনি এই কৌশলটি ব্যবহার করতে পারেন। আপনাকে আপনার নতুন সিস্টেম কলটি সংজ্ঞায়িত করতে হবে, সিস্কাল টেবিলের বিদ্যমান প্রবেশের সন্ধান করতে হবে এবং তারপরে এটি আপনার মডিউল থেকে প্রতিস্থাপন করতে হবে।

কার্নেল মডিউল থেকে এটি করা তুচ্ছ নয় কারণ কার্নেল ২. 2. sys_call_tableসংস্করণ অনুযায়ী মডিউলগুলিতে রফতানি করে না (সর্বশেষ কার্নেল সংস্করণে এই প্রতীকটি রফতানি হয়েছিল 2.5.41)।

এটিকে ঘিরে কাজ করার একটি উপায় হ'ল আপনার কার্নেলটি sys_call_tableমডিউলগুলিতে প্রতীক রফতানি করতে পরিবর্তন করা। এটি করতে, আপনাকে নিম্নলিখিত দুটি লাইন যুক্ত করতে হবে kernel/kallsyms.c( উত্পাদন মেশিনে এটি করবেন না ):

extern void *sys_call_table;
EXPORT_SYMBOL(sys_call_table);

আর একটি কৌশল হ'ল গতিশীলভাবে সিস্কেল টেবিলটি খুঁজে পাওয়া। আপনি কার্নেল স্মৃতিতে পুনরাবৃত্তি করে প্রতিটি শব্দকে একটি পয়েন্টারের সাথে পরিচিত সিস্টেম কল ফাংশনের সাথে তুলনা করেন। আপনি যেহেতু টেবিলের মধ্যে এই সিস্কলটি জানেন তার অফসেট জানেন, আপনি সারণী শুরুর ঠিকানাটি গণনা করতে পারেন।


1

দুর্ভাগ্যক্রমে আপনি লোডযোগ্য মডিউল হিসাবে কার্নেলে সিস্টেম কলগুলি যুক্ত করতে পারবেন না। প্রতিবার নতুন সিস্টেম কল যুক্ত করার সময় আপনাকে কার্নেল সংকলনের ব্যথা নিতে হবে।

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