2013-05-30 5 views
4

Linux 커널 2.6.33을 사용하는 Virtex4 FPGA에 내장 된 PowerPC 405로 개발 중입니다.기존 Linux 장치 구조를 장치 파일과 연결

지금까지 필자는 FPGA에 구현 된 플랫폼 장치 용 드라이버를 커널로드 가능 모듈 형태로 작성했습니다. 장치는 플랫 Open Firmware Device Tree 파일을 사용하여 등록됩니다. 장치 파일을 만들려면 OF 함수를 사용하여 장치 노드를 얻은 다음 새로운 miscdevice을 등록한 다음 부 장치 번호를 자동으로 등록하고 나를위한 장치 파일을 만듭니다. 이렇게하면 miscdevice에 포함 된 device이 생성됩니다 (즉, miscdevice.this_device).

이제 DMA 작동을 수행해야합니다. miscdevice.this_device을 사용하여 dma_alloc_coherent() 함수를 호출하려고했지만이 장치는 버스와 연결되어 있지 않으며 항상 오류를 반환합니다. 나는 주위를 파고 들었고, struct of_device도 그것에 struct device (즉, of_device.dev)이 묻혔다. 내가 이것을 dma_alloc_coherent()과 함께 사용하려고했을 때, 정상적으로 작동했습니다.

이제 캐릭터 장치 파일을 관리하는 두 개의 다른 struct device 구조와 기본 Open Firmware 시스템 호출, 버스 및 DMA 트랜잭션을 관리하는 구조가 있습니다. 물론이 장치들은 sysfs에서 서로 연관되어 있지 않습니다.

제 질문은 OF 레이어에서 가져온 device 구조체의 장치 파일을 만들고 여타 장치 API로 새 장치를 만들지 말라고 어떻게 든 요청할 수 있습니까? 그러면 모든 것이 단일 device 구조와 연결됩니다.

+0

리눅스 커널 2.6.33이 아니겠습니까? –

+0

@PeterL. 네 감사합니다. 결정된! –

+0

'register_chrdev()'를 사용하여'/ dev /'에 문자 장치를 등록하고 다른 모든 것에'of_device.dev'를 사용하는 것은 어떨까요? ... – TheCodeArtist

답변

3

dma_alloc_coherent()에 대한 문제가 해결되었다고 생각합니다.

하지만 만든 miscdevice를 대체하기 위해 of_device 구조에 포함 된 장치 구조를 사용하는 것이 옳지 않다고 생각합니다. of_device는 Open Firmware 데이터베이스의 개체에 대한 설명입니다. 그리고 리눅스 디바이스 드라이버 모델에 따르면 디바이스 구조는 리눅스 커널의 다양한 디바이스 객체에 내장되어있다. 그리고 당신이 miscdevice를 하나의 문자 장치로 등록한다고 생각합니다. file_operations 구조체가 연관되어 있어야합니다.

한 단어로, 그들은 다른 견해이며 서로를 대체 할 수 없습니다.

+0

흠, 버스를 캐릭터 장치와 연결시키는 방법이 될 수 있습니다. BTW 나는 다른 dev API와 결혼하지 않았습니다. 나는 그것을 편리하게 사용할 뿐이다. 내가 이것을 할 수있게 해주는 또 다른 API가 있다면 그것을 듣고 싶다. –