前幾篇文章有提到用 systemtap 來監視 ASL 呼叫的順序,但使用 systemtap 有幾個缺點:
- 要抓近 700 MB 的 debug symbols
- 要在裡頭加入自己的 c code 很麻煩
也因此小弟改用了 jprobe 來實作這個部分,並且加入了 ASL 整數參數的列印。以下是使用方式:
先抓 jprobe 程式,其中在 jprobes 資料匣中有個 acpica 資料匣,那是直接從 kernel source code drivers/acpi/acpica 中複製下來,我這裡是用 3.5.0-22,這裡可能會需要各位抓自己對應的 kernel 版本來用。
$ git clone https://github.com/fcwu/sys_prog.git $ cd sys_prog/jprobes $ make -C /lib/modules/`uname -r`/build M=`pwd`
插入模組,再清空 dmesg 訊息。
$ sudo insmod jprobe1.ko $ sudo dmesg -c
最後按下會發出 Q event 的 hotkey,再執行 dmesg 就可以看到輸出結果如下:
[ 9113.652829] ASLP:_L13 > [ 9113.652956] ASLP:_L13 < [ 9113.652985] ASLP:_Q66 > [ 9113.653043] ASLP:..NEVT > [ 9113.653059] ASLP:....ECG1 > [ 9113.653075] ASLP:......ECRW > [ 9113.653081] ASLP:...... Op0: Integer 0000000000000007 [ 9113.653097] ASLP:........ECR2 > [ 9113.653102] ASLP:........ Op0: Integer 0000000000000007 [ 9113.653115] ASLP:..........ECR1 > [ 9113.653120] ASLP:.......... Op0: Integer 0000000000000007 [ 9113.653739] ASLP:..........ECR1 < [ 9113.653773] ASLP:..........ECR1 > [ 9113.653780] ASLP:.......... Op0: Integer 0000000000000008 [ 9113.654973] ASLP:..........ECR1 < [ 9113.655005] ASLP:........ECR2 < [ 9113.655016] ASLP:......ECRW < [ 9113.655024] ASLP:....ECG1 <
ASL 真是愈來愈好追了。
No comments:
Post a Comment