R's Workshop

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

Check Macro Value is Power of Two at Compile Stage

在實做 ring buffer 時, 如果 buffer size 是 2 的冪次方, 就能使用 bit-wise mask 來處理 index 移動後產生的 wrap around, 減少使用的 CPU cycles. 但如果有另一個人不小心把 buufer size 改成非 2 的冪次方, bit-wise mask 的作法就會出問題, 所以大部分人怕麻煩還是會用 modulo oper... Read more

Vim-Plug Plugin Management

從 Vundle 改用 vim-plug 的主因是, vim-plug 支援 on-demand plugin loading. 並且可以根據 filetype 來決定要載入哪些 plugins. Read more