안드로이드 커널에서 I2C-core 포팅하는 방법 조언 부탁드립니다.
현제 제가 개발보드에 붙어있는 센서 디바이스를
일반 GPIO 2개를 이용해서 I2C 통신을 해야합니다.
안드로이드 커널 소스를 만져 보는것도 처음이고
커널에 I2C 드라이버를 처음 구현하다 보니 아래 링크를 찾았는데
http://decdream.tistory.com/141
static struct i2c_gpio_platform_data i2c_touch_platdata = { .sda_pin = GPIO_TOUCH_SDA, // gpio number .scl_pin = GPIO_TOUCH_SCL, .udelay = 2, .sda_is_open_drain = 0, .scl_is_open_drain = 0, .scl_is_output_only = 0 }; static struct platform_device sec_device_i2c_touch = { .name = "i2c-gpio", .id = 4, // adepter number .dev.platform_data = &i2c_touch_platdata, };
링크에 보면 위에 처럼 GPIO를 2개를 SDA, SCL 설정하는 부분까지는 이해가 되었는데
정작 디바이스랑 i2c 통신을 위해서 write/read 할 때 어떤 API를 써야하는지
slave address는 언제 전달해야하는지가 이해가 안됩니다.
링크의 설명을 보면 "해당 i2c 를 사용할 device 에서 adepter 를 불러서 등록" 이라고 되있는데
링크의 샘플 소스가 완벽히 정리되지 않고 뭔가 빠진것 같은데
오실로스코프 물려서 찍어보면 도통 SDC, SCL이 꿈쩍도 안하고 있습니다.
I2C는 low level로 SDA, SCL을 high/low로 신호 하나하나 만들어서도 구현해 본 경험이 있는데
리눅스 커널에서 제공하는 i2c-core 엔진을 이용하려면 어떻게 구현해야하는지
도통 모르겠어서 조언을 구합니다.
퀄컴기반 피쳐폰에서 개발을 해와서 리눅스 커널에 대한 경험이 없습니다.
여러 샘플 소스들이 커널에 들어있는데 도통 FEATURE 처리가 되어있지 않아서
어디까지 가져다 쓰고 참고해야 하는지 구분을 못하는게 문제입니다.
3일을 혼자 삽질하다가 도통 갈피를 못잡아서 KLDP를 찾게 되었습니다.
gpio에 할당된 SCL, SDA 2개를 이용해서 i2c 통신을 구현하는 방법을 찾습니다.
관련된 샘플 소스나 참고할만한 링크를 알고 계시면 도움을 부탁드립니다.
Documentation/driver-model/pl
Documentation/driver-model/platform.txt
Documents/i2c/writing-clients
문서 보시고,
말씀하셨다시피 참고할 수 있는 샘플이 헤아리기 곤란할 정도로 많으니... 공부 잘 하시고요.
링크하신 블로그에서 빠진 것을 구지 꼽자면,
platform_device_register() 를 해야 한다는 것,
CONFIG_I2C_GPIO 가 y(또는 m) 이어야 한다는 것,
정도 밖엔 없는 것 같습니다.
나머진 프로그래머가 쉽게 정의할 수 있거나,
리눅스 커널의 일반적인 부분이거나,
i2c 클라이언트 드라이버의 일반적인 부분이니
문서를 보시건 수많은 예제를 보시건 알아서 잘 해석하시고요.
FEATURE 에 관한 언급... config.h 같은 놈에 다 때려넣고 사용하는 방식이 좋다면,
arch/*/configs/ 에 있는 파일들을 참고해서 본인의 config 를 직접 만드셔도 되고요,
아직까지 나무만 보시고 숲을 보신 적이 없기 때문에 그런 말씀을 하신 것이니,
시간이 지나면 179도 정도 생각이 바뀌실거라 생각합니다.
config 에 대한 다른 견해가 있으시다면, make help 했을 때 나오는 도움말을 꼭 먼저 읽어보세요.
답변 감사합니다.
알려주신 두개의 문서를 읽어보고 다시한번 공부해보겠습니다.
FEATURE에 대한 부분은 그동안 작업한 내용을 FEATURE로 묶어서
해당 기능별로 확인하던 방식이 익숙했었는데
리눅스에 오니 모듈별로 CONFIG_... 피쳐가 처리되고
소스의 수정내역이나 기능별로는 피쳐링이 안되어 있어서
i2c 통신만을 위해 어느 소스들을 어디까지 퍼다가 써야하는지 도통 파악이 안됬었습니다.
빨리 커널 소스와 개발환경에 익숙해 지는것이 순서일듯 한데..
번개불어 콩궈먹을 일정을 따라가려니 참 암담하네요.
답변 감사합니다.
혹시라도 좀 더 쉽게 접근할 수 있는 참고자료가 있다면 소개 부탁드립니다.
댓글 달기