Gần đây tôi đã thừa kế một số mã tại nơi làm việc, đây là trình điều khiển nhân Linux 2.4.X cũ và tôi đã được giao nhiệm vụ nhận chúng hoạt động trên hạt nhân mới hơn 2.6 trở lên. Tôi đang chạy trên OpenSUSE 12.1 với một hạt nhân 3.1.10.Làm thế nào tôi có thể lập trình quyền trên thiết bị char
Tôi đã cập nhật mã gốc từ register_chrdev() để sử dụng các cuộc gọi class_create()/device_create() và tôi có thể thấy thiết bị của mình hiển thị trong/dev một cách chính xác. vấn đề hiện tại của tôi là các quyền cho điện thoại của tôi đang được thiết lập để r/w cho chỉ sử dụng:
crw------- 1 root root 244, 0 Aug 7 07:57 gcanain
Tôi biết tôi có thể "chmod" các tập tin thông qua dòng lệnh, và hay tôi có thể thiết lập quyền udev. .. nhưng có anyway để làm điều này lập trình, như vậy mà khi tôi phát hành lệnh insmod, dev sẽ được gắn kết với các quy tắc chính xác tại chỗ đã?
Có bất kỳ API nào có thể tồn tại mà tôi có thể gọi để thực hiện việc này hay không, bất kỳ tùy chọn nào tôi thiếu trong một trong các API tạo này?
Chỉ cần làm rõ, một phần lý do tôi không muốn sử dụng quy tắc udev là tôi không biết tên của trình điều khiển thiết bị trước thời hạn. Các trình điều khiển thiết bị được sinh ra trong một vòng lặp và vì vậy những cái tên được nối bằng một chữ số, nNumDevs có thể được khá nhiều bất cứ điều gì:
for (i = 0; i < nNumDevs; i++) {
strcpy(Modname,GC_ANAIN_MODULE_NAME);
strcat(Modname,"%d");
device_create(c1, NULL, MKDEV(nMajor, GC_ANAIN_MINOR_VERSION+i), NULL, Modname, i);
}
Tôi nghĩ bạn nên tiếp tục và sử dụng 'udev'. Quyền truy cập thiết bị thường là dịch vụ của quản trị viên cục bộ, những người có thể có các ý tưởng khác nhau về quyền truy cập so với tác giả trình điều khiển thiết bị. Bạn có thể thả các thiết lập mặc định trong '/ etc/udev/rules.d' hoặc một cái gì đó. – larsks
Đã hiểu, nhưng chúng tôi (nhóm của tôi) là quản trị viên của hệ thống, vì vậy nếu tôi muốn mọi thứ có 777, tôi có thể làm như vậy. Ngoài ra, tôi có một vấn đề với việc sử dụng rules.d (cập nhật trong mô tả ban đầu), vì tên của các trình điều khiển thiết bị được tạo động ... trừ khi tôi hiểu lầm cách sử dụng udev. – Mike
@Mike: Nhưng quy tắc udev có thể sử dụng wildcars để khớp với tên của thiết bị ('KERNEL ==" foo * "') và chúng cũng có thể khớp với tên của trình điều khiển ('DRIVERS ==" bar "'). – rodrigo