-
디바이스 드라이버 / 알게 된 것들Linux/Linux Device Driver 2020. 8. 28. 23:59
register_chrdev() 함수의 주번호를 0으로 설정하면 알아서 남는 주 번호로 설정해 준다. 1. 파일 오퍼레이션 open 함수의 리턴값은 무조건 0으로 해줘야 된다. 그렇지 않으면 응용프로그램에서 파일이 열리지 않는다. 파일 오퍼레이션 함수에서 하드웨어 존재하지 않거나 커널 메모리가 부족하거나 디바이스가 이미 사용 중인지를 확인하는 코드를 두어 유저영역에서 open함수의 반환값으로 무슨 문제로 디바이스 파일이 열리지 않았는지 확인 할 수 있다. 2. 파일 디스크립터의 close 함수는 어떤 리턴 값을 사용해도 0으로 리턴된다. 응용 프로그램은 close() 함수의 반환값을 참고하지 않기 때문에 실제 사용에는 의미가 없다. 3. 커널에서 문자열 데이터를 읽을 때 응용 프로그램에서 read 함수의..
-
디바이스 드라이버 / 드라이버를 잘 만드려면Linux/Linux Device Driver 2020. 8. 24. 13:40
커널 소스 탐색 디바이스 드라이버를 작성하거나 이미 작성된 디바이스 드라이버를 연구할 경우, 사용중인 함수가 어떻게 구현되는지를 검토하거나 관련 데이터를 찾으려면 반드시 커널 소스를 탐색해야 한다. 처음 리눅스 커널 소스를 접하는 사람은 방대한 크기의 소스 트리 때문에 원하는 대로 검색하기가 쉽지 않다. https://elixir.bootlin.com/linux/latest/source Linux source code (v5.8.3) - Bootlin elixir.bootlin.com 커널 소스를 찾으려면 이 사이트를 참조하는 것이 좋다. 리눅스 커널 버전 별로 모든 소스가 다 있다. 내가 찾고 싶은 함수를 검색하면 어디서 정의되었는지 어디서 참조되었는지 다 나온다. 내 버전에 맞는 커널 소스를 뒤져보자..
-
MakefileLinux/Linux Device Driver 2020. 8. 24. 12:55
밑의 사이트에 들어가서 궁금한 키워드를 control + F로 검색해서 작성하자. 영문판 http://www.gnu.org/software/make/manual/ GNU Make Manual - GNU Project - Free Software Foundation GNU Make Manual Free Software Foundation last updated January 19, 2020 This manual (make) is available in the following formats: You can buy printed copies of some manuals (among other items) from the Free Software Foundation; this helps support FSF ..
-
인터럽트 후반부 처리Linux/Linux Kernel 2020. 8. 16. 17:06
디바이스 드라이버에서 등록된 대부분의 함수들은 다른 인터럽트를 금지시킨 상태로 수행하기 때문에 인터럽트 핸들러를 구현할 때는 가급적 빠르게 처리하고 종료하도록 만들어야 한다. 하지만 디바이스 드라이버의 인터럽트 핸들러를 작성하다 보면 복잡한 연산을 수행할 수 밖에 없다. 그럼 어떻게 해야할까? 바로 꼭 필요한 데이터 처리 또는 빨리 실행되어야할 코드는 인터럽트 핸들러에서 처리하도록 하고, 시간이 걸리는 복잡한 연산 또는 실시간으로 빨리 실행하지 않아도 되는 코드은 인터럽트 핸들러가 종료된 이후에 처리하도록 구성하면된다. 이 인터럽트 핸들러가 종료된 이후에 처리하는것이 인터럽트 후반부 처리다. Q. 그럼 어떠한 인터럽트 후반부 처리 방법을 사용해야할까? A. 어떠한 인터럽트 후반부 처리를 사용할지를 결정하..