ইউএসবি বাস নম্বর এবং ডিভাইস নম্বর কীভাবে বরাদ্দ করা হয়েছে?


19

যখন lsusbআমি ব্যবহার করি তখন বুঝতে পারি যে কোনও USB ডিভাইসের বাস নম্বর এবং ডিভাইস নম্বর সময়ে সময়ে পরিবর্তন হতে পারে। আমি যা বুঝি সেগুলি থেকে প্রতিটি রিবুটটিতে বাসের নম্বর পরিবর্তন করা যেতে পারে। প্রতিটি পুনরায় সংযোগে ডিভাইস নম্বর পরিবর্তন হবে।

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


6
আপনার প্রশ্ন সম্পর্কে একটি বিষয় আমাকে কৌতূহলযুক্ত করে তুলেছিল, আপনি কি সত্যিই একটি বুবুটের পরে BUS নম্বরগুলি পরিবর্তন দেখতে পেয়েছেন? আমি সর্বদা আত্মবিশ্বাসী ছিলাম যে আপনি হার্ডওয়্যার পরিবর্তন না করে বা বিআইওএস আপডেট না করলে বুসের সংখ্যা পরিবর্তন হবে না। ইউএসবি বাসগুলি কেবল পিসিআই বাসগুলির সাথে সংযুক্ত হাব / কনট্রোলার (সমস্ত ক্ষেত্রে আমি কমপক্ষে দেখেছি), এবং পিসিআই বাসের তথ্য বায়োস থেকে আসে। তবে আমি ভুল হতে পারি, কোনও উত্তর দিতে চাই না এবং এতে ফাঁক করে কথা বলি।
গ্রোচামাল

ঠিক আছে, যখন আমার কাছে হার্ডওয়্যার পরিবর্তনটি হবে ঠিক তেমন দেখাচ্ছে।
কনান

উত্তর:


23

দ্রষ্টব্য: এটি একটি লিনাক্স উত্তর; অন্যান্য কার্নেলগুলির সাথে এটির মোকাবিলা করার জন্য কিছুটা আলাদা উপায় থাকবে।

প্রসঙ্গ

পিসিআই বাস নিয়ে কথা না বলে ইউএসবি বাস নিয়ে কথা বলা মুশকিল। একটি সিপিইউ একটি ইউএসবি বাসের সাথে কথা বলতে পারে না, যা ঘটে তা হ'ল সিপিইউ একটি পিসিআই বাসের সাথে কথা বলে যার সাথে একটি ইউএসবি কন্ট্রোলার যুক্ত থাকে (এবং একটি ইউএসবি নিয়ন্ত্রণকারী / হাব যাকে lsusbইউএসবি বাস বলে ডাকে)। পিসিআই বাসগুলি সিপিইউ থেকে কতটা দূরে রয়েছে তার উপর ভিত্তি করে নাম্বার করা হয়েছে, উদাহরণস্বরূপ:

    +-----+
    | CPU |
    +-----+
       |              PCI Bus 0
 ---+--+-----------------------------+
    |                                |
+---+----+                      +----+---+
| Bridge |                      | Bridge |
+---+----+                      +----+---+
    |  PCI bus 1                     |  PCI bus 2
  --+--------+               +-------+-------------+
             |               |                     |
       Disk Controller    USB Controller      Network Card
         (Device 00)       (Device 00)         (Device 01)

সন্ধান করে man lspciআমরা নিম্নলিখিতটি দেখতে পাই:

   Slot   The  name of the slot where the device resides
          ([domain:]bus:device.function).  This tag is
          always the first in a record.

অতএব আমরা এখন পিসিআই নম্বর ব্যাখ্যা করতে জানি। এরপরে আমরা পিসিআই বাসগুলিতে সংযুক্ত ইউএসবি কন্ট্রোলারের দিকে নজর দেব। আমি বর্তমানে যে মেশিনে রয়েছি তার একটি আকর্ষণীয় ইউএসবি কনফিগারেশন রয়েছে তাই আমি এটি উদাহরণ হিসাবে ব্যবহার করব:

$ lspci -tv
-[0000:00]-+-00.0  Advanced Micro Devices, Inc. [AMD] RS780 Host Bridge
           +-01.0-[01]----05.0  Advanced Micro Devices, Inc. [AMD/ATI] RS780M [Mobility Radeon HD 3200]
           +-04.0-[02]----00.0  Qualcomm Atheros AR928X Wireless Network Adapter (PCI-Express)
           +-05.0-[03]----00.0  Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
           +-06.0-[04-06]--
           +-11.0  Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 SATA Controller [IDE mode]
           +-12.0  Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
           +-12.1  Advanced Micro Devices, Inc. [AMD/ATI] SB7x0 USB OHCI1 Controller
           +-12.2  Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller
           +-13.0  Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
           +-13.1  Advanced Micro Devices, Inc. [AMD/ATI] SB7x0 USB OHCI1 Controller
           +-13.2  Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller
           +-14.0  Advanced Micro Devices, Inc. [AMD/ATI] SBx00 SMBus Controller
           +-14.1  Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 IDE Controller
           +-14.2  Advanced Micro Devices, Inc. [AMD/ATI] SBx00 Azalia (Intel HDA)
           +-14.3  Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 LPC host controller
           +-14.4-[07]--
           +-14.5  Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI2 Controller
           +-18.0  Advanced Micro Devices, Inc. [AMD] Family 11h Processor HyperTransport Configuration
           +-18.1  Advanced Micro Devices, Inc. [AMD] Family 11h Processor Address Map
           +-18.2  Advanced Micro Devices, Inc. [AMD] Family 11h Processor DRAM Controller
           +-18.3  Advanced Micro Devices, Inc. [AMD] Family 11h Processor Miscellaneous Control
           \-18.4  Advanced Micro Devices, Inc. [AMD] Family 11h Processor Link Control

