저는 여러 가지 맞춤 하드웨어 용 드라이버를 작성하고 있습니다. 모든 장치는 PCIe를 통해 호스트 컴퓨터에 연결됩니다. 편의상 모든 사용자 정의 장치를 sysfs 클래스로 그룹화하고 싶습니다. (필자는이를 수용 할만한 것으로 생각합니다.) 불행히도 LDD3의 정보는 시대에 뒤쳐져 있으며 현재 시도하고있는 것을 논의하는 현재 문서를 찾는 데 어려움을 겪고 있습니다.장치를 사용자 정의 sysfs 클래스에 어떻게 연결합니까?
struct class MY_CLASS = class_create(THIS_MODULE, "myclass")
그리고 내 프로브 전화의 내부에서 나는 struct dev
에 액세스 할 수있어 : 내 사용자 정의 클래스를 생성
쉽게 충분하다
static int probe(struct pci_dev *pcidev, const struct pci_device_id *id)
{
...
struct dev *my_dev = &pcidev->dev;
...
}
내 질문은 이것이다 : 지금은 '있음 클래스와 개발자가 있는데 두 클래스 간의 링크를 어떻게 만듭니 까?
device_create()
은 기본적으로 내가 원하는 것을 수행하지만, 이미 struct dev
을 가지고 있으므로 device_create
(즉, 새 장치 생성)으로 다시 전화해서는 안됩니다.
좀 더 추적을 수행하고 device_create()
에 의해 호출되는 device_add()
가 호출 것으로 나타났습니다 device_add_class_symlinks()
(불행히도 내 보내지 않습니다)이 같은 않는 :
...
sysfs_create_link(&dev->class->p->subsys.kobj,&dev->kobj, dev_name(dev));
...
내가 직접이 같은 시도 내 드라이버가 내가 원하는 링크를 만들려면 struct subsys_private
(클래스 구조체의 "p"멤버)가 노출되지 않기 때문에 컴파일 할 수 없습니다.
도움을 주시면 대단히 감사하겠습니다.
예, 모든 장치가의 PCIe 버스에 있습니다. 이 클래스의 목적은 편의상''/ sys/devices/pci0000 : 00/0000 : 00 : 01.1/0000 : 02 : 00.0/0000 : 03 : 08.0/0000 : 04 : 00.0/some_device' 나는/sys/class/my_class/some_device를 가질 수있다. – Dave