Q&A 게시판

리눅스 커널에 대한 Q&A 게시판 입니다. (비밀글 체크는 꼭 필요한 경우에만)

attribute 속성 구조체 질문입니다.

작성자
초보자
작성일
2019-04-14 16:49
조회
646
안녕하세요 디바이스 드라이버를 처음 공부하는 사람입니다. 여러 사이트에서 보면서 공부하다 여기 블로그에서 정독을 하고 있는데요..너무 어려운게 많아서 질문드립니다.
다른 사이트에서는 못 봤는데 속성구조체가 정확히 어떤 일을 하는지 모르겠습니다. 소스 분석들을 해주셨는데.. 이해가 잘 안되어서요.. 그리고 추가적으로 device구조체 분석이랑 디바이스 등록 함수인
device_register()분석 일일히 해주셨는데 이거 어렵더라구요.. 하나하나 소스들 이해가 안되는데 보통 개발자분들은 이런거 다 이해하고 코드를 짜는 건가요??
전체 3
  • 2019-04-15 11:20
    안녕하세요?

    최초 리눅스 커널에서 디바이스 드라이버가 캐릭터, 블럭, 네트워크 등으로 구분되어 등록되었습니다.
    최근에는 이러한 디바이스 드라이버를 하이라키하게 관리하고 있습니다. 이러한 모델을 디바이스 드라이버 모델이라고 합니다.

    디바이스 드라이버 모델은 속성 파일이라는 것을 지원합니다.
    디바이스의 상태를 보거나 설정할 때 read/write/ioctl 등의 프로그래밍을 통해서 설정할 수 있지만,
    프로그래밍 없이 쉘 상태에서 보고 설정할 수 있는 기능을 제공하는데
    이를 속성 파일을 통해서 리눅스 커널의 디바이스 드라이버에게 전달할 수 있습니다.

    예를 들어 네트워크 카드의 스피드를 알고 싶을 때 ioctl() 함수를 사용하지 않고,
    cat 명령을 사용하여 해당 드라이버가 제공하는 속성 파일을 볼 수 있습니다.

    속성에 대해서는 간단히 말씀드렸고, 마지막 질문은 간단하군요.
    처음 디바이스 드라이버 개발을 하시는 분들은 API 위주로 스터디하는데,
    당연히 API의 사용법과 구조체들의 사용설명만을 익힙니다.
    그러다가 내부 구조를 더 잘 알고자 할 때, 조금씩 내부 소스를 분석해나갑니다.

    처음부터 device_register() 같은 API를 다 분석한 후에 코딩하시는 분은 없으리라 믿습니다.

    수고하세요.

    • 2019-04-24 09:46
      답변감사합니다. 그럼 속성파일을 이용하는 건 테스트할 때? 하고 만약 완제품으로 나올 시 속성파일로 제어하지 않고 open read write 프로그래밍으로 디바이스를 제어하나요??

  • 2019-04-24 12:35
    드라이버를 개발할 때 유저용으로 여러 가지 채널을 사용할 수 있습니다. sysfs 속성 파일들, 캐릭터 디바이스, netlink, procfs 등등 여러 가지 채널 중 하나만 지원해도 되고 동시에 여러 개를 지원해도 무방합니다. 사용자를 위해 어떤 기능을 줄건가에 대한 고민은 설계자 의도입니다. sysfs 속성 파일을 제공하는 이유는 쉘에서도 이용하기 쉽기 때문입니다.