অপেক্ষার অপেক্ষায় অপেক্ষা করুন, সেসব প্লাস কী? শীর্ষে আমাদের ডোমেন এবং পিসিআই বাস রয়েছে -[0000:00](এই মেশিনটিতে কেবল একটি পিসিআই বাস রয়েছে)। এবং তারপরে আমাদের কয়েকটি বাসের সাথে সংযুক্ত ডিভাইস রয়েছে। আসুন দেখুন যেগুলি ইউএসবি ডিভাইসগুলি:

$ lspci -tv | grep -i usb
       +-12.0  Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
       +-12.1  Advanced Micro Devices, Inc. [AMD/ATI] SB7x0 USB OHCI1 Controller
       +-12.2  Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller
       +-13.0  Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
       +-13.1  Advanced Micro Devices, Inc. [AMD/ATI] SB7x0 USB OHCI1 Controller
       +-13.2  Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller
       +-14.5  Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI2 Controller

ভাল, এখন এর তুলনা করা যাক lsusb(আমি sortপরে তালিকার সন্ধান আরও সহজ করার জন্য ব্যবহার করি ):

$ lsusb | sort
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 174f:5a31 Syntek Sonix USB 2.0 Camera
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 002: ID 046d:c019 Logitech, Inc. Optical Tilt Wheel Mouse
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 002: ID 0b05:1751 ASUSTek Computer, Inc. BT-253 Bluetooth Adapter

আবার অপেক্ষা করুন। আমাদের অনুযায়ী 7 টি ইউএসবি ডিভাইস রয়েছে lspciতবে 10 ডিভাইস অনুযায়ী lsusb! lspciকেবল ইউএসবি নিয়ন্ত্রণকারীদের তালিকাভুক্ত করে; একটি নিয়ামক এর সাথে একাধিক ইউএসবি ডিভাইস সংযুক্ত থাকতে পারে। এটি /sys/bus/কীভাবে হয় তা দেখতে আমাদের অনুসন্ধান করুন ।

$ ls -l /sys/bus/usb/devices/
... 1-0:1.0 -> ../../../devices/pci0000:00/0000:00:12.2/usb1/1-0:1.0
... 2-0:1.0 -> ../../../devices/pci0000:00/0000:00:13.2/usb2/2-0:1.0
... 2-1 -> ../../../devices/pci0000:00/0000:00:13.2/usb2/2-1
... 2-1:1.0 -> ../../../devices/pci0000:00/0000:00:13.2/usb2/2-1/2-1:1.0
... 2-1:1.1 -> ../../../devices/pci0000:00/0000:00:13.2/usb2/2-1/2-1:1.1
... 3-0:1.0 -> ../../../devices/pci0000:00/0000:00:12.0/usb3/3-0:1.0
... 3-1 -> ../../../devices/pci0000:00/0000:00:12.0/usb3/3-1
... 3-1:1.0 -> ../../../devices/pci0000:00/0000:00:12.0/usb3/3-1/3-1:1.0
... 4-0:1.0 -> ../../../devices/pci0000:00/0000:00:12.1/usb4/4-0:1.0
... 5-0:1.0 -> ../../../devices/pci0000:00/0000:00:13.0/usb5/5-0:1.0
... 6-0:1.0 -> ../../../devices/pci0000:00/0000:00:13.1/usb6/6-0:1.0
... 7-0:1.0 -> ../../../devices/pci0000:00/0000:00:14.5/usb7/7-0:1.0
... 7-1 -> ../../../devices/pci0000:00/0000:00:14.5/usb7/7-1
... 7-1:1.0 -> ../../../devices/pci0000:00/0000:00:14.5/usb7/7-1/7-1:1.0
... 7-1:1.1 -> ../../../devices/pci0000:00/0000:00:14.5/usb7/7-1/7-1:1.1
... 7-1:1.2 -> ../../../devices/pci0000:00/0000:00:14.5/usb7/7-1/7-1:1.2
... 7-1:1.3 -> ../../../devices/pci0000:00/0000:00:14.5/usb7/7-1/7-1:1.3
... usb1 -> ../../../devices/pci0000:00/0000:00:12.2/usb1
... usb2 -> ../../../devices/pci0000:00/0000:00:13.2/usb2
... usb3 -> ../../../devices/pci0000:00/0000:00:12.0/usb3
... usb4 -> ../../../devices/pci0000:00/0000:00:12.1/usb4
... usb5 -> ../../../devices/pci0000:00/0000:00:13.0/usb5
... usb6 -> ../../../devices/pci0000:00/0000:00:13.1/usb6
... usb7 -> ../../../devices/pci0000:00/0000:00:14.5/usb7

