R's Workshop

Install Pipewire in Ubuntu 20.04

把裝有 Ubuntu 20.04筆電的 wi-fi 網卡升級到 AX210 後, 藍芽耳機切換到 A2DP codec 後就沒有聲音了 QQ. Google 了一下可能是 Ubuntu default 使用的 Pulseaudio 已經無法支援 AX210 的 BT driver. 只好參考網路的建議, 把 {ulseaudio 改成 Pipewire 試試看. Read more

Backtrace Function Call in GCC

在 debug kernel 的時候, 要追 function call stack 最簡單的方式就是呼叫 dump_stack(). 在 user space 寫 C function 時, gcc 也提供了一個類似的 API. Read more

Use HW breakpoint to Watch Kernel Data Address

因為 kerenl 的 tasklet 可以 access 任意的記憶體位置, 要如何在茫茫 tasklets 中找到是誰修改了某個變數在 debug 上非常重要. 還好 Linux kernel 提供了 HW breakpoint 的方式, 讓我們可以在要 monitor 的位置上註冊一個 trap. 當 kernel 對該位置讀寫時觸發 trap 來做進一步 debug, 比方說 dum... Read more

Check BUG ON() Happens at which File and Line

最近處理一個掛在 __timer() 的 kernel crash, 發現 log 裡的一個有趣的地方. 看起來是可以透過開一些額外的 kenrel config 來印出更多訊息. Kernel BUG at __mod_timer+0x2c8/0x3d0 [verbose debug info unavailable] Read more

Show C Macro Value in Compile Log

工作上要維護的那份 driver 太亂, 常常搞不清楚一個 macro 到底有沒有被定義, 或是被定義成什麼值. 在 stack overflow 看到一個利用 gcc stringification 的方法, 在 compile log 裡直接印出 macro 值. Read more