contributed by < jychen0611
>
從前 4 週的測驗題選出 3 題改進 (含延伸問題,要有對應的 Linux 核心原始程式碼案例探討),觀摩其他學員並參照授課教師進行的作業檢討和回顧,若有不能理解的部分,請標註出來。善用 HackMD 的語法 :::info 和 ::: 標註你的提問,在原有的筆記頁面更新即可。
紀錄閱讀〈因為自動飲料機而延畢的那一年〉的啟發,特別在學習本課程 5 週之後的感想,應具體描述你在課堂、課後創作,和觀摩其他學員的成果時,理解到系統軟體的開發態度、對細節的重視,以及理論和實務的融會貫通。
資工系的學生不會寫程式,機械系的學生不會做機械,電工系的學生不會焊電路 QAQ
回想我從小到大在學校接觸過 99.99% 的問題都具有一定程度上的理想化
飲料機的程式愷宏是寫不出來的,之所以能在一個月內完成,是因為我在大學期間就寫過好幾個網站了。愷宏能和工廠溝通、設計出可用的零件,是因為他在大一就在跑工廠做東西了。紘銘能輕易的設計出飲料機的電路,是因為他曾花了很多時間在電子電路課上頭,做了很多習題,纏著教授把每個疑惑都搞懂才罷休。
機會是留給準備好的人。經歷了前五週的學習,我才發現自己對於基礎學科的掌握程度是如此的差勁,統計沒學好,數學學了不會用,英文看不懂,連個簡單的程式碼都能有 bug。
有些項目看似修課考試都考得不錯,作業也都有完成,但實際上去面對問題的時候要如何應用所學卻是相當困難。
不過我大學階段甚至連有些科目的作業考試都沒做好,基礎科目還是在準備考研究所時才認真把內容理解,仔細推導出公式。
雖然研究所考試也沒考多好,但至少在步入考場那一刻我的內心是平靜的,考完試我的心理是踏實的。
上了研究所後才意識到打好基礎的重要性,也額外撥時間閱讀基礎科目的原文書,如果大學有現在的一半認真也許就不會被當了。
我到現在還有點像是隻無頭蒼蠅,不清楚自身的價值在哪裡,只能把當前的事先做出一定程度,也許是假裝努力吧,至少比以前直接擺爛還好看一點。
但到現在至少我確定的一點就是,我會去享受了解一件事情細節的過程,儘管我理解的速度可能不快。
研讀第 1 到第 6 週「課程教材」和 CS:APP 3/e (至少到第二章),紀錄心得和提問。針對自訂題目,例如貢獻程式碼到 Linux 核心,也將自己的構想和規劃記錄下來,隨後與授課教師一對一討論時可運用。
參照 2023 年期末專題,簡述你想投入的專案 (亦可建立新專案),至少選出 (或訂出) 二個。
vwifi 是個程式碼約
五百行三千行,具體而微的 WiFi 裝置驅動程式,採用 cfg80211 框架。目前 vwifi 支援 scan, connect, disconnect 等 cfg80211 的介面操作,並得以正確處理 Tx/Rx 封包。
TODO:
Align with recent cfg80211 header #61
commit 5add321 wifi: cfg80211: remove scan_width support
kernel version : v6.9-rc6 ~ v6.7-rc1
date : Sep 13, 2023
There really isn't any support for scanning at different
channel widths than 20 MHz since there's no way to set it.
Remove this support for now, if somebody wants to maintain
this whole thing later we can revisit how it should work.
commit bb55441 wifi: cfg80211: split struct cfg80211_ap_settings
kernel version : v6.9-rc6 ~ v6.7-rc1
date : Sep 25, 2023
Using the full struct cfg80211_ap_settings for an update is
misleading, since most settings cannot be updated. Split the
update case off into a new struct cfg80211_ap_update.
commit 66f85d5 wifi: cfg80211: modify prototype for change_beacon
kernel version : v6.9-rc6 ~ v6.7-rc1
date : Sep 13, 2023
Modify the prototype for change_beacon() in struct cfg80211_op to
accept cfg80211_ap_settings instead of cfg80211_beacon_data so that
it can process data in addition to beacons.
Modify the prototypes of ieee80211_change_beacon() and driver specific
functions accordingly.
Simply put, the change_beacon function now includes two additional parameters, fils_discovery and unsol_bcast_probe_resp, which are part of the cfg80211_ap_update structure.
TODO:
閱讀 802.11 Wireless Networks: The Definitive Guide, 2/e 建立基礎概念 筆記
對 802.11 有基礎的了解, 了解 MAC layer 狀態機:(ch7)
Scan
802.11 Authentication
Association
(802.1X Authentication)
(4 way handshake)
以及掌握 frame type 以及對應的 subtype: (ch4)
Data frame
data
QOS data
…
Management frame
beacon
probe resquest
probe response
…
Control frame
ACK
CTS
RTS
…
以及 frame structure, 尤其是 management 的 frame structure: (ch4)
MAC header
Mandatory field
Information element
針對特定主題查閱 IEEE 802.11 standard
Linux kernel: include/linux/ieee80211.h 當作 frame structure 的對照
閱讀 LKMPG
目前進度 : ch20
sk_buff and net_device
閱讀 vwifi 程式碼導讀
vwifi 筆記
commit 35ca058
Align with recent cfg80211 header (#63)
commit a8bdf8a
Support data rate and MCS (#67)
ref :
WI-FI 7 MCS TABLE
MCS Table
採用 802.11n(HT) 做為 PHY,設置如下 :
Modulation : 64-QAM
Data Bandwidth : 20MHz
Number of Spatial Streams : 4
參照 802.11n(HT) 調變對照表可得
Number of Data Subcarriers : 52
Number of Coded Bits per Subcarrier per Stream : 6
Coding : 5/6
OFDM Symbol Duration : 3.2 us
Guard Interval Duration : 0.8 us
經公式推算後可得 data rate = 260 Mbps 與顯示結果相符
即
為了維持命令一致性,改採用 sudo iw dev [interface] set txpower auto/limit/fixed [transmit power (mBm)]
設置 transmit power。
由於使用上述命令會導致 wdev
參數為 NULL,因此新增函式 wiphy_get_vwifi_vif
取得 virtual interface。
此外,亦利用參數 type
以區別命令為 auto/limit/fixed。
auto : 使用預設傳輸功率
limit : 限制功率上下限於特定值
fixed : 可隨意設置功率
rickywu
以 sin 函數使訊號強度隨時間周期性變化並落在合理範圍內,然而訊號強度與距離和障礙物阻擋有關 (Path Loss and Shadowing)。
因此我想設定一個合理的二維平面空間範圍(約莫等於 wifi 的極限傳輸範圍),使 STA 生成時隨機座落在此範圍內,並設定多個 AP ,使 STA 能選擇訊號品質較高的 AP 連線,模擬真實訊號強度。
情境假設為以下列條件:
receive power
求法一
求法二