기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.
Wifi(무선LAN)가 장착된 PC에서는 어떤 Linux 배포판을 install하더라도,
일단, 배포판이 PC에 장착한 Wifi(무선LAN)의 device driver만 제공한다면, 항상 잘 동작합니다.
그리고, Wifi 관련 utility(ex: iwconfig / iwlist / iwpriv /…)도 모든 배포판에서 작 동작합니다.
즉, APP과 kernel(driver)간에 공통된 interface와 API를 사용하여 동작하는 것으로 추정합니다.
위의 동작원리는 임베디드 리눅스도 마찬가지로 생각합니다.
그러나, 일반(정통) 임베디드 리눅스가 아닌, android가 탑재된 임베디드 시스템의 경우는
Wifi Chip maker(or 모듈 maker)마다 android을 수정해야 합니다.
그리고, 위와 같은 일반적인 utility(ex: iwconfig / iwlist / iwpriv /…)를 사용하는 것이 아니라,
Wifi chip maker에서 전용으로 제공하는 utility를 사용하기도 하더군요…
(브로드컴사의 칩셋의 경우는 wl or bcmtool이라는 utility를 사용하더군요…)
개발자 입장에서는 PC나 일반 임베디드리눅스처럼
일관(통일)된 방법, 일관된 interface, 일관된 utility를 사용하면 참 좋을 것 같은데요…
android에서는 왜 일관된 방법을 사용하지 않고,
chip(모듈) maker마다 다르게 포팅을 해야 하는지요 ?
이렇게 chip maker마다 방법이 다르다면,
chip maker의 지원이 없다면 아무리 뛰어난 개발자라도 wifi의 포팅은 불가능한가요 ?
정확하지는 않지만 Android에서는 ICS에 부터 Wireless Extension 대신에 NL80211을 사용하기 시작했습니다.
android는 wpa_supplicant를 이용하는 데, Wi-Fi Direct(P2P)와 같은 기능이 추가되면서 nl80211을 이용하기 시작한것 같습니다. nl80211도 WE처럼 표준인터페이스여서 iw 와 같은 utility로 기본적인 scan, association등은 가능합니다.
Chip vendor에서 nl80211가 같은 기본 인터페이스로 동작은 하지만 고도리님께서 말씀하신 것처럼 Power management나 p2p 관련 처리등을 위해 vendor별로 틀리게 작업하므로 chip vendor의 지원이 없으면 사실상 불가한것으로 보입니다.
제 견해로는 android는 Wi-Fi 관련해서 Wi-Fi Framework. Wi-Fi HAL, wpa_supplicant와 같이 일관되게 동작하나 그 아래 wpa_supplicant 드라이버 아래 부터는 chip vendor에 의한 부분이므로 chip vendor별로 달라지는 것 같습니다.
1. SDIO로 사용하는 경우가 많으나, 연결 핀들이 서로 틀립니다. ex> power management
2. 전원관리 등 여러가지 특수 function을 제어하기 위해서 틀리고요.
3. android가 wpa_supplicant를 사용하기 때문에 그렇기도 합니다......
4. wireless extension만 써 주면 좋은데, 거기에 자기네 기능을 좀 더 많이 넣다보니 case by case입니다.
5. module maker의 지원없이 포팅은 가능하지만, 한계가 있습니다.
반드시 무선관련 제품은 모듈 maker 혹은 chip vendor의 지원이 있어야 합니다.
참고로 예전 중국서 폰을 만들었는데 chip vendor의 기술지원 문제로 양산이 불가능했던 적도 있었습니다.
특정 chip vendor의 경우 module maker가 아니라 chip maker의 지원이 필요한 경우가 있더군요.
참고로, android에서는 그나마 나름 표준적인 방법을 제공하나, wifi/bt 등이 엮이면서 각 vendor들이 자기네 stack을 넣기 시작하면서 좀 이상하게 되었습니다.
그 선두에 broadcom이 서 있는 편이라고 보여지더군요. 근래 bludroid인가 먼가를 보니....