ioctl
có xu hướng đi đôi với một /dev
mục; mã thông thường của bạn sẽ làm
fd=open("/dev/mydevice",O_RDRW);
ioctl(fd,.....);
Đây là hành vi Unix tiêu chuẩn hoàn hảo. Bên trong trình điều khiển hạt nhân, bạn có thể đặt các điều khiển truy cập (ví dụ: chỉ root
có thể thực hiện một số điều hoặc yêu cầu một khả năng cụ thể để truy cập chi tiết hơn), điều này làm cho nó khá linh hoạt và mạnh mẽ.
Tất nhiên, điều này có nghĩa là các thiết bị có thể phơi bày nhiều hơn so với sử dụng hoạt động đọc-ghi khối / ký tự; nhiều thứ có thể được thực hiện thông qua ioctl
các cuộc gọi. Không dễ dàng như vậy để sử dụng từ kịch bản shell, nhưng khá dễ dàng từ C
hoặc perl
hoặc python
hoặc tương đương.
sysfs
các mục là một cách khác để tương tác với trình điều khiển. Thông thường mỗi loại lệnh sẽ có một mục khác nhau, do đó có thể phức tạp khi viết trình điều khiển nhưng nó giúp bạn dễ dàng truy cập qua không gian người dùng; tập lệnh shell đơn giản có thể thao tác nhiều thứ, nhưng có thể không hiệu quả lắm
netlink
chủ yếu tập trung (tôi nghĩ vậy!) vào việc truyền dữ liệu mạng, nhưng nó có thể được sử dụng cho những thứ khác. Nó thực sự tốt cho khối lượng truyền dữ liệu lớn hơn và có nghĩa là một sự kế thừa ioctl
trong một số trường hợp.
Tất cả các tùy chọn đều tốt; trường hợp sử dụng của bạn có thể xác định loại giao diện nào sẽ lộ ra từ trình điều khiển của bạn.