AT91SAM9263 ボードで組み込み開発を行っていますが、奇妙な問題に遭遇しました。Debian Linux カーネル 2.6.18.4 を実行しており、arm-linux-gcc 3.4.6 でクロスコンパイルされ、C ライブラリに uClibc-0.9.28 を使用しています。カーネル デバイス ドライバーをデバッグしていますが、特定の関数が System.map ファイルに表示されません。当然のことながら、ブレークポイントを設定することはできません。奇妙なことに、その呼び出し関数に割り込むと、ステップインできません。gdb の nexti コマンドを使用すると、関数は実行されますが、ソースはスキップされます。関数は atmel_rx_chars(struct uart_port *port) です。これは atmel_serial.c で宣言された static void 関数であり、その例は [1] に示されています。同じファイル (atmel_tx_chars(struct uart_port *port)、たとえば) これらは同じファイルで宣言され、実際には System.map ファイルでインデックス化されています。[2] によると、「System.map は 'nm vmlinux' によって生成され、無関係または興味のないシンボルは grep で抽出されます。」nm (および objdump) を使用してすべてのシンボルを表示しようとしましたが、それでも出力に表示されません。ただし、atmel_rx_chars vmlinux を grep すると、一致が返されます。私は自分自身を少しパワーユーザーだと思っていましたが、その後は本当に困惑しています. どんなアドバイスでも大歓迎です。私は自分自身を少しパワーユーザーだと思っていましたが、その後は本当に困惑しています. どんなアドバイスでも大歓迎です。私は自分自身を少しパワーユーザーだと思っていましたが、その後は本当に困惑しています. どんなアドバイスでも大歓迎です。
ありがとうございました、
ジェイス
[1] http://lxr.free-electrons.com/source/drivers/serial/atmel_serial.c#L379
[2]http://www.faqs.org/docs/Linux-HOWTO/Kernel-HOWTO.html#systemmap