udv pci डिवाइस नियम काम नहीं कर रहा है


1

मेरे पास एक PCI डिवाइस है जिसमें खुद के ड्राइवर हैं (लिनक्स कर्नेल में एकीकृत नहीं)। मैंने डिवाइस जानकारी का उपयोग करके एकत्र किया है udevadm

udevadm info -a -p /sys/devices/pci0000:00/0000:00:1e.0/0000:0d:02.0

Udevadm की जानकारी देवपथ द्वारा निर्दिष्ट डिवाइस से शुरू होती है और फिर मूल उपकरणों की श्रृंखला तक चलती है। यह पाया गया हर डिवाइस के लिए प्रिंट करता है, udev नियम कुंजी प्रारूप में सभी संभावित विशेषताएँ।

मिलान करने के लिए एक नियम, डिवाइस की विशेषताओं और एक एकल मूल डिवाइस से विशेषताओं द्वारा बनाया जा सकता है।

looking at device '/devices/pci0000:00/0000:00:1e.0/0000:0d:02.0':
KERNEL=="0000:0d:02.0"
SUBSYSTEM=="pci"
DRIVER==""
ATTR{irq}=="10"
ATTR{subsystem_vendor}=="0xe1c5"
ATTR{broken_parity_status}=="0"
ATTR{class}=="0x078000"
ATTR{driver_override}=="(null)"
ATTR{consistent_dma_mask_bits}=="32"
ATTR{dma_mask_bits}=="32"
ATTR{local_cpus}=="00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,000000ff"
ATTR{device}=="0x9030"
ATTR{enable}=="0"
ATTR{msi_bus}==""
ATTR{local_cpulist}=="0-7"
ATTR{vendor}=="0x10b5"
ATTR{subsystem_device}=="0x0005"
ATTR{numa_node}=="-1"
ATTR{d3cold_allowed}=="1"

looking at parent device '/devices/pci0000:00/0000:00:1e.0':
KERNELS=="0000:00:1e.0"
SUBSYSTEMS=="pci"
DRIVERS==""
ATTRS{irq}=="0"
ATTRS{subsystem_vendor}=="0x103c"
ATTRS{broken_parity_status}=="0"
ATTRS{class}=="0x060401"
ATTRS{driver_override}=="(null)"
ATTRS{consistent_dma_mask_bits}=="32"
ATTRS{dma_mask_bits}=="32"
ATTRS{local_cpus}=="00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,000000ff"
ATTRS{device}=="0x244e"
ATTRS{enable}=="1"
ATTRS{msi_bus}=="1"
ATTRS{local_cpulist}=="0-7"
ATTRS{vendor}=="0x8086"
ATTRS{subsystem_device}=="0x304b"
ATTRS{numa_node}=="-1"
ATTRS{d3cold_allowed}=="0"

looking at parent device '/devices/pci0000:00':
KERNELS=="pci0000:00"
SUBSYSTEMS==""
DRIVERS==""

तो फिर मैं बनाई गई रिपोर्ट्स 99-elcus1553.rulesमें /etc/udev/rules.d/:

ACTION=="add",SUBSYSTEM=="pci",ATTR{vendor}=="0x10b5",ATTR{device}=="0x9030",RUN+="/home/qmor/elcus-1553driver-linux/trunk/loaddrv"

जिसमें है:

/sbin/rmmod tmk1553b
rm /dev/tmk1553b
/sbin/insmod tmk1553b.ko d0=1 t0="TAI" misc=1 
chmod o+rwx /dev/tmk1553b

रिबूट के बाद, मेरे पास कोई /dev/tmk1553bउपकरण नहीं है, इसका मतलब है कि फ़ाइल नियम काम नहीं कर रहा है। मैंने क्या गलत किया है?

जवाबों:


2

यहाँ कुछ समस्याएं हैं:

0. आप मॉड्यूल लोडिंग के साथ गलत तरीके से जा रहे हैं । नियम को काम करने के लिए बनाया जा सकता है, लेकिन यह अभी भी समस्या का गलत उपकरण है। udv में पहले से ही ऑटो-लोडिंग डिवाइस ड्राइवर मॉड्यूल के लिए बिल्ट-इन तरीके हैं, जैसे कि modaliases और modprobe.d; वे केवल इन-ट्री ड्राइवरों तक सीमित नहीं हैं ।

1. आपकी शेल स्क्रिप्ट स्क्रिप्ट नहीं है। …/trunk/loaddrvफ़ाइल निष्पादन योग्य के रूप में चिह्नित किया जाना चाहिए (अ + एक्स के लिए यह chmod), और यह होना आवश्यक है #!हैडर गिरी क्या दुभाषिया इसके साथ उपयोग करने के लिए कह रही है -, आपके मामले में जोड़ने #!/bin/shअपनी स्क्रिप्ट के शीर्ष करने के लिए।

2. यह पता नहीं है कि मॉड्यूल कहां है। आपके पास है insmod tmk1553b.ko। लेकिन यह .ko फ़ाइल के लिए कहाँ माना जाता है? चूंकि आपने पूर्ण पथ निर्दिष्ट नहीं किया था, इसलिए यह "वर्तमान" निर्देशिका में दिख रहा है - जो हमेशा /udv- लॉन्च किए गए कार्यक्रमों के लिए है। दूसरे शब्दों में, नियम ऐसा नहीं करता है ...

cd /home/qmor/elcus-1553driver-linux/trunk
./loaddrv

... यह ऐसा करता है:

cd /
/home/qmor/elcus-1553driver-linux/trunk/loaddrv

ठीक है, " 0. आप मॉड्यूल लोडिंग के साथ गलत तरीके से जा रहे हैं "।

  • प्रत्येक डिवाइस में एक स्वचालित रूप से उत्पन्न मॉड्यूल उर्फ ​​(मोडलिया) होता है । उदाहरण के लिए:

    $ cat /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/modalias
    pci:v00001002d000068E4sv00001043sd00001C92bc03sc00i00
    
  • और प्रत्येक ड्राइवर मॉड्यूल में मिलान उपनामों की एक सूची है, जैसा कि modinfoदिखाता है:

    filename:       /lib/modules/3.19.0/kernel/drivers/gpu/drm/radeon/radeon.ko.gz
    description:    ATI Radeon
    alias:          pci:v00001002d000068E4sv*sd*bc*sc*i*
    
  • जब कोई उपकरण प्रकट होता है, तो udev /lib/modulesकिसी भी मॉड्यूल के लिए स्कैन करता है जिसमें एक मिलान मोडलिया होता है।

इसलिए विक्रेता 0x10b5 मॉडल 0x9030 के लिए, यह होगा pci:v000010b5d00009030sv*sd*bc*sc*i*

इन्हें अपने modprobe कॉन्फ़िगरेशन में जोड़ें ( /etc/modprobe.d/tmk1553b.conf):

alias pci:v000010b5d00009030sv*sd*bc*sc*i* tmk1553b

options tmk1553b d0=1 t0=TAI misc=1

install tmk1553b /sbin/insmod /home/qmor/elcus-1553driver-linux/trunk/tmk1553b.ko

(यदि आप अपना मॉड्यूल लिखते हैं, तो आपको MODULE_ALIAS("...")मैक्रो की आवश्यकता होगी ।)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.