장치 트리 및 장치 트리 오버레이에 대한 모든 Linux 커널 설명서를 읽었으며 거의 읽었습니다. 장치 트리에서 새로운 엔트리를 만들어야하는지 이해할 수 없습니다. 플랫폼을 사용하거나 장치 트리를 기반으로 새 드라이버 용 장치에 대한 새 오버레이를 만듭니다. led가 GPIO 핀에 연결되어 있고 그 구성이 보드의 플랫폼에있는 장치 트리 오버레이 또는 장치 트리 조각에 언급되어있는 간단한 LED 조명 드라이버 예제를 찾고 있습니다. 어떻게 사용자 공간을 사용하여 빌드/푸시 및 테스트 할 수 있습니까? 신청.Hello Word 장치 트리 기반 장치 드라이버
3
A
답변
2
는 내 장치 트리에서 사용자 지정 장치를 만들 :이 장치에 대한 커널 스텁을 작성
[email protected] { compatible = "my_driver"; reg = <0xffdf0000 0x1000> /* * reg = address of device and size * (Minimum is System's Pagesize = 0x1000 Byte in my case */ }
- : 여기 (
내가
kernel_src/drivers/uio/uio_pdrv_genirq.c
및Hans J. Koch: Userspace I/O drivers in a realtime context
(장치 드라이버 튜토리얼을했다))이 스텁에는 다음 두 구조체가 있습니다.
of_device_id 구조체 :
static struct of_device_id my_match_table[] = { { .compatible = "my_driver", }, {0} }; MODULE_DEVICE_TABLE(of, my_match_table);
및 드라이버 구조체 자체 :
static int my_probe(struct platform_device *dev) { struct uio_info *uioinfo; struct resource *r = &dev->resource[0]; [...] uioinfo->name = dev->dev.of_node->name /* name from device tree: "my_device" */ uioinfo->mem[0].addr = r->start; /* device address from device tree */ uioinfo->mem[0].size = resource_size(r); /* size from device tree */ [...] }
static struct platform_driver my_platform_driver = {
.probe = my_probe,
.remove = my_remove,
.driver = {
.name = "my_driver",
.owner = THIS_MODULE,
.of_match_table = of_match_ptr(my_match_table),
},
};
지금 내 프로브 기능의 장치 트리의 속성에 액세스 할 수
커널이 모두 compatible
인 경우 스텁의 항목과 장치 트리에 프로브 기능이 호출됩니다.
비슷한 문제가있어서'kernel_src/drivers/uio/uio_pdrv_genirq.c'의 예제로 해결했습니다. 장치 트리의 정보는'of '기능 (Open Firmware)을 통해 수신됩니다. 커널 스텁도 필요합니다. Hans J. Koch : 실시간 컨텍스트에서 I/O 드라이버를 사용자 정의합니다. (일반적으로이 저자는 UIO에 대한 몇 가지 기사를 썼습니다.) – h0ch5tr4355
pltsfrom dtsi에 삽입 한 dts 파일 내용을 게시 할 수 있습니까? 어떻게 작성하고 테스트 했습니까? – Raulp
방금 사용자 지정 호환 및 적절한 reg 속성을 사용하여 사용자 지정 dtsi를 사용했습니다. 디바이스 드라이버에서'struct of_device_id'에서 compaitble을 가져 왔습니다. – h0ch5tr4355