kallsymsのめも

/proc/kallsymsをスクリプトで読むときにちょっとハマったので。

なにかというと、下の出力で、ext4_file_operationsはext4モジュールに含まれているというのがわかります。で、_do_forkのほうはモジュールにないので3カラム目まで。

masami@saga:~$ grep ext4_file_operations /proc/kallsyms
ffffffffc0224340 r ext4_file_operations [ext4]
masami@saga:~$ grep _do_fork /proc/kallsyms
ffffffff81076e70 T _do_fork

それ自体は問題ないんだけど、問題になるのは3カラム目と4カラム目の区切り文字だけはタブ区切りだということ。kernel/kallsyms.cのs_show()を見てみるとタブ区切りになってるのが確認できます。

545                 seq_printf(m, "%pK %c %s\t[%s]\n", (void *)iter->value,
546                            type, iter->name, iter->module_name);

pythonのコードで読み込んだ行をsrtip()でstripしてるのからext4_file_operationsだけとれると思いきや、後ろのモジュール名まで取れてて何で分割されてないのかと思って見てみたらこうだったと。

CentOS 7実践ガイド

CentOS 7実践ガイド