兩個階段、兩種語言:Python 找答案,C 寫進 kernel

兩個階段、兩種語言:Python 找答案,C 寫進 kernel A workflow diagram generated by Archify. 01 / 研究(Python,在 host) 02 / 產出 03 / 實作(C,在 kernel) 階段 A:一次幾秒 交接 階段 B:一次幾十分鐘 改 tracer · 多印一點 / 加解碼 · 研究(Python,在 host) › 階段 A:一次幾秒 改 tracer 多印一點 / 加解碼 重跑 guest · 插上螢幕再看一次 · 研究(Python,在 host) › 階段 A:一次幾秒 重跑 guest 插上螢幕再看一次 看懂序列 · call 20 之後做了什麼 · 研究(Python,在 host) › 階段 A:一次幾秒 看懂序列 call 20 之後做了什麼 寫下規格 · 這份也貼到 #579 · 產出 › 交接 · 真正的產出 寫下規格 這份也貼到 #579 真正的產出 寫 C handler · drm/apple 的 call 表 · 實作(C,在 kernel) › 階段 B:一次幾十分鐘 寫 C handler drm/apple 的 call 表 驗證 · build → 重開 → dmesg · 實作(C,在 kernel) › 階段 B:一次幾十分鐘 驗證 build → 重開 → dmesg 還看不懂 讀輸出 整理成文字 沒過就改 照規格實作 Legend 你動手的步驟 關鍵交接點 產出物

為什麼一定要先 Python

  • • tracer 是量測儀器,不是產品,它永遠不會進 kernel
  • • 改 Python 重跑只要幾秒;改 C 要 build + 重開機
  • • 帶著一半的猜測去改 kernel,時間都花在等 build

「規格」長什麼樣

  • • DCP 送 call 20 之後,macOS 回了什麼值
  • • 接著依序做了哪幾件事,link training 在第幾步才開始
  • • 這份文字是別人能接手的唯一形式,也是 clean room 的標準做法

斷點 1 連階段 B 都不用

  • • 它現在只是「換一顆 kernel」,沒有要改的 C、沒有要 cherry-pick 的 patch
  • • 所以整份計畫裡唯一真正要寫程式的,只有斷點 2
  • • 練手題改成階段 3:轉接頭兩邊都會動,正確答案是已知的