하드웨어를 추상화하는 C언어로 된 라이브러리를 구현한다면?
글쓴이: progsows / 작성시간: 목, 2007/03/29 - 9:04오후
안녕하세요.
요새 리눅스 상에서 하드웨어를 추상화(?) 하는 계층 (라이브러리)를 제작해야 하는 일이 생겼습니다.
즉... A라는 일을 하는 장치를 리눅스 시스템에 연결해 준다고 할 때,
이 장치는 /dev/Acase1이라는 이름으로 된 디바이스 파일일 수도 있고,
다른 회사의 것이라면 /dev/Acase2라는 이름으로 된 디바이스 파일일 수도 있고,
시리얼 통신을 사용하여 특정한 프로토콜로 통신하여 A라는 일을 수행할 수도 있습니다.
이런 다양한 종류의 장치 형태에 상관없이 상위 프로그램에서 그냥 do_A()라는 C언어 함수 호출을
통해 A라는 일을 할 수 있도록 하는 HAL (Hardware Abstraction Layer) 비스무리한 API 계층을
구성해야합니다.
물론 위의 예 중 각각의 경우 Acase1.c, Acase2.c, Aserial.c 등의 파일은 만들어 줄 수 있겠지요.
이것을 상위 프로그램이 쓸 수 있는 do_A()라는 함수와 어떻게 깔끔하게 연결해 줄 수 있을지 좋은 생각이
나질 않네요. 물론 사전에 어떤 종류의 장치가 달려있는지 정보는 제공을 해 준다고 가정합니다.
그 정보를 가지고 컴파일 시 Acase1_do_A() -> do_A(), 혹은 Acase2_do_A() -> do_A() 이런 식으로
연결(?) 해 줄 수 있는 좋은 방법이 없을까요?
고수 여러분들의 고견을 부탁 드리겠습니다. 그럼~ 꾸벅~
Forums:
저도 왕초보지만...
저도 왕초보지만... 함수포인터를 이용할 수 있지 않을까요?
------------------------------------------------------
In simplexitate est opportunitas. --cppig1995
"x86-64 운영체제를 만들자" 강좌: http://kldp.org/taxonomy/term/3663
2007학년도 대전월평중학교 1학년 3반 학급카페: http://cafe.naver.com/djwp0713
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
autotools를 사용해서
autotools를 사용해서 컴파일 당시에 해당 장치와 관련된 파일만 컴파일하게 하는것이 가장 깔끔한 방법이 아닐까요? 즉, 각 장치별로 작성한 소스파일에는 모두 do_a() 라는 함수가 정의되어 있겠고요. 컴파일 타임에 autotools가 조건을 체크해서 필요한 파일 하나만 컴파일을 하는거죠.
======================
BLOG : http://superkkt.com
======================
BLOG : http://superkkt.com
고견들
고견들 감사합니다.
후에 윈도우 상에서도 동작하도록 하려면 아무래도 함수 포인터 방법이 더 낫겠지요?
제 생각이 맞는지는 모르겠습니다만...
A라는 일을 하는
A라는 일을 하는 하드웨어가 여러가지인것 같네요.
그게 컴파일타임에 확정되는것도 아니고,
쓰면서 바뀔수도 있는것 같은데,
그럼 do_A() 안에 switch() 문이 들어가는게 맞을것 같은데,
그건 아닌가요?
emerge money

https://xenosi.de/
댓글 달기