OpenWrt 學習筆記

一名新鮮人與一名過來人的對話交流實錄。
採主題式回合交流編集。

章節

  • EP1. 刷機
  • EP2. /etc/config 與 UCI
  • EP3. Web UI LuCI
  • EP4. 橋接、延伸、中繼

EP1. 刷機

EP2. /etc/config 與 UCI

參考連結

EP3. Web UI LuCI

What is LuCI?

參考連結

EP4. 橋接、延伸、中繼

EP5. Porting Morse Micro Module driver to Raspberry Pi 3

Prepare

Hardware

  • Raspberry Pi 3 Model B+(TODO: 3B+ ?, 型號資訊可參考這裡)
  • Morse Micro Module AHM26108D(TODO: 型號資訊?)
  • Host PC Ubuntu 20.04 LTS(Build System)

Software

  • Raspberry Pi OS
  • MM6108 Linux Driver Release Package 1.12.4 (TODO: 有 public URL?)沒有
  • Pre-install package on the Host PC
Pre-install package on the Host PC
$ sudo apt-get update
$ sudo apt-get install unzip git make g++ gcc flex bison libc6-dev libncurses5-dev libssl-dev bc

Install Raspberry Pi 3 OS

Download Raspberry Pi Imager to install Raspberry Pi OS
https://www.raspberrypi.com/software/

請安裝Raspberry Pi OS (64Bits)

Building Linux Kernel 6.6 version

Download Linux Kernel

$ git clone --depth=1 --branch rpi-6.6.y https://github.com/raspberrypi/linux.git

P.S. --depth=1 表示 git log 只拉最新一層 commit,不會下載整條 History ,以節省下載時間與容量。

Patching Linux Kernel

$ unzip "MM6108 Linux Driver Release Package 1.12.4.zip"
$ cd "MM6108 Linux Driver Release Package 1.12.4/"
$ unzip morsemicro_kernel_patches_rel_1_12_4_2024_Jun_11.zip
$ cat morsemicro_kernel_patches_rel_1_12_4_2024_Jun_11/6.6.x/*.patch | patch  -g0 -p1 -E -d ~/linux/

NOTE: patch 的選項說明: https://www.gnu.org/software/diffutils/manual/html_node/patch-Options.html

Modify Kernel Driver Option

$ cd ~/linux/
$ KERNEL=kernel8
$ make ARCH=arm64 bcm2711_defconfig

Cross-compile the Linux Kernel

Install toolchain
$ sudo apt install crossbuild-essential-arm64
Building Linux Kernel
$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs

Compiler Morse Micro Driver

$ cd ~/MM6108\ Linux\ Driver\ Release\ Package\ 1.12.4/
$ unzip morsemicro_driver_rel_1_12_4_2024_Jun_11.zip
$ cd morsemicro_driver_rel_1_12_4_2024_Jun_11/
$ ...

Queue, TODO

(待後置的資料,先暫放此處)

2024-10-28

Q: OpenWrt 是不是就是四大主軸,一編譯與刷機,二改硬體資訊如DTS, porting driver,三 OpenWrt 的網路設定(UCI setting),四改Web UI,只要這些都搞懂,是不是也就差不多了?

A: 是啊

OpenWrt 四大主軸:

  • 編譯與刷機
  • 硬體參數修改, DTS, Driver Porting
  • OpenWrt 網路設定, UCI
  • Web UI
理解一個事物有多個方式。一是從作者本人口述,一是從上而下的閱讀架構說明文件,另一是由下而上的探索式的自適應組織。
大多數的我們,從小接受學校教育,已經習慣以線性教材式的訓練課程來學習。
但面對陌生事物,且還沒有理想指引的環境下,採取探索式會更有效一些。
  • 對照 Upstream 的 LuCI source code 作 Trace code 前, 注意要先定位版本對應關係。若版本對應錯置,容易發生"刻舟求劍"、"用明朝的劍斬清朝的官"的窘境。

2024-10-29

自己是採取 backtrace code 的方式,反向探索 LuCI 的架構。
訣竅門,針對要改的地方,在那裡觸發一次 backtrace 。
就會得到一份 function 樹狀關係圖切片。
從那個切片,就能反解出整個架構的部分情報,而且是直接跟目標相關的情報。
用這個方式,多改幾個地方,多了幾個角度切片,最終能一步步反解拼湊而掌握整體架構。
因此,上述找 button 的特徵,就是對 LuCI 的一次取樣切片。
過程中,可以找到對應的 module 跟檔案位置。

先讀 LuCI 的架構文件,有助於你框出問題的範圍。
但,初入手的人再怎麼縮框,也無法到很精確。
因此,我慣以針對性切片法下手。