nl80211 라이브러리 및 cfg80211 구조
어떻게 하는지 알고 싶다.nl80211
그리고.cfg80211
상세하게 동작합니다.함수 흐름, 방법nl80211
와 같은 네트워크 도구와 상호 작용합니다.wpa_supplicant
,iw
.
참고할 만한 유용한 링크나 책을 추천해 주세요.
사용자 공간에서 무선 드라이버를 제어할 수 있도록 커널과 사용자 공간 간의 IPC 통신 프로세스가 사용됩니다.
- 처음에
ioctl
벤더 의존형 API가 사용되었습니다. - 1996년에 Jean Torrilhs는 무선 확장(WE 또는 WEXT)을 작성했습니다.
Wireless Extension(WE; 무선 익스텐션)은 일반적인 API로 드라이버는 일반적인 무선 LAN 고유의 사용자 공간 설정 및 통계 정보를 볼 수 있습니다.
2006년에 John Linville은 mac80211을, Johannes Berg는 cfg80211 및 nl80211을 작성했습니다.이 조합은 무선 확장을 대체하는 것을 목적으로 하고 있습니다.
+-------------+ | | | Userspace | | | +-------------+ ^ - - - | - - - - | nl80211 v +-------------+ | | | cfg80211 | | | +-------------+ +-------------+ | | | mac80211 | | driver | | | +-------------+
중요한 점은 nl80211/cfg80211/mac80211은 ioctl을 사용하지 않고 netlink를 사용한다는 것입니다.
따라서 iw, hostapd 또는 wpa_supplicant와 같은 툴은 몇 가지 netlink 라이브러리(libnl 또는 libnl-tiny 등)와 nl80211.h인 netlink 인터페이스 퍼블릭헤더를 사용합니다.
문서 수는 많지 않지만 libnl 문서를 읽고 iw 소스 코드를 읽어보시길 권장합니다(iw는 libnl을 사용하므로).
조금 더 상세하게 설명하겠습니다.nl80211
그리고.cfg80211
시스템의 다른 부품과 연계하여 작업합니다).user space
,kernel
,그리고.hardware
).
nl80211
는 사용자 공간 소프트웨어 간의 인터페이스입니다(iw
,wpa_supplicant
, 등) 및 커널(cfg80211
그리고.mac80211
커널 모듈 및 특정 드라이버)를 참조해 주세요.- WiFi 드라이버와 하드웨어는 Full-MAC 또는 Soft-MAC입니다(Wireless_network_interface_controller 참조).
cfg80211_ops
는, 풀 MAC 드라이버와 그 드라이버의 조작 세트입니다.mac80211
모듈 레지스터cfg80211
모듈.ieee80211_ops
Soft-MAC 드라이버가 등록하는 일련의 조작입니다.mac80211
모듈.
Linux 무선 드라이버 구조 학습 방법(mac80211)에 대한 답변을 참조하십시오.
인wpa_supplicant
, 의 코드를 따를 수 있습니다.src/drivers/driver_nl80211.c
. 이것은 wpa_supplicant 드라이버(커널 드라이버가 아니라 에서 사용되는 추상화)입니다.wpa_supplicant
코드)를 사용하는libnl
핵심과 통신하다cfg80211
모듈.언제wpa_supplicant
예를 들어 다음과 같이 스캔을 발행합니다.wpa_driver_nl80211_scan
호출됩니다.그 결과,netlink
라는 명령어를 가진 메시지NL80211_CMD_TRIGGER_SCAN
스캔에 필요한 모든 매개 변수를 포함합니다.
Linux에서 무선 스택의 기본 코드 흐름도를 작성했습니다.
> > wpa_signant > cfg > 11 > mac ath 11 > ath9k_htc 。
Linux 커널 5.4.31의 코드가 추적되었습니다.
여기 링크가 있습니다.
언급URL : https://stackoverflow.com/questions/21456235/how-nl80211-library-cfg80211-work
'sourcecode' 카테고리의 다른 글
Javascript - 날짜/시간을 moment.js로 포맷합니다. (0) | 2022.08.17 |
---|---|
Gradle: '11.0.2'에서 Java 버전을 확인할 수 없습니다. (0) | 2022.08.17 |
char**argv를 사용할지 char*ar*argv[]를 사용할지 여부 (0) | 2022.08.16 |
vue 및 multer를 사용한 Axios 다중 업로드 (0) | 2022.08.16 |
Vuex가 정의되지 않은 속성 '상태'를 읽을 수 없음 (0) | 2022.08.16 |