다음 사양으로 파일을 만들려고 합니다.
debugfs 하위 디렉터리의 "myfile" 파일은 다음과 같습니다.읽기 전용모든 사용자가 읽고, 읽을 때 jiffies 커널 타이머의 현재 값을 반환해야 합니다.
my_init
직접 호출되는 함수에 다음 코드 줄을 작성했습니다 module_init(my_init)
.
if (!debugfs_create_u32("myfile", 0444, handle, (u32*)&myfile))
goto fail;
실행할 때 make
다음 오류가 발생합니다.
error: invalid use of void expression
if (!debugfs_create_u32("myfile", 0444, handle, (u32*)&myfile))
누군가가 이 오류를 해결하는 데 도움을 줄 수 있다면 좋을 것입니다. 미리 감사드립니다 :)
답변1
반환 값이 debugfs_create_u32
에서 제거되었습니다.2b07021a940ce1cdec736ec0cacad6af77717afcv5.7 입력:
debugfs: debugfs_create_u32()의 반환 값을 제거합니다. debugfs_create_u32()의 반환 값은 필요하지 않기 때문에 아무도 확인하지 않으므로 앞으로는 누구도 이를 시도하지 않도록 반환 값을 void로 설정합니다.
그래서 당신은 그것을 제거할 수 있습니다 if
.
나에게 문제는 모듈이 언로드된 후 debugfs 파일을 삭제하고 싶은데 내 항목이 debugfs의 최상위 수준에 있고 NULL이므로 그냥 할 수 없다는 것입니다 debugfs_remove_recursive
.
그래서 나는 치과 치료를 받을 것이라고 생각했습니다.
debugfs_lookup("basename", NULL)
여러 항목이 있는 경우 네임스페이스를 너무 많이 오염시키기 때문에 최상위 수준에서 debugfs 항목을 생성하면 안 될 수도 있습니다.
그러나 일부 매우 유사한 호출은 여전히 약간 일관성이 없는 파일을 반환합니다. 예를 들면 다음과 같습니다.
struct dentry *debugfs_create_ulong
그래서 저는 이것이 단지 API 버그라고 생각합니다. 커널 개발자는 내가 한때 생각했던 완벽한 신이 아닌가? :-영형