ড্রাইভার মডিউলগুলি স্বয়ংক্রিয়ভাবে লোড এবং আনলোড করা হচ্ছে?


15

উবুন্টু 14.04-এ, আমি দেখতে পেলাম যে আমি যখন আমার বাহ্যিক ওয়্যারলেস অ্যাডাপ্টারটি প্লাগ না করি তখন এর মডিউলটি rt2800usbএখনও দেখানো হয় lsmod

  1. স্বয়ংক্রিয়ভাবে ড্রাইভার মডিউল লোড কখন ঘটে? এটি কি যখন ডিভাইসটি কম্পিউটারের সাথে সংযুক্ত থাকে, বা কখন ওএস বুট হয়?

  2. স্বয়ংক্রিয়ভাবে ড্রাইভার মডিউল আনলোড কখন ঘটে? এটি কি যখন ডিভাইসটি কম্পিউটারের সাথে সংযোগ বিচ্ছিন্ন হয়, বা ওএস বন্ধ হয়ে যায়?

উত্তর:


13

যখন কার্নেল একটি নতুন ডিভাইস সনাক্ত করে, এটি প্রোগ্রামটি চালায় modprobeএবং এটিকে এমন একটি নাম দেয় যা ডিভাইসটি সনাক্ত করে। বেশিরভাগ ডিভাইস বিক্রেতার এবং মডেলের জন্য নিবন্ধিত নম্বরগুলির মাধ্যমে সনাক্ত করা হয়, যেমন পিসিআই বা ইউএসবি শনাক্তকারী। modprobeপ্রোগ্রাম মডিউল ওরফে টেবিল পরামর্শ যে ফাইলটি সেই নির্দিষ্ট ডিভাইসের জন্য চালক রয়েছে নাম খুঁজে। ফাইল সিস্টেম এবং ক্রিপ্টোগ্রাফিক অ্যালগরিদমের মতো হার্ডওয়্যার ডিভাইস নয় এমন জিনিসগুলির জন্য ড্রাইভারদের ক্ষেত্রে একই জাতীয় নীতি প্রযোজ্য। আরও তথ্যের জন্য, দেখুন ডিবিয়ান রিবুট হওয়ার পরে সিরিয়াল পিসিআই কার্ড সনাক্ত করে না/lib/modules/VERSION/modules.alias

একবার Modprobe সনাক্ত করেছে যে কোন মডিউল ফাইল ( .ko) -এর জন্য অনুরোধ করা ড্রাইভার রয়েছে, এটি কার্নেলের মধ্যে মডিউল ফাইল লোড করে: মডিউল কোডটি গতিশীলভাবে কার্নেলের মধ্যে লোড করা হয়। মডিউলটি যদি সফলভাবে লোড হয় তবে এটি তালিকা থেকে প্রদর্শিত হবে lsmod

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

ম্যানুয়ালটি স্বয়ংক্রিয়ভাবে আদেশ modprobeবা insmodকমান্ডের সাহায্যে লোড করার অনুরোধ করাও সম্ভব । বেশিরভাগ বিতরণে একটি সূচনা স্ক্রিপ্ট অন্তর্ভুক্ত যা তালিকাভুক্ত মডিউলগুলি লোড করে /etc/modules। মডিউলগুলি লোড করার জন্য আরেকটি উপায় হ'ল যদি তারা মডিউলটির নির্ভরতা হয়: যদি মডিউল A মডিউল বি এর উপর নির্ভর করে, তবে এ modprobe Aলোড করার আগে বি লোড করে B

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


ধন্যবাদ। আমি পরিবর্তন করা হয়েছে /etc/modulesrt2800usbএর আউটপুটে রয়েছে lsmodএবং এর অর্থ কি বুট করার পরে আমি তার ডিভাইসটি আমার কম্পিউটারের সাথে সংযুক্ত করেছি?
টিম

1
@ টিম যদি মডিউলটি লোড হয়, এবং আপনি এটি স্পষ্টভাবে লোড করেননি, এবং এটিতে তালিকাভুক্ত করা হয়নি /etc/modules, তবে হ্যাঁ, সম্ভবত মডিউলটি লোড হওয়ার কারণ হ'ল ডিভাইসটি কোনও পর্যায়ে উপস্থিত ছিল।
গিলস 'তাই মন্দ হওয়া বন্ধ করুন'

5

