อะไรคือความแตกต่างระหว่างการเป็นตัวแทนของอุปกรณ์ใน/dev
และหนึ่งใน/sys/class
?
เป็นที่ต้องการมากกว่าหนึ่งอื่น ๆ ? มีสิ่งหนึ่งที่เสนอและอื่น ๆ ไม่ได้?
อะไรคือความแตกต่างระหว่างการเป็นตัวแทนของอุปกรณ์ใน/dev
และหนึ่งใน/sys/class
?
เป็นที่ต้องการมากกว่าหนึ่งอื่น ๆ ? มีสิ่งหนึ่งที่เสนอและอื่น ๆ ไม่ได้?
คำตอบ:
ไฟล์ใน/dev
นั้นเป็นไฟล์อุปกรณ์จริงซึ่ง UDEV สร้างขึ้นในขณะใช้งาน ไดเรกทอรี/sys/class
มีการส่งออกโดย kernel sysfs
ในเวลาทำงานเผยให้เห็นลำดับชั้นของฮาร์ดแวร์ผ่าน
จากการสอนแบบ libudev และ Sysfs
สิ่งที่สกัดมา
บนระบบ Unix และ Unix like อุปกรณ์ฮาร์ดแวร์จะถูกเข้าถึงผ่านไฟล์พิเศษ (หรือที่เรียกว่าไฟล์อุปกรณ์หรือโหนด) ที่อยู่ในไดเร็กทอรี / dev ไฟล์เหล่านี้อ่านและเขียนได้เช่นเดียวกับไฟล์ปกติ แต่แทนที่จะเขียนและอ่านข้อมูลบนดิสก์พวกเขาสื่อสารโดยตรงกับเคอร์เนลไดรเวอร์ซึ่งจะสื่อสารกับฮาร์ดแวร์ มีแหล่งข้อมูลออนไลน์มากมายที่อธิบาย / dev ไฟล์โดยละเอียด ตามปกติแล้วไฟล์พิเศษเหล่านี้จะถูกสร้างขึ้นในเวลาติดตั้งโดยการกระจายโดยใช้คำสั่ง mknod ในปีที่ผ่านมาระบบ Linux เริ่มใช้ udev เพื่อจัดการไฟล์ / dev เหล่านี้ที่รันไทม์ ตัวอย่างเช่น udev จะสร้างโหนดเมื่อตรวจพบอุปกรณ์และลบออกเมื่ออุปกรณ์ถูกลบ (รวมถึงอุปกรณ์ hotplug ตอนรันไทม์) ทางนี้,
ตัดตอนมาอีก
ไดเรกทอรีใน Sysfs มีลำดับชั้นของอุปกรณ์ตามที่แนบมากับคอมพิวเตอร์ ตัวอย่างเช่นบนคอมพิวเตอร์ของฉันอุปกรณ์ hidraw0 อยู่ภายใต้:
/sys/devices/pci0000:00/0000:00:12.2/usb1/1-5/1-5.4/1-5.4:1.0/0003:04D8:003F.0001/hidraw/hidraw0
ขึ้นอยู่กับเส้นทางอุปกรณ์เชื่อมต่อกับ (ประมาณเริ่มต้นจากจุดสิ้นสุด) การกำหนดค่า 1 (: 1.0) ของอุปกรณ์ที่ต่อกับหมายเลขพอร์ต 4 ของอุปกรณ์ 1-5 เชื่อมต่อกับคอนโทรลเลอร์ USB 1 (usb1) เชื่อมต่อกับ บัส PCI ในขณะที่น่าสนใจเส้นทางไดเรกทอรีนี้ไม่ได้ทำให้เราดีนักเนื่องจากขึ้นอยู่กับว่าฮาร์ดแวร์เชื่อมต่อกับคอมพิวเตอร์อย่างไร
โชคดีที่ Sysfs ยังมี symlink จำนวนมากเพื่อให้ง่ายต่อการเข้าถึงอุปกรณ์โดยไม่ต้องรู้ว่าพอร์ต PCI และ USB ใดที่เชื่อมต่ออยู่ ใน / sys / class มีไดเร็กทอรีสำหรับอุปกรณ์แต่ละคลาสที่แตกต่างกัน
โดยทั่วไปคุณใช้กฎใน/etc/udev/rules.d
เพื่อเพิ่มระบบของคุณ สามารถสร้างกฎเพื่อเรียกใช้สคริปต์เมื่อมีฮาร์ดแวร์ต่างๆ
เมื่อระบบหยุดทำงานคุณสามารถเขียนสคริปต์เพื่อทำงานต่อต้าน/dev
หรือ/sys
และมันลงมาในการตั้งค่าส่วนตัว แต่จริงๆแล้วฉันมักจะลองและทำงานกับ/sys
และใช้เครื่องมือเช่นudevadm
แบบสอบถาม UDEV สำหรับสถานที่ของทรัพยากรระบบต่างๆ
$ udevadm info -a -p $(udevadm info -q path -n /dev/sda) | head -15
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda':
KERNEL=="sda"
SUBSYSTEM=="block"
DRIVER==""
ATTR{ro}=="0"
ATTR{size}=="976773168"
ATTR{stat}==" 6951659 2950164 183733008 41904530 16928577 18806302 597365181 580435555 0 138442293 622621324"
ATTR{range}=="16"
...