2011-10-12 14 views
7

Tôi đang tạo mô-đun hạt nhân nhỏ để cung cấp quyền truy cập không gian người dùng vào một số tính năng chỉ của chế độ lõi của chip ARMv7 (cụ thể là điều khiển bộ nhớ cache). Tôi đang đọc qua Trình điều khiển thiết bị Linux bởi Corbet, Rubini và Hartman. Trong đó, họ mô tả làm thế nào để làm cho một trình điều khiển đầy đủ + thiết bị + xe buýt. Tôi không muốn tạo ra một tài xế xe buýt chút nào. Trên thực tế, 'trình điều khiển' mà tôi đang tạo ra không thực sự cần phải khớp với một định nghĩa thiết bị - nó hoàn toàn phù hợp với CPU của nền tảng. Bất cứ ai có thể giải thích cho tôi:Truy cập trình điều khiển Linux thông qua sysfs

  1. Tôi nên sử dụng thuộc tính nào của sysfs? Nó có nằm trong mục nhập mô-đun của tôi theo số /sysfs/modules/mymodule không? /sys/devices/platform có vẻ đầy hứa hẹn, và do đó, /sys/devices/system/cpu.
  2. Nếu có một địa điểm hiện có nơi tôi nên đặt kobject/thuộc tính của mình, làm cách nào để cắm nó vào nó? Làm cách nào để nhận được số kset cần thiết? Tất cả các ví dụ tôi đã thấy tạo ra một kset và sau đó liên kết với nó từ kobject - Tôi chưa thấy một API để yêu cầu hiện có tên là kset?

Xin lỗi nếu điều này không rõ ràng, hoặc nếu có một số ví dụ thực sự đơn giản và dễ khám phá ở đâu đó mà tôi chưa phát hiện vì lý do nào đó. bất cứ ai có thể rụng bất kỳ ánh sáng về điều này?

Trả lời

8

Tôi chưa từng làm việc với sysfs nhiều, nhưng tôi thấy một ví dụ đơn giản khá giống với những gì bạn đang làm (một cách tự nhiên, nó cũng nằm dưới ARM). Hãy xem arch/arm/mach-omap1/pm.c, cụ thể là tệp idle_show/idle_store sysfs. Nó được đăng ký (sử dụng sysfs_create_file()) làm /sys/power/sleep_while_idle và sử dụng toàn cầu kobj (được xác định trong include/linux/kobject.h). Có một vài kobj toàn cầu khác được định nghĩa ở đó mà bạn có thể sử dụng, mặc dù tôi không nghĩ là có phù hợp với trình điều khiển của bạn.

Đây có phải là trình điều khiển nền tảng không? Là một tài xế không phù hợp với bất kỳ xe buýt nào, nó có vẻ phù hợp. Trình điều khiển nền tảng có được thư mục riêng của họ trong/sys/thiết bị/nền tảng và có thể có các thuộc tính ở đó. Hãy xem drivers/hwmon/coretemp.c, trong đó có temp1_crit, temp1_crit_alarm, temp1_input, v.v ... làm thuộc tính. Nó trông khá đơn giản: tạo các thuộc tính (có thể với __ATTR()?), Liệt kê tất cả trong một mảng, xác định attribute_group, đăng ký nó với sysfs_create_group() trong hàm probe() và hủy đăng ký với sysfs_remove_group() trong hàm remove().

Có thể có các trình điều khiển nền tảng khác xác định thuộc tính (tìm kiếm sysfs_create_group) nếu bạn cần các ví dụ khác. Hi vọng điêu nay co ich!

+0

Tôi sẽ xem xét trình điều khiển coretemp.c. Cảm ơn! –

+0

Bản cập nhật - mô-đun coretemp là mẫu hoàn hảo. Tôi có một số thuộc tính sysfs làm việc khá độc đáo. Cảm ơn một lần nữa. –