প্রারম্ভিক র‌্যাম ডিস্ক ওরফে আরআরডি-র মাধ্যমে বুট করার সময় মডিউলগুলি লোড হয় । যুক্তি বিভাগে বলা হয়েছে:

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

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


  1. মডিউল rt2800usbসবসময় থেকে bootup লোড হবে কারণ মডিউল অন্তর্ভুক্ত করা হয় initramfs -র যে গিলেজ পরিচিত। Initramfs টি initrd এর উত্তরসূরি, সুতরাং এটি সর্বদা প্রদর্শিত হবে lsmod। নোট করুন যে আপনি modprobeমডিউলের নাম ব্যবহার করে কার্নেলে একটি নতুন সংকলিত মডিউল সন্নিবেশ করতে পারেন ।

পরীক্ষার হিসাবে আপনার সিস্টেমটি আপনার ওয়্যারলেস অ্যাডাপ্টারটি প্লাগযুক্ত দিয়ে পুনরায় বুট করুন। যদি সবকিছু ঠিকঠাক হয় তবে মডিউলটি আর lsmodআউটপুটে তালিকাভুক্ত করা হবে না কারণ বুটআপের সময় initramfs দ্বারা সনাক্তকরণ প্রক্রিয়া শুরু হয়েছিল এবং প্রো এস-এসটিএমটি অনুসন্ধানের সময় ডিভাইসটি খুঁজে পায় নি, এবং মডিউলটি র‌্যাম থেকে সরিয়ে ফেলা হয়েছিল।

  1. যখন একটি সিস্টেম চলমান একটি মডিউল মুছে ফেলার জন্য, আপনি যেমন কমান্ড ব্যবহার করতে পারেন rmmod, অথবা modprobe -rমডিউল নামে অনুসরণ করে। পরবর্তী বুটে মডিউলটি পুনরায় লোড হবে। উপরে দেখুন. বেশিরভাগ ক্ষেত্রে মডিউলটি গতিশীলভাবে মুছে ফেলা হয় না, কারণ এটি হটপ্লাগিং নিষ্ক্রিয় করবে, অর্থাত একবার মডিউলটি ডিভাইসটি ব্যবহার করে এটি পুনরায় প্লাগ ইন করা অবস্থায় আবার সনাক্ত করা যায় না।

মডিউলটি থেকে মুছে ফেলার জন্য lsmod, আপনাকে নির্বাচিত মডিউলটি ছাড়াই কার্নেলটি পুনরায় সংশোধন করে চিত্রটি পুনর্নির্মাণ করে তৈরি করা initramfs চিত্র থেকে তা সরিয়ে ফেলতে হবে। এটি করার ফলে বলা মডিউলটির সমস্ত সনাক্তকরণ অক্ষম করে।


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

আমি এখানে সম্মত হওয়া সত্ত্বেও, তিনি একটি মডিউল আনলোড এবং লোড করার বিষয়ে কথা বলছিলেন যা উবুন্টু র‌্যাম ডিস্কটিকে পুনরায় কনফিগার করার জন্য বেছে না নিলে এটি করা যায় না, যা প্রস্তাবিত নয় কারণ উবুন্টু প্রতিটি মডিউলগুলি প্রতিটি কার্নেল আপডেটে র‌্যামে লোড করতে বেছে নেয়। সমস্ত মডিউল প্রতিটি সময় লোড করা হয়, সেগুলি কেবল সমস্ত ব্যবহৃত হয় না।
eyoung100

2
না, প্রশ্নটি কার্নেলের মধ্যে একটি মডিউল লোড এবং আনলোড সম্পর্কে। আপনার আসল উত্তর বা আপনার সংশোধিত উত্তরের কোনও উত্তরই তা দেয় না। এই প্রশ্নের সাথে ইন্ট্রামফগুলি অপ্রাসঙ্গিক (বা সর্বাধিক পেরিফেরিয়ালি প্রাসঙ্গিক)।
গিলস 'দুষ্ট হওয়া বন্ধ করুন' ২১:০২

@ গিলস কি এটি আরও ভাল ??
eyoung100

1
@ আইওং 100, আমি গিলসের সাথে একমত ইনিরামফের আলোচনা প্রশ্নের সাথে প্রাসঙ্গিক নয়। মডিউলগুলি সাধারণত /sysসিস্টেমে পাওয়া যায় এমন ডিভাইসগুলির জন্য ডিভাইসগুলি গণনা করে এবং লোড করে লোড করা হয়। এটি ঘটে যখন ডিভাইসটি বুটে উপস্থিত থাকে বা পরে গরম প্লাগ হয়। udevinitramfs / initrd এর চেয়ে এর সাথে আরও অনেক কিছু করার আছে এবং সমস্ত বা বেশিরভাগ, কেবলমাত্র কিছু মডিউলই initramfs এ অনুলিপি করা হয়েছে (একটি কনফিগারেশন অপশন /etc/initramfs-tools/initramfs.conf) বিশেষভাবে প্রাসঙ্গিক নয়।
সেলেদা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.