搜尋此網誌

2025年10月12日 星期日

Adb Wifi Debug & N100 Wifi 除錯

緣起:


    這陣子有想要跟 dc 的一位群友分享 esp01 的東西,可能會需要分享接線還什麼的,想說到時在 dc 用螢幕分享電腦上的程式時,用 scrcpy 連手機,再開鏡頭就能同時分享周遭的畫面,我是有 usb webcam 啦,但它的畫質很差.... 。

    我這時才發現我還沒開過我那台 pixel 手機的開發人員模式 XD (好像也正常,買來後都完全沒拿來做跟開發有關的東西),進入開發人員的選項來開啟 USB 偵錯時,注意到有多了無線偵錯的選項


    哇嗚,能透過 wifi 來進行 adb debug ? 太酷了吧,用 wifi 的話就不會有像使用 USB 一樣的問題,有時手機動一下,啪,斷線。操作起來其實蠻簡單的,這篇其實最主要是記錄除錯的過程,不是說 adb 還 scrcpy 有什麼問題,有問題的是我 N100 的 wifi 卡。


Adb Wifi Debug:


    一開始不確定怎麼用,有先去看影片。先去 scrcpy git,根據你系統下載最新的 release,裡面除了 scrcpy 外,還有 adb 能直接使用。

    手機啟用 USB 偵錯後,用 USB 線接上你的電腦,授權這台電腦 USB 偵錯,讓裝置都連同一個 wifi 後,開啟手機的無線偵錯,允許在這 Wifi 下使用無線偵錯功能


    在解壓後的 scrcpy 資料夾下,用指令

./adb connect 192.168.1.102:39123


    如果就只有這個 adb device,可以直接在 terminal 使用 ./scrcpy,就能連上手機畫面了。


網路除錯:


    正常來說,這篇文章到上面那段就結束了,但我實際在操作時,發現他畫面會出來個 3 秒,然後卡住,接著 Wifi 會沒辦法上網,搞得我必需要重啟 NetworkManager 才行,不管試幾次都會出現這錯誤,超煩的,一開始以為是因為我有在我的 N100 上做 NAT 才會這樣,花了很多時間在調整跟測試 iptables。

    我最後發現,原來是 driver 的問題,那台 N100 的 Wifi 卡是 Realtek 的,官方的驅動在 Linux 上有不少的問題。我最後是把 Wifi 卡換掉,把 Lenovo 筆電的 Wifi 卡拔下來給 N100,它的 wifi 卡是 intel 的,之後再次使用 scrcpy 就沒問題了。

    在除錯的過程有學到很多東西,所以想寫下來,接下來紀錄的是我的除錯過程 (再次感謝 gpt 老師。


ip neigh:


    當時先試著用 tcpdump 觀察 wl4s1,發現 scrcpy 的畫面卡住時,出現這些訊息


    嗯.... 有意思,手機開始 ARP 廣播問說誰是 N100,突然找不到 N100 的 ARP 對應資訊?我的 Wifi 卡的狀態可能出問題,gpt 建議我用 ip neigh show 查看,下了指令後,看到這些


    網卡的 ipv6 介面 FAILED ,會不會就是 ipv6 的問題?我的 N100 嚐試透過 IPV6 路由發送封包給手機,但手機沒回應。所以,我試著手動把那個 ipv6 neigh 清除看看

sudo ip -6 neigh del fe80::9a03:8eff:fe12:f80b dev wlp4s0

    清完後重試 scrcpy..... 嗯,沒用,再試另一個方法,鎖定手機的 ARP entry,讓 ARP cache 不會丢失。

sudo ip neigh replace 192.168.1.102 lladdr <手機MAC> dev wl4s1 nud permanent


    還是沒用,下一步 !!!


顯示與清除 iptables 規則:


    再來試著把之前手動新增的 iptables 規則給砍了,首先是 ip forward,顯示所有 FORWARD 規則,--line-numbers 會顯示行號,方便刪除時參照用

sudo iptables -L FORWARD -n --line-numbers

    要砍掉規則的話,用

sudo iptables -D FORWARD {行數}

    我那時新增的 FORWARD 規則在第 6、7 行,砍完 7 後再砍 6,要注意它的行數會即時更新,刪除一條後,下面的會往上移。

    再來是 NAT 的 POSTROUTING 規則,下指令查看

sudo iptables -t nat -L POSTROUTING -n --line-numbers

    我當時看是有 3 行,最後一行大概就是我自己設定的,所以把第 3 行砍了

sudo iptables -t nat -D POSTROUTING {行數}

    自訂的 iptables 規則都砍光後,再次測試,還是一樣。我這時候開始懷疑是 Wifi 卡的問題了。


Wifi 介面檢查:


    網路再次卡死後,我有試著 ping Wifi Router,它跟我說 Unreachable,好哦,用一套組合拳查看 Wifi 卡的狀態

# 1. 檢查 Wi-Fi 狀態
# (有,用這指令也能看到 Wifi 卡的上傳跟下載速度)
sudo iw dev wlp4s0 link

# 2. 看 Wi-Fi 是否仍然連線
# (有)
nmcli device status

# 3. 檢查是否還有 IP
# (有)
ip addr show dev wlp4s0

    還有再用 ip neigh 查看一次,這次注意到有 "192.168.1.1 DEV WLP4S0 INCOMPLETE",看來,真的是 Driver 或 Firmware 層掛掉。

    所以下一步是檢查 Wifi 卡的 Driver,用指令

sudo lshw -C network

    我看到,我的 Wifi 的 driver 是 rtw_8821ce


    雖然無法確定 gpt 是怎麼得出這結論的,但經過這一陣折騰後


    我想試著更換驅動模組

sudo modprobe -r rtw_8821ce
sudo modprobe rtw_8821ce

    它跟我說 rtw_8821ce not found,操

    接下來試著禁用這模組的載入,在 /etc/modprobe.d 新增 blacklist-rwt8821ce.conf 檔,然後裡面寫

blacklist rtw_8821ce

    存檔->重開->沒用,操。最後想到我還有 Lenovo 筆電拔下來的 Wifi 卡可以用,就把它們兩個交換,然後就沒問題了,去你的 Realtek。 我師傅跟我說,有開源的 Realtek Wifi 卡驅動可以試試,但我那個 intel 的 Wifi 卡上傳跟下載速度都有 800 多 Mbps,實在是沒理由再把那個 Realtek Wifi 卡再裝回去 (它 600 多而已),之後有機會再試試自已裝驅動吧。



沒有留言:

張貼留言