এখন এটি উপলব্ধি করা শুরু হচ্ছে, আমাদের কাছে USB টি ইউএসবি কন্ট্রোলার রয়েছে যা পিসিআই বাসে ডিভাইস হিসাবে প্লাগ রয়েছে। উদাহরণস্বরূপ, ইউএসবি বাস 001 পিসিআই ডিভাইসের সাথে 0000:00:12.2এবং ইউএসবি বাস 007 0000:00:14.5ডিভাইসের সাথে সম্পর্কিত।

ডিভাইস নম্বর

ইউএসবি বাস নম্বর (যেমন 7-1:1.2) দিয়ে শুরু হওয়া ডিরেক্টরিগুলি হ'ল ইউএসবি নিয়ামকের সাথে সংযুক্ত প্রকৃত ডিভাইস। পিসিআই বাসের মতো বেশ কয়েকটি ডিভাইস একটি ইউএসবি কন্ট্রোলার (একটি হাব) সংযুক্ত থাকতে পারে এতে বেশ কয়েকটি ইউএসবি ডিভাইস সংযুক্ত থাকতে পারে।

ডিভাইস সংখ্যাগুলি সহজভাবে কাউন্টার হয়: সংযুক্ত প্রথম ডিভাইসটি 1 পায়, পরেরটি 2 পায় এবং আরও অনেক কিছু। তবে আরও কিছু আছে: ইউএসবি হট-প্লাগেবল হতে ডিজাইন করা হয়েছিল; অতএব আপনি ডিভাইস সংযোগ এবং সংযোগ বিচ্ছিন্ন করতে পারেন। আপনি যখন কোনও ইউএসবি ডিভাইস সংযোগ বিচ্ছিন্ন করেন তখন সেই USB কন্ট্রোলারের অন্য কোনও ডিভাইসের জন্য ডিভাইস নম্বরটি কার্নেল দ্বারা আর ব্যবহার করা হবে না। উদাহরণস্বরূপ, আপনি যদি পেনড্রাইভকে সংযুক্ত করে সংযোগ বিচ্ছিন্ন করেন এবং lsusbচালিয়ে যান তবে আপনার পেনড্রাইভটির জন্য ডিভাইস নম্বরটি দেখতে পাবেন।

বাস নম্বর

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

USB  | PCI
-----+----
usb1 | 0000:00/0000:00:12.2
usb2 | 0000:00/0000:00:13.2
usb3 | 0000:00/0000:00:12.0
usb4 | 0000:00/0000:00:12.1
usb5 | 0000:00/0000:00:13.0
usb6 | 0000:00/0000:00:13.1
usb7 | 0000:00/0000:00:14.5

তালিকাটি ক্রমযুক্ত, তবে বেশ নয়। প্রথম দুটি ইউএসবি কন্ট্রোলার অস্থির বলে মনে হচ্ছে। তবুও, এর একটি কারণ রয়েছে: lspciউপরের দিকে নজর দিলে আপনি দেখতে পাবেন যে সেগুলি EHCIইউএসবি (ইউএসবি ২.০), অন্য সমস্ত ইউএসবি কন্ট্রোলার OHCIইউএসবি (ইউএসবি ১.০) হয়।

অতএব আমরা এই টেবিলটিকে এইভাবে পুনরায় আঁকতে পারি:

USB  | PCI
-----+----
usb1 | 0000:00/0000:00:12.2
usb2 | 0000:00/0000:00:13.2     USB 2.0
-----+---------------------------------
usb3 | 0000:00/0000:00:12.0     USB 1.x
usb4 | 0000:00/0000:00:12.1
usb5 | 0000:00/0000:00:13.0
usb6 | 0000:00/0000:00:13.1
usb7 | 0000:00/0000:00:14.5

এবং নম্বর নির্ধারণ স্পষ্ট হয়ে যায়।


সুতরাং যখন সর্বাধিক সংখ্যক ডিভাইস নম্বর ব্যবহার করা হবে তখন কী হবে। আসুন আমি বলি যে আমি আমার ডিভাইসটি পুনরায় সংযুক্ত করে চলেছি। ডিভাইস নম্বর শীঘ্রই সর্বোচ্চে যাবে। আমি আসলে একটি পরীক্ষা করেছি, দেখে মনে হচ্ছে এটি কোনও সাধারণ কাউন্টার নয়। এটি আর ফিরে 001আসেনি, পরিবর্তে কার্নেল বৃহত্তম কয়েকটি ডিভাইস নম্বর পুনরায় ব্যবহার করছে। এই আচরণ পরিবর্তন করার কোন সহজ উপায় আছে?
কনান

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

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