2011-08-23 30 views
11

Có rất nhiều cấu trúc trong trình điều khiển không dây Linux mac80211. Những thứ như struct net_device, struct ieee80211_hw, struct ieee80211_vifstruct ieee80211_local v.v. Vì vậy, nhiều cấu trúc mà tôi không hiểu những thông tin họ chứa và khi chúng được khởi tạo.Làm thế nào để tìm hiểu cấu trúc của trình điều khiển không dây Linux (mac80211)?

Tôi làm cách nào để tìm hiểu về chúng và toàn bộ kiến ​​trúc của trình điều khiển không dây?

+2

Xin chào, Chào mừng bạn đến với stackoverflow. Câu hỏi hay, câu trả lời hay thường có câu hỏi hẹp hơn và cụ thể hơn câu hỏi bạn đã hỏi ở đây, rất rộng và mở. – Flexo

+1

Điều tốt nhất tôi thực sự có thể gợi ý từ câu hỏi này là đọc nguồn (http://lxr.linux.no/#linux+v3.0.3/ rất tiện dụng), ẩn trên một số danh sách gửi thư (http: // linuxwireless .org/en/developers/MailingLists) và thử một số thay đổi của riêng bạn. Nếu bạn có thể làm điều đó và sau đó đặt ra một câu hỏi cụ thể hơn, tôi nghĩ bạn sẽ nhận được câu trả lời tốt hơn nhiều. – Flexo

Trả lời

36

Bạn có thể muốn kiểm tra (mac80211 duy trì) Johannes Berg trượt ở đây: http://wireless.kernel.org/en/developers/Documentation/mac80211?action=AttachFile&do=get&target=mac80211.pdf

Họ có thể hơi lỗi thời nhưng sẽ cho bạn một nơi để bắt đầu.

Một mô tả mức độ cao của hạt nhân Linux WiFi stack:

  1. Điều quan trọng là phải hiểu có 2 con đường, trong đó không gian người dùng giao tiếp với kernel khi chúng ta đang nói về WiFi:
    • Đường dẫn dữ liệu: dữ liệu đang nhận được truyền từ trình điều khiển không dây đến lõi netdev (thường sử dụng netif_rx()). Từ đó lõi net sẽ truyền nó thông qua mã ngăn xếp TCP/IP và sẽ xếp hàng nó trên các socket có liên quan mà từ đó quy trình vùng người dùng sẽ đọc nó. Trên các gói đường dẫn Tx sẽ được gửi từ lõi netdev đến trình điều khiển không dây bằng cách sử dụng gọi lại ndo_start_xmit(). Trình điều khiển đăng ký (giống như các netdevices khác như trình điều khiển ethernet) một tập hợp các cuộc gọi lại hoạt động bằng cách sử dụng struct net_device_ops.
    • kiểm soát con đường: đường dẫn Đây là cách userspace điều khiển giao diện WiFi/thiết bị và thực hiện các hoạt động như quét/xác thực/hiệp hội. Giao diện không gian người dùng dựa trên liên kết mạng và được gọi là nl80211 (xem include/uapi/linux/nl80211.h). Bạn có thể gửi lệnhnhận sự kiện theo trả lời.
  2. Khi bạn gửi một lệnh nl80211 nó được xử lý bởi ban đầu cfg80211 mô-đun hạt nhân (mã của nó là dưới net/wireless và xử lý là trong net/wireless/nl80211.c). cfg80211 thường sẽ gọi trình điều khiển cấp thấp hơn. Trong trường hợp Phần cứng MAC đầy đủ trình điều khiển HW cụ thể nằm ngay dưới cfg80211. Trình điều khiển bên dưới cfg80211 đăng ký một tập hợp các op với cfg80211 bằng cách sử dụng cfg80211_ops struct. Ví dụ, xem trình điều khiển brcmfmac (drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c)
  3. Đối với Phần cứng MAC mềmmac80211 là mô-đun hạt nhân triển khai lớp MAC 802.11. Trong trường hợp này, cfg80211 sẽ nói chuyện với mac80211 sẽ lần lượt sử dụng trình điều khiển cấp thấp hơn theo phần cứng cụ thể. Một ví dụ về điều này là iwlwifi (Đối với chip Intel).
  4. mac80211 đăng ký chính nó bằng cfg80211 bằng cách sử dụng cfg80211_ops (xem net/mac80211/cfg.c). Trình điều khiển HW cụ thể tự đăng ký với mac80211 bằng cách sử dụng ieee80211_ops struct (ví dụ: drivers/net/wireless/iwlwifi/mvm/mac80211.c).
  5. Việc khởi tạo một NIC mới mà bạn đã kết nối xảy ra từ dưới cùng ngăn xếp. Trình điều khiển đặc biệt của HW sẽ gọi số ieee80211_allow_hw() của mac80211 thường sau khi thăm dò HW. ieee80211_alloc_hw() nhận kích thước của cấu trúc dữ liệu riêng được sử dụng bởi trình điều khiển HW. Lần lượt, các cuộc gọi cfg80211 wiphy_new() thực hiện phân bổ không gian đủ cho cấu trúc wiphy, ieee80211_local struct (được sử dụng bởi mac80211) và dữ liệu riêng tư của trình điều khiển HW (phân lớp được hiển thị trong mã ieee80211_alloc_hw). ieee80211_hw là cấu trúc được nhúng trong phạm vi ieee80211_local được "hiển thị" đối với trình điều khiển HW. Tất cả những điều này (wiphy, ieee80211_local, ieee80211_hw) đại diện cho một thiết bị vật lý được kết nối.
  6. Trên đầu trang của một thiết bị vật lý đơn lẻ (còn được gọi là phy), bạn có thể thiết lập nhiều giao diện ảo. Đây là những gì bạn biết là wlan0 hoặc wlan1 mà bạn kiểm soát với ifconfig. Mỗi giao diện ảo như vậy được biểu thị bằng một ieee80211_vif. Cấu trúc này cũng chứa ở các cấu trúc riêng cuối được truy cập bởi trình điều khiển HW. Nhiều giao diện có thể được sử dụng để chạy một cái gì đó giống như một trạm trên wlan0 và một AP trên wlan1 (điều này là có thể tùy thuộc vào khả năng HW).
Các vấn đề liên quan