일반적으로 허용되는 것보다 더 많은 파일 작업(열기, 쓰기 등이 아닌)을 허용하는 UART용 새 문자 장치 파일을 작성해야 합니다.
저는 임베디드 메인라인 Linux 커널(v 5.4)을 사용하고 있습니다.
UART 드라이버를 살펴보기 시작했고 많은 것을 발견했습니다.
- 첫째, tty 파일이 많이 있습니다. 나는 tty가 텔레타이프라이터(Teletypewriter)의 약자라는 것을 안다. 하드웨어 부품이 아닌가 싶습니다.
- 그런 다음 UART의 인터럽트를 처리하는 프로세서용 특정 드라이버가 있습니다.
- 그런 다음 serial_core.c에 작성된 uart용 문자 장치 드라이버가 있습니다.
serial_core.c에는 파일 작업 구조가 없지만 tty_options를 사용하는 것으로 나타났습니다.
여기서 무슨 일이 일어나고 있는 걸까요? 이 모든 파일이 서로 어떻게 연관되어 있는지, 그리고 정확히 어떤 역할을 하는지 이해할 수 없습니다. 보다 정확하게는 각각의 역할을 이해하고 싶습니다. 나는 uart용 문자 장치 드라이버를 작성하는 임무를 맡고 있지만 이러한 파일 중 어느 파일(어쩌면 모두?)을 내 드라이버가 교체해야 하는지 모르겠습니다.
감사해요,
답변1
이제 오랜 시간 동안 코드를 읽고 분석하고 다시 읽어보니 주석이 부족해서 이해하기 어려웠던 코드가 조금씩 이해가 되기 시작했습니다.
이 모든 것의 목표는 사용자 공간과 하드웨어 간의 통신 인터페이스를 만드는 것입니다. 이를 위해 모델을 사용자 공간과 커널 공간을 연결하는 레이어, 커널 공간과 하드웨어를 연결하는 레이어의 두 레이어로 생각할 수 있습니다.
사용자 공간과 커널 공간을 연결하는 계층은문자 장치 드라이버. 이것은TTY 레이어, 이는 /dev/에 있는 파일을 처리하고 사용자로부터 데이터를 가져와 커널 공간으로 전달하며 그 반대의 경우도 마찬가지입니다. TTY 계층은 내가 잘 이해하지 못하는 다른 많은 기능을 구현하지만 주요 목표는 이것이라고 말해도 무방합니다.
이제 두 번째 레이어가 커널 공간에서 분리되어 하드웨어에 기록됩니다. 이는 다음을 통해 수행됩니다.플랫폼 드라이버파일에imx.c. 드라이버는 하드웨어에 대해 자세히 알고 있으며 TTY에서 받은 정보를 기반으로 하드웨어를 제어할 수 있습니다. 따라서 TTY는 사용자가 말하는 내용을 기반으로 이 계층의 기능을 호출합니다.
UART는 범용 하드웨어이기 때문에 그다지 구체적이지 않은 기능과 루틴이 많이 있으며 플랫폼 드라이버(예: imx.c)를 개발하기 위한 기반으로 사용되는 파일로 그룹화할 수 있습니다. 이것은시리얼코어.c하드웨어별 드라이버를 개발하기 위한 API와 다소 유사하게 작동하는 파일입니다.