2016-09-05 3 views
2

내 애플리케이션 용 단일 커널 모듈 드라이버를 만들고 싶습니다. 이것은 프로그래밍 가능한 로직의 AXIS FIFO와 인터페이스하며, 할당 된 메모리의 물리적 주소를이 장치에 보내어 프로그래머블 로직에서 사용해야합니다.kmalloc 메모리를 사용자 공간에 매핑

내 플랫폼 드라이버가 AXIS FIFO 장치를 인식하고 mmap을 사용하면 해당 레지스터를 내 사용자 공간 앱에서 사용할 수 있습니다. (previous post of mine)

또한 프로그래머블 로직에서 사용할 메모리를 할당하고 주어진 크기를 가진 kmalloc을 인수로 사용하는 IOCTL 명령을 사용하여 이렇게하십시오. 물리 주소를 사용하고자하므로 __pa (x)를 사용하여 실제 주소를 얻습니다.

이 할당 된 메모리에 액세스하여 올바른 정보가 RAM에 저장되었는지 확인하려면 어떻게해야합니까? Through

fd = open("/dev/mem", ...) 
va = mmap (phys_address, ....) 

내가 가지고있는 문제는 내가 잘못해서는 안되는 메모리 부분에 여전히 부당하게 액세스 할 수 있다는 것입니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?

감사합니다.

답변

0

이 작업을 수행하는 가장 좋은 방법은 할당 된 메모리에 매핑되는 /proc 장치 파일을 만드는 것입니다. 커널 모듈 kmalloc은 메모리를 가지고 proc 장치를 만들고 장치에 대한 모든 I/O 호출을 서비스합니다. 귀하의 userspace 프로그램이이 장치를 읽고 쓰거나, 아마도 mmap을 쓸 것입니다 (작동한다면 확실하지 않습니다 ...).