Armadilloフォーラム

Linuxカーネルにスタティックリンクされたソースファイル名

hikita

2014年10月23日 15時17分

お世話になります。

アマノ㈱ 疋田です。

armadillo440を使用しています。

atmark-distでビルドしたLinuxカーネルにスタティックリンクされたカーネルツリー内の
ソースファイル名の一覧を取得したいのですが、取得の仕方をご存知であれば教えてください。

linux-2.6.26-at/System.mapにはシンボルテーブルしか出力されていません。
カーネルツリー内のMakefileを変更すればファイル名も出力できるのでしょうか。

以上 よろしくお願いします。

コメント

綺麗な状態から make をすると、ディレクトリ内にできた .o ファイルがわかり
ます。その一覧を見るという方法で、できませんか?

$ make
   :
$ find . -name '*.o'

> 綺麗な状態から make をすると、ディレクトリ内にできた .o ファイルがわかり
> ます。その一覧を見るという方法で、できませんか?
>
>

> $ make
>    :
> $ find . -name '*.o'
> 

>
コメントありがとうございます。
確かにその方法でも概ね目的は達成できますが、一部にアセンブラ.Sファイルもあるので、できればiTRONの統合開発環境のように、MAPファイルからリンクしたソースファイル一覧がとる方法はないものかと思い質問してみました。

> 綺麗な状態から make をすると、ディレクトリ内にできた .o ファイルがわかり
> ます。その一覧を見るという方法で、できませんか?

これだと、モジュールになっているドライバソースも入ってしまいますね。

--
なかむら

at_makoto.harada

2014年10月24日 12時15分

デバッグオプション付きでカーネルをビルドし、objdumpでバイナリ内のデバッグ情報からファイルパスを取得してみては
はいかがでしょうか?

1. デバッグオプションを有効にしてカーネルをビルド
-> Kernel hacking
->[*] Compile the kernel with debug info

2. vmlinuxを逆アセンブル
arm-linux-gnueabi-objdump -Sl vmlinux |grep "^/"

> デバッグオプション付きでカーネルをビルドし、objdumpでバイナリ内のデバッグ情報からファイルパスを取得してみては
> はいかがでしょうか?
>
> 1. デバッグオプションを有効にしてカーネルをビルド
> -> Kernel hacking
> ->[*] Compile the kernel with debug info
>
> 2. vmlinuxを逆アセンブル
> arm-linux-gnueabi-objdump -Sl vmlinux |grep "^/"
>

コメントありがとうございます。

この方法ですと下のように同じファイル名が何度も表示されてしまいますね。
これを加工すればいけるかもしれません。

/home/atmark/linux-2.6.26-at/net/ipv6/proc.c:290
/home/atmark/linux-2.6.26-at/net/ipv6/proc.c:293
/home/atmark/linux-2.6.26-at/net/ipv6/proc.c:308
/home/atmark/linux-2.6.26-at/net/ipv6/proc.c:296
/home/atmark/linux-2.6.26-at/net/ipv6/proc.c:299
/home/atmark/linux-2.6.26-at/net/ipv6/proc.c:300
/home/atmark/linux-2.6.26-at/net/ipv6/proc.c:299
/home/atmark/linux-2.6.26-at/net/ipv6/proc.c:300
/home/atmark/linux-2.6.26-at/net/ipv6/proc.c:301
/home/atmark/linux-2.6.26-at/net/ipv6/proc.c:312
/home/atmark/linux-2.6.26-at/net/ipv6/proc.c:306
/home/atmark/linux-2.6.26-at/net/ipv6/proc.c:308

> できればiTRONの統合開発環境のように、...

なるほど。勉強になります。

1. CONFIG_DEBUG_INFO を有効にして
2. gdb vmlinux
3. info sources

が、一番わかりやすいかもしれません。どうでしょう?

> > できればiTRONの統合開発環境のように、...
>
> なるほど。勉強になります。
>
> 1. CONFIG_DEBUG_INFO を有効にして
> 2. gdb vmlinux
> 3. info sources
>
> が、一番わかりやすいかもしれません。どうでしょう?
>

コメントありがとうございます。

これは良い方法です。GDBをlogging onにしておいて、info sourcesコマンドで
ファイル名をすべて表示させてから、ログファイルgdb.txtを".c"でgrepすれば全
てのcファイル一覧が取得できます。

この方法を使わせていただきます。ありがとうございました。