我在 AT91SAM9263 板上进行嵌入式开发并遇到了一个奇怪的问题。它运行 debian Linux 内核 2.6.18.4,并与 arm-linux-gcc 3.4.6 交叉编译,并使用 uClibc-0.9.28 作为 C 库。我正在调试内核设备驱动程序,但 System.map 文件中没有出现特定功能。可以理解的是,因此我无法在其上设置断点。奇怪的是,如果我闯入它的调用函数,我就无法进入它——使用 gdb 的 nexti 命令执行它但跳过源代码。该函数是 atmel_rx_chars(struct uart_port *port)。它是在 atmel_serial.c 中声明的静态 void 函数,其示例出现在 [1] 中。同一文件中还有其他静态 void 函数 (atmel_tx_chars(struct uart_port *port), 例如)在同一个文件中声明并且实际上在 System.map 文件中被索引。根据 [2] “System.map 由 'nm vmlinux' 生成,并且不相关或无趣的符号被剔除。” 我尝试使用 nm(以及 objdump)来查看所有符号,但它仍然没有出现在输出中。但是,当我 grep atmel_rx_chars vmlinux 时,它会返回匹配项。我曾经认为自己是一个超级用户,但在这之后我真的很难过。任何建议将不胜感激。我曾经认为自己是一个超级用户,但在这之后我真的很难过。任何建议将不胜感激。我曾经认为自己是一个超级用户,但在这之后我真的很难过。任何建议将不胜感激。
谢谢,
杰斯
[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