Sự khác biệt giữa / dev và / sys / class?


Câu trả lời:


26

Các tệp trong /devlà các tệp thiết bị thực tế mà UDEV tạo khi chạy. Thư mục /sys/classđược xuất bởi kernel trong thời gian chạy, hiển thị phân cấp của phần cứng thông qua sysfs.

Từ hướng dẫn libudev và Sysfs

đoạn trích

Trên các hệ thống tương tự Unix và Unix, các thiết bị phần cứng được truy cập thông qua các tệp đặc biệt (còn được gọi là tệp hoặc nút thiết bị) nằm trong thư mục / dev. Các tệp này được đọc và ghi giống như các tệp thông thường, nhưng thay vì ghi và đọc dữ liệu trên đĩa, chúng giao tiếp trực tiếp với trình điều khiển hạt nhân sau đó giao tiếp với phần cứng. Có nhiều tài nguyên trực tuyến mô tả / dev tập tin chi tiết hơn. Theo truyền thống, các tệp đặc biệt này được tạo ra tại thời điểm cài đặt bởi bản phân phối, sử dụng lệnh mknod. Trong những năm gần đây, các hệ thống Linux đã bắt đầu sử dụng udev để quản lý các tệp / dev này trong thời gian chạy. Ví dụ, udev sẽ tạo các nút khi các thiết bị được phát hiện và xóa chúng khi các thiết bị được gỡ bỏ (bao gồm các thiết bị cắm nóng khi chạy). Cách này,

một đoạn trích khác

Các thư mục trong Sysfs chứa quyền thừa kế của các thiết bị, vì chúng được gắn vào máy tính. Ví dụ: trên máy tính của tôi, thiết bị hidraw0 được đặt bên dưới:

/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

Dựa trên đường dẫn, thiết bị được gắn vào (khoảng, bắt đầu từ cuối) cấu hình 1 (: 1.0) của thiết bị được gắn với cổng số 4 của thiết bị 1-5, được kết nối với bộ điều khiển USB 1 (usb1), được kết nối với Xe buýt PCI. Mặc dù thú vị, đường dẫn thư mục này không giúp chúng ta làm tốt lắm, vì nó phụ thuộc vào cách phần cứng được kết nối vật lý với máy tính.

May mắn thay, Sysfs cũng cung cấp một số lượng lớn các liên kết tượng trưng, ​​để dễ dàng truy cập vào các thiết bị mà không cần phải biết cổng PCI và USB nào được kết nối. Trong / sys / class có một thư mục cho mỗi loại thiết bị khác nhau.

Sử dụng?

Nói chung, bạn sử dụng các quy tắc /etc/udev/rules.dđể tăng cường hệ thống của bạn. Các quy tắc có thể được xây dựng để chạy các kịch bản khi có phần cứng khác nhau.

Khi hệ thống hoạt động, bạn có thể viết các tập lệnh để chống lại /devhoặc /sys, và nó thực sự phù hợp với sở thích cá nhân, nhưng tôi thường sẽ cố gắng và /syssử dụng các công cụ như udevadmtruy vấn UDEV cho các vị trí của các tài nguyên hệ thống khác nhau.

$ 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"
...

không chắc chắn tôi hiểu bạn chính xác. Vì vậy, yêu cầu một số làm rõ để chắc chắn. Cho dù bạn quyết định giao diện với một thiết bị bên ngoài (ví dụ: thông qua i2c hoặc mipi) bằng cách tạo một mục trong / dev hoặc / sys hoàn toàn dựa trên sở thích cá nhân? Nếu không, trong trường hợp nào / tại sao người ta lại chọn thay cho cái trước thay vì cái sau (và phó-verca)?
LandonZeKepitelOfGreytBritn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.