থেকে লিনাক্স প্রোগ্রামিং ইন্টারফেস , §14.1
প্রতিটি ডিভাইস ফাইলে একটি প্রধান আইডি নম্বর এবং একটি ছোট আইডি নম্বর থাকে। প্রধান আইডি ডিভাইসের সাধারণ শ্রেণি সনাক্ত করে এবং কার্নেল দ্বারা এই ধরণের ডিভাইসের জন্য উপযুক্ত ড্রাইভার সন্ধান করতে ব্যবহৃত হয়। গৌণ আইডি অনন্যভাবে একটি সাধারণ শ্রেণির মধ্যে একটি নির্দিষ্ট ডিভাইস সনাক্ত করে। ডিভাইস ফাইলের প্রধান এবং গৌণ আইডিগুলি ls -l কমান্ড দ্বারা প্রদর্শিত হয়।
[...]
প্রতিটি ডিভাইস ড্রাইভার একটি নির্দিষ্ট বড় ডিভাইস আইডির সাথে তার সমিতিটি নিবন্ধভুক্ত করে এবং এই সমিতিটি ডিভাইসের বিশেষ ফাইল এবং ডিভাইসের মধ্যে সংযোগ সরবরাহ করে। কার্নেলটি যখন ডিভাইস ড্রাইভারের সন্ধান করে তখন ডিভাইস ফাইলটির নামের কোনও মিল নেই।
এই পুরাতন (2001) লিনাক্স ডিভাইস ড্রাইভার (2 ই) অধ্যায়টিও দেখুন ।
উদাহরণস্বরূপ উদ্দেশ্যটি হ'ল মেজর: ডিভাইস টু ডিভাইস: প্রতিটি ধরণের ডিভাইসের জন্য উদাহরণ হিসাবে একটি অনন্য ম্যাপিং সরবরাহ করা। কঠোরভাবে, আপনার কাছে একই মেজর সহ দুটি স্বতন্ত্র ডিভাইস থাকতে পারে: অপ্রাপ্তবয়স্ক, যতক্ষণ না একজন চর এবং একটি ব্লক থাকে:
# ls -l /dev/ram1 /dev/mem
crw-r----- 1 root kmem 1, 1 Jan 1 1970 /dev/mem
brw-rw---- 1 root disk 1, 1 Jan 1 1970 /dev/ram1
লিনাক্স তারিখে, একটি সিস্টেম সময় যে কোনো স্থানে প্রধান: ছোটখাট সংখ্যা ডিভাইস প্রতিটি টাইপ জন্য অনন্য। সংখ্যাগুলি তবে সময়ের সাথে সাথে পরিবর্তিত হতে পারে এবং বিভিন্ন লিনাক্স সিস্টেমের (একই ডিস্ট্রিবিউশন, কার্নেল এবং হার্ডওয়্যার) জুড়ে একই হওয়া দরকার না। নোট করুন যে অক্ষর এবং ব্লক ডিভাইসগুলির পৃথক পৃথক নম্বর রয়েছে।
Icallyতিহাসিকভাবে ডিভাইস মেজরগুলি (বেশিরভাগ) স্ট্যাটিক্যালি একটি রেজিস্ট্রি দিয়ে বরাদ্দ করা হয়েছিল ( কার্নেলের উত্সে এখনও অবিকৃত হলেও এটি উপস্থিত রয়েছে Documentation/devices.txt
)। এই দিনগুলিতে অনেকগুলি ডিভাইস গতিশীলভাবে বরাদ্দ করা হয় , এটি উদেব দ্বারা পরিচালিত হয় এবং ম্যাপিংগুলি এর মধ্যে দেখতে পাওয়া যায় /proc/devices
। স্থির ডিভাইসগুলি এখনও বিদ্যমান incude/uapi/linux/major.h
(সম্প্রতি থেকে সরানো হয়েছে include/major.h
)
এখন যদিও প্রধান: গৌণ সংমিশ্রণটি নির্দিষ্ট ডিভাইসের উদাহরণগুলি স্বতন্ত্রভাবে সনাক্ত করে, আপনাকে একই ডিভাইসে উল্লেখ করা একাধিক ডিভাইস নোড (ফাইল) তৈরি করা বাধা দেওয়ার কিছুই নেই। এমনকি /dev
এগুলিতে তৈরি করতে হবে না (তবে তাদের এমন একটি ফাইল সিস্টেমে থাকতে হবে যা ডিভাইস নোডগুলি তৈরি করতে সহায়তা করে এবং nodev
বিকল্পটি মাউন্ট করে না )।
একটি সাধারণ ব্যবহার ক্রুটে নকল শূন্য, নাল এবং এলোমেলো ডিভাইস তৈরি করছে:
# find /dev /var/chroot -regextype posix-extended -regex ".*/(zero|null|random)" -type c |
xargs ls -l
crwxrwxrwx 1 root root 1, 3 2012-11-21 03:22 /dev/null
crw-rw-r-- 1 root root 1, 8 2012-05-07 10:35 /dev/random
crw-rw-rw- 1 root root 1, 5 2012-11-21 03:22 /dev/zero
crwxrwxrwx 1 root root 1, 3 2012-11-21 03:22 /var/chroot/sendmail/dev/null
crw-rw-r-- 1 root root 1, 8 2012-05-07 10:35 /var/chroot/sendmail/dev/random
crw-rw-rw- 1 root root 1, 5 2012-11-21 03:22 /var/chroot/sendmail/dev/zero
নামগুলি কেবলমাত্র ডাকনাম, কার্নেল বেশিরভাগ নাম বা অবস্থানের বিষয়ে খুব বেশি যত্ন করে না, এটি বড় সংখ্যাটির বিষয়ে চিন্তা করে যাতে এটি সঠিক ড্রাইভারটি নির্বাচন করতে পারে, এবং ড্রাইভার (সাধারণত) সংখ্যালঘু সংখ্যা সম্পর্কে যত্নশীল যাতে এটি নির্বাচন করতে পারে সঠিক উদাহরণ।
বেশিরভাগ নামগুলি সাধারণভাবে কনভেনশন হয় (যদিও কিছু পসিক্স দ্বারা সংজ্ঞায়িত করা হয় )। আরও মনে রাখবেন যে একটি ডিভাইস একাধিক বড় সংখ্যার জন্য নিবন্ধন করতে পারে, sd
ড্রাইভারটি পরীক্ষা করতে পারে /proc/devices
; একটি ড্রাইভার মডিউল নাম ( .ko
) ডিভাইসের নামের মতো হতে হবে না এবং ডিভাইস নোডের মতো হওয়া উচিত নয় /dev
এবং একক ড্রাইভার মডিউল একাধিক লজিকাল / শারীরিক ডিভাইস বা ডিভাইসের নাম পরিচালনা করতে পারে।
পুনরুদ্ধার করার জন্য: আপনার কাছে দুটি বা ততোধিক ডিভাইস নোড থাকতে পারে ( /dev/
বা অন্য কোথাও) যা একই মেজর: সংখ্যালঘু সংখ্যা রয়েছে তবে তারা যদি একই ধরণের হয় তবে তারা একই ডিভাইসকে উল্লেখ করে। আপনার এক ড্রাইভার থাকতে পারে যা একাধিক বড় উদাহরণগুলি পরিচালনা করতে পারে তবে কার্নেলের মধ্যে এবং ড্রাইভারের মধ্যে প্রতিটি প্রকারের জন্য (চর বা ব্লক) বড়: ছোট ডিভাইসটি নির্দিষ্ট ডিভাইস (মেজর) এবং একটি নির্দিষ্ট উদাহরণকে বোঝার জন্য নেওয়া হয় ( ডিভাইসের গৌণ)।
আপনার কাছে একই ধরণের এবং মেজর সহ দুটি ডিভাইস নোড থাকতে পারে না: নাবালক এবং তাদের দুটি পৃথক যৌক্তিক বা শারীরিক ডিভাইস অ্যাক্সেস করার প্রত্যাশা। কোনও ডিভাইসটি যখন কার্নেল অ্যাক্সেস করা হচ্ছে তখন প্রকার এবং প্রধান সংখ্যার (এবং ডিভাইস নোড নামের উপর ভিত্তি করে নয়) ভিত্তিতে একটি ড্রাইভার নির্বাচন করুন এবং কনভেনশন দ্বারা সংখ্যালঘু সংখ্যক নির্ধারিতভাবে একটি নির্দিষ্ট উদাহরণ বা উপ-ফাংশন নির্বাচন করে।
আপডেট
কিছু আকর্ষণীয় ইতিহাস এবং কিছু * বিএসডি দৃষ্টিকোণটি পল-হেনিং কাম্পের 2002 বিএসডিসনের উপস্থাপনায় পাওয়া যাবে:
https://www.usenix.org/legacy/events/bsdcon/ful_papers/kamp/kamp_html/
আপনি 1978 (আলকাটেল-লুসেনের সৌজন্যে, বেল সিস্টেম টেকনিক্যাল জার্নাল জুলাই-আগস্ট 1978) -র সময়টি পিছনে ফিরে এলে ' ইউনিক্স টাইম শেয়ারিং সিস্টেম ' এটিকে পরিষ্কারভাবে নির্ধারণ করেছে (p1937):
ডিভাইসগুলি একটি প্রধান ডিভাইস নম্বর, একটি ছোট ডিভাইস নম্বর এবং একটি শ্রেণি (ব্লক বা চরিত্র) দ্বারা চিহ্নিত করা হয়। প্রতিটি শ্রেণীর জন্য, ডিভাইস ড্রাইভারদের মধ্যে এন্ট্রি পয়েন্টগুলির একটি অ্যারে থাকে। নির্দিষ্ট ডিভাইস ড্রাইভারের জন্য কোড কল করার সময় প্রধান ডিভাইস নম্বরটি অ্যারে সূচক করতে ব্যবহৃত হয়। গৌণ ডিভাইস নম্বরটি আর্গুমেন্ট হিসাবে ডিভাইস ড্রাইভারকে দেওয়া হয়। ড্রাইভারের দ্বারা চিহ্নিত করা ব্যতীত এই সংখ্যালঘু সংখ্যার কোনও তাত্পর্য নেই। সাধারণত, ড্রাইভার বেশ কয়েকটি অভিন্ন শারীরিক ডিভাইসগুলির মধ্যে একটিতে অ্যাক্সেস করতে সংখ্যালঘু সংখ্যাটি ব্যবহার করে।