proc을 사용하면이 예제에서와 같이 write & write 시스템 호출을 쉽게 사용할 수 있습니다. write on /proc entry through user space디바이스 드라이버에서 디버그 ---에 데이터를 쓰십시오.
하지만 debugfs를 사용하여 드라이버에서 사용자 공간으로 정보를 전달하고 있습니다. 이 두 예제 코드를 찾을 수 있습니다. 여기서 응용 프로그램은 mmap() 시스템 호출을 사용하여 debugfs 파일을 읽고 쓸 수 있습니다. http://people.ee.ethz.ch/~arkeller/linux/code/mmap_user.c
http://people.ee.ethz.ch/~arkeller/linux/code/mmap_simple_kernel.c
- 그러나 debugfs의 장치 드라이버 파일을 사용하여 통신하는 내 경우 요구 사항에 가정 :
user-space application <-------> debugfs file <-------> Device driver
그래서 내가 동일한 코드 mmap_simple_kernel를 사용할 수 있습니다. c --- 내 장치 드라이버 코드 --- >> 및 tr 드라이버에서 직접 debugfs로 데이터를 전송 하시겠습니까? 그러나이 경우에는 드라이버에 두 개의 file_operations 구조가 생겨 어떤 문제가 발생합니까? 올바른 접근인가?
또는 응용 프로그램이 다음과 같은 프로세스 인 경우 - mmap_user.c --- 동일한 프로세스 - 내 장치 드라이버 프로그램을 따르십시오. 그리고 debugfs 항목에 대한 seprate 모듈로 mmap_simple_kernel.c를 유지 하시겠습니까? kmemleak는 mm/kmemleak.c에 debugfs의를 사용하는 방법
당신은) (읽기'와'사용할 수있는 해결 방법으로 file_operation 구조체에
사용 debugfs_create_file_unsafe()를 .mmap 필드를 무시합니다'쓰기()'파일을 debugfs에 저장한다. 예를 들어 더 많은 양의 데이터를 전달해야한다면'mmap()'이 유용 할 수 있지만, 반드시 사용해야하는 것은 아니다. – Eugene
내 프로젝트 중 하나에서 debugfs 파일을 사용하여 사용자 공간에 일부 데이터를 제공하고 커널 공간 시스템을 제어합니다. 예를 들어 [this file] (http://code.google.com/p/)을 참조하십시오. kernel-strider/source/browse/sources/core/resolve_ip.c). debugfs (_ "i_addr"_, _ "func_name"_ 및 _ "func_i_start"_)에 3 개의 파일이 만들어지고 첫 번째 파일은 쓰기 가능이고 나머지 두 파일은 읽기 전용입니다. 'debugfs_create_file()'이 거기에서 어떻게 사용되는지를 보라. 나는 또한 다른 [debugfs_create _ \ * functions] (http://lxr.free-electrons.com/source/include/linux/debugfs.h)를 볼 것을 제안 할 것이지만, 그들은 당신의 필요에 더 잘 맞을 것이다. – Eugene
'mmap()'을 사용하는 또 다른 예로서, 링크는 [이 주석에서] (http://stackoverflow.com/questions/11501527/ioctl-vs-netlink-vs-memmap-to-communicate-between- 커널 공간 및 사용자 공간 # comment15219915_11501527). 당신이 성취하고자하는 것에 따라 이것은 유용 할 수 있습니다. – Eugene