বুট এ নির্দিষ্ট পিসিআই ডিভাইস নিষ্ক্রিয় করুন


13

আমি শুধু আমার সোনি ভিওআইও ল্যাপটপে ডেবিয়ানকে ইনস্টল করেছি, এবং আমার dmesg এবং ভার্চুয়াল কনসোলগুলি বারবার একই বার্তার সাথে স্প্যামেড হয়ে যায়।

[   59.662381] hub 1-1:1.0: unable to enumerate USB device on port 2
[   59.901732] usb 1-1.2: new high-speed USB device number 91 using ehci_hcd
[   59.917940] hub 1-1:1.0: unable to enumerate USB device on port 2
[   60.157256] usb 1-1.2: new high-speed USB device number 92 using ehci_hcd

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

# echo "0000:00:1a.0" > /sys/bus/pci/drivers/ehci_hcd/unbind

এটি আমার ব্লুটুথ ইন্টারফেসটিও নেবে, কিন্তু আমি এর সাথে ভাল আছি।

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

$ cat /sys/bus/pci/devices/0000\:00\:1a.0/modalias 
pci:v00008086d00003B3Csv0000104Dsd00009071bc0Csc03i20

$ cat /etc/modprobe.d/blacklist
blacklist pci:v00008086d00003B3Csv0000104Dsd00009071bc0Csc03i20

আমি কিভাবে নিশ্চিত করব যে এই নির্দিষ্ট পিসিআই ডিভাইসটি স্বয়ংক্রিয়ভাবে স্বয়ংক্রিয়ভাবে অ্যাক্টিভেট হয় না, তার ড্রাইভারকে সম্পূর্ণভাবে নিষ্ক্রিয় না করেই?


-edit- মডিউলটি সম্প্রতি নামকরণ করা হয়েছে, এখন ব্যবহারকারীর নিম্নলিখিত কাজগুলি:

echo "0000:00:1a.0" > /sys/bus/pci/drivers/ehci-pci/unbind

তবুও, আমি কার্নেলটিকে প্রথম স্থানে বাইন্ডিং বন্ধ করতে বাধা দেওয়ার উপায় খুঁজছি।


1
পিসিআই বাসের পরিবর্তে ইউএসবি বাসের মাধ্যমে এই বিশেষ ইউএসবি ডিভাইসটি নিষ্ক্রিয় করা কি একটি গ্রহণযোগ্য পদ্ধতি হবে?
slm

এছাড়াও আপনি নিশ্চিত যে আপনি একটি পিসিআই ব্যবহার করে কালো তালিকা করতে পারেন: ... এরকম স্ট্রিং? আমি কখনও কখনও কার্নেল মডিউলগুলি /etc/modprobe.d/blacklist ফাইলে কালো তালিকাভুক্ত দেখতে পেয়েছি। ডিভাইসটি কোন মডিউলটি চায় তা সনাক্ত করতে আপনি lspci -k ব্যবহার করতে পারছেন না এবং তার পরিবর্তে কালো তালিকাটি তালিকাভুক্ত করবেন?
slm

কালো তালিকা এন্ট্রি যোগ করার পরে, আপনি কি update-initramfs -u -k all?
Stefan Seidel

@StefanSeidel: ভাল বিন্দু। আমি এখন আছে, কিন্তু এটা সাহায্য বলে মনে হচ্ছে না। সম্ভবত slm সঠিকভাবে একটি modalias কালোলিস্টিং একটি ভিন্ন সিনট্যাক্স বা পদ্ধতি প্রয়োজন মনে হয়।
Rhymoid

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

উত্তর:


4

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

এটি উবুন্টু 2016.04, তবে এটি পূর্ববর্তী সংস্করণগুলিতে কাজ করা উচিত।

জড়িত তিন ফাইল আছে। আমি তাদের নির্দিষ্ট ব্যবহারের ক্ষেত্রে তাদের নাম, কিন্তু ymmv:

প্রথম ফাইল, নাম /etc/unbindpci ফাইলটি একটি পিসিআই ডিভাইস নম্বর এবং ড্রাইভার (এখানে প্রয়োজন অনুসারে কনফিগার করুন) এর একটি সহজ csv:

0000:08:00.0,xhci_hcd
0000:03:00.0,radeon

দ্বিতীয় ফাইল /etc/initramfs-tools/hooks/xenfiles, যা initramfs মধ্যে উপরের কনফিগারেশন কপি করে।

#! /bin/bash

if [ -f /etc/unbindpci ]; then
  cp -pP /etc/unbindpci $DESTDIR/etc/unbindpci
fi

তৃতীয় ফাইল বুট সময় কাজ কি, আমি এটা স্থাপন /etc/initramfs-tools/scripts/init-top/unbind-early-pci:

#!/bin/sh

PREREQ=""
prereqs()
{
        echo "$PREREQ"
}
case $1 in
# get pre-requisites
prereqs)
        prereqs
        exit 0
        ;;
esac

# This only executes if in a xen Dom-0.
# Edit if that's not your use case!          
if [ -f /sys/hypervisor/uuid -a -f /etc/unbindpci ]; then
        if [ $(cat /sys/hypervisor/uuid) = "00000000-0000-0000-0000-000000000000" ]; then
                echo "Unbinding pci ports..."
                IFS=,
                while read addr driver; do
                        if [ -f /sys/bus/pci/drivers/$driver/unbind ]; then
                                echo "Unbinding $addr, device $driver"
                                echo $addr > /sys/bus/pci/drivers/$driver/unbind
                        fi
                done < /etc/unbindpci
        fi
fi

অবশেষে, রান update-initramfs -k all -u এবং পুনরায় বুট করুন।

আমি কনফিগারেশন ফাইলে মন্তব্যের জন্য সমর্থন অন্তর্ভুক্ত করতে পারি এবং এখানে কাজ করার জন্য অনেক পরিচ্ছন্নতা রয়েছে, তবে এটি আমার জন্য কাজ করে।


এটি এখনও একটি সমাধান যেখানে আপনি এটি শুরু হওয়ার পরে পিসিআই ডিভাইসটি আনবিন্ড করুন, কিন্তু হেই, এটি সমাধান করার চেয়ে এটি আরও ভাল দেখাচ্ছে /etc/init.d! আমি এখনই মেশিন ব্যবহার করছি না, এবং আমি আবার ডেবিয়ানের সাথে এটি বুট করতে পারব না, তাই আমি এটি পরীক্ষা করতে পারছি না। যাইহোক, এটি সম্ভবত আমার ক্ষেত্রে কাজ করেছে কারণ, আমি এটি একটি উত্তর হিসাবে গ্রহণ করব।
Rhymoid

সম্মত, আমি এখনও মডিউল blacklisting ছাড়া ডিভাইসের আরম্ভ প্রতিরোধ করার জন্য একটি সমাধান খুঁজে পাওয়া যায় নি। "র্যাডন" লাইন আসলে এটির প্রাথমিক প্রচেষ্টার একটি উদাহরণ।
Steve Czetty

মজার আমি চিন্তা udev কার্নেলের বুট এবং কিছু গ্রাবের মধ্য দিয়ে সমস্ত বাস চলছে এবং লোড হয়েছে initramfs শুধুমাত্র পড়া এবং হারিয়ে ছিল। কার্নেল লোড করা হয়। আমি সেটআপ করার চেষ্টা করেছিলাম setpci মধ্যে initramfs-tools কিন্তু ছেড়ে দেওয়া এবং একটি চেষ্টা করছি udev এখন নিয়ম।
WinEunuuchs2Unix

4

কোনও উত্তর আমার অনুরূপ সমস্যা সমাধান করে নি, কিন্তু তারা আমাকে এটি সমাধান করার পথে রাখে!

আমার syslog ত্রুটি:

[  334.940158] hub 1-0:1.0: unable to enumerate USB device on port 7

ব্লুটুথ বিকল্পের জন্য এটি একটি অভ্যন্তরীণ USB হাব-পোর্ট যা আমার নেই।

পিসিআই ডিভাইসে আনবিন হবার ফলে হাব আরেকটি হাব (5 টি ক্ষেত্রে আমার) এবং সিলেসড বন্যা বন্যার মতো ব্যাক আপ করে।

সুযোগ দ্বারা আমি একটি unbind গঠন অধীন লক্ষ্য /sys/bus/usb/drivers/hub। উপরে উদাহরণ ব্যবহার করে আমি শুধু rc.local নিম্নলিখিত যোগ করা:

echo "1-0:1.0" > /sys/bus/usb/drivers/hub/unbind

ফলাফল সিলেগন নীরবতা! এখন ক্ষমতা ব্যবস্থাপনায়ের জন্য ক্ষুরিগের স্ক্রিপ্টের উদাহরণ যোগ করা এবং আমার সোনালী হওয়া উচিত।


4

একটি udev নিয়ম /etc/udev/rules.d এর সাহায্যে আপনি একটি পিসিআই ডিভাইসটি সরাতে পারেন:

ACTION=="add", KERNEL=="0000:00:03.0", SUBSYSTEM=="pci", RUN+="/bin/sh -c 'echo 1 > /sys/bus/pci/devices/0000:00:03.0/remove'"

প্রতিস্থাপন করা 0000:00:03.0 আপনি মুছে ফেলতে চান পিসিআই ডিভাইস ঠিকানা সঙ্গে


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

2

Askubuntu এই থ্রেড খুঁজে পাওয়া যায় নি:

ব্যবহার lspci -vv আপনি যে ডিভাইসটির পিসিআই স্লটটি অক্ষম করতে চান তা চিহ্নিত করতে, এটি স্লটে গিয়েছে যে আপনি এই কমান্ডটিকে স্লট ডিভাইসটি বন্ধ করতে ব্যবহার করতে পারেন:

% echo 0 > /sys/bus/pci/slot/$N/power

1
আমি অন্য যে কোন সময় এটি নিষ্ক্রিয় করতে পারি জানি, তবে আমি কার্নেলটিকে এটিকে সক্রিয় করার জন্য থামাতে চাই। এছাড়া, এটি একটি হার্ডওয়াইড পিসিআই ডিভাইস (বেশীরভাগ ইউএসবি কন্ট্রোলারের মতো), এটির কোনও স্লট নেই। আমি যে মেশিনটি নিয়ে কথা বলছি তা একটি ল্যাপটপ এবং এটির একমাত্র স্লট রয়েছে ( /sys/bus/pci/slots/1 ) এক্সপ্রেস কার্ড স্লটটি বাইরে, যা আমি নিজে খালি করতে পারি।
Rhymoid

2

আপনি ইতিমধ্যে আছে echo "0000:00:1a.0" > /sys/bus/pci/drivers/ehci_hcd/unbind মধ্যে /etc/rc.local আপনার জন্য বুট করার জন্য শুধুমাত্র পাওয়ার ম্যানেজমেন্ট deamon aswell হিসাবে এটি একটি স্ক্রিপ্টে রাখতে হবে।

এই মত চলে যায়: নামে একটি এক্সিকিউটেবল bash স্ক্রিপ্ট ফাইল তৈরি করুন 0_disable_webcam ডিরেক্টরির মধ্যে /etc/pm/sleep.d/:

#!/bin/sh
case "$1" in
        resume|thaw)
                echo "0000:00:1a.0" > /sys/bus/pci/drivers/ehci_hcd/unbind
                ;;
esac

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


উপরের কাজটি যদি কাজ না করে তবে আপনাকে সঠিক ইউএসবি পোর্টটি সন্ধান করতে হবে। আমি এটা "1-1.2" অনুমান (অন্যথায় চেক tree /sys/bus/pci/devices/0000\:00\:1a.0/ "ইউএসবিএক্স" এর অধীনে যার মানে বন্দর একই নম্বর)। এটি আপনার পরিবর্তে "1-1.2" হয় echo "0000:00:1a.0" > /sys/bus/pci/drivers/ehci_hcd/unbind স্ক্রিপ্ট থাকা উচিত echo "auto" > /sys/bus/usb/devices/1-1.2/power/control; echo -n "1-1.2" > /sys/bus/usb/drivers/usb/unbind
kschurig

0

আপনার প্রশ্নের উত্তর হিসাবে প্রায় একটি কাজ হিসাবে।

Syslog / (যদি আপনি syslog বা rsyslog বা অন্য কিছু ব্যবহার করেন তা আমি জানি না তাই কনসোলে কেবল বার্তাগুলিকে লগ ইন করতে বাধা দেয় না, তাই আমি সত্যিই আপনাকে সঠিক ডিরেক্টরিতে আরো নির্দিষ্টভাবে নির্দেশ করতে পারছি না, কিন্তু যদি আপনি "কনসোল" এবং "tty" এর জন্য আপনার syslog কনফিগারেশন ফাইলগুলি অনুসন্ধান করুন, এটি আপনাকে একটি ভাল শুরু করার জায়গা দেবে - আসলে আপনি সম্ভবত / dev / tty1 এ কনসোল পরিবর্তন করতে পারেন [উদাহরণস্বরূপ] এবং বার্তাগুলি শুধুমাত্র tty1 এ লগ ইন করুন তবে সব কনসোল।

অন্য সমাধান (আপনার প্রশ্নের উত্তর দিতে, কিন্তু আমি পছন্দ করি না), আপনি ehci_hcd মডিউল (এটি লোড করা থাকলে) কালো তালিকাভুক্ত করতে পারেন, অথবা আপনার কার্নেলকে এটি শুধুমাত্র একটি মডিউল ব্যবহার করতে পুনরায় কম্পাইল করতে পারে। ঘ তাকান টিটিপি: //www.cyberciti.biz/faq/rhel-redhat-centos-kernel-usb-reset-high-speed-ehci_hcd/ যা আপনি ঠিক প্রশ্ন জিজ্ঞাসা করা হয়

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