attribute
-
[LINUX][KERNEL] sysfs attribute 구조체 및 매크로 상속 관계Linux/kernel 2023. 8. 3. 02:28
목적 - 어느 날 문득 sysfs attribute를 만들려고 하는데, ATTR과 DEVICE_ATTR 중에 뭘 써야할 지 고민했다. 그래서 정리를 좀 해보려고 한다. 내용 - 결론부터 말하면 모든 *_DEVICE_ATTR[_*] 패밀리들은 결국 ATTR[_*]을 상속한다. 결국 최상위가 ATTR[_*]란 소리이다. 구조는 아래와 같다. /include/linux/sysfs.h struct attribute { const char*name; umode_tmode; #ifdef CONFIG_DEBUG_LOCK_ALLOC boolignore_lockdep:1; struct lock_class_key*key; struct lock_class_keyskey; #endif }; ... ... /include/li..
-
[LINUX][KERNEL] sysfs store/show 함수의 반환값Linux/kernel 2023. 8. 3. 02:28
글 쓴 목적 - sysfs에 attribute를 만들면서 매번 반환값을 sprintf() 함수로 반환했는데, 상황에 따라 어떤 반환값을 반환해야 하는지를 이번에 정확히 알아보자. 내용 - 커널의 공식 문서를 참고하는게 가장 좋은 방법으로 보인다. 아래 Reference에서 제일 첫 번째 링크를 참고했다. 내가 중요하다 생각되는 부분만 가져왔다. 1. sysfs는 buffer의 사이즈를 PAGE_SIZE 만큼 할당하고 store() / show() 함수에 전달한다. 2. show() 함수는 buffer에 써진 바이트의 수를 반환해야 한다. 3. show() 함수는 formating value를 return 해야 하는 경우 sysfs_emit() or sysfs_emi_at() 함수를 사용해야 한다. for..
-
[LINUX][KERNE][ISSUE] sysfs store() 무한으로 계속 write하는 이슈Linux/kernel 2023. 8. 3. 02:14
원인 - sysfs attribute를 만들고, shell에서 특정 값을 write하는데 쉘에서 응답이 없음. dmesg를 확인해보니, write가 계속 무한 루프를 돌고 있음. 원인 파악 과정 1. 리턴값을 정수 단위에서 아래로 구분. count 값보다 큰 경우 -> 정상 동작 count 보다 엄청나게 큰 사이즈를 테스트 해보지는 않았다. buf 사이즈가 기본 PAGE_SIZE이기 때문에, count에 적당히 큰 값을 더해서 테스트했다. count 값과 같은 경우 -> 정상 동작 count 값보다 작은 경우 -> 에러 발생. 만약 count 값보다 작거나 0 이라면, 무한 루프. 만약 음수를 리턴하면, Errno로 맵핑되는 문자열이 출력된다. 즉, 무한 루프를 돌지 않고 에러 메세지를 출력하고 종료한다..