Я занимаюсь встроенной разработкой на плате AT91SAM9263 и сталкиваюсь с непонятной проблемой. Он запускает debian Linux kernel 2.6.18.4 и кросс-компилируется с помощью arm-linux-gcc 3.4.6 и использует uClibc-0.9.28 для библиотеки C. Я отлаживаю драйвер устройства ядра, и определенная функция не появляется в файле System.map. Понятно, что я не могу установить на нем точку останова. Как ни странно, если я ворву в его вызывающую функцию, я не могу в нее вступить - команда nexti gdb выполняет ее, но пропускает мимо источника. Функция is atmel_rx_chars (struct uart_port * port). Это статическая функция void, объявленная в atmel_serial.c, пример которой появляется в [1]. Существуют другие статические функции void в одном файле (atmel_tx_chars (struct uart_port * port), например), которые объявлены в одном файле и фактически индексируются в файле System.map. Согласно [2] «System.map создается« nm vmlinux », а нерелевантные или неинтересные символы вытесняются». Я попытался использовать nm (а также objdump), чтобы просмотреть все символы, и он все еще не отображается в выводе. Однако, когда я grep atmel_rx_chars vmlinux, он возвращает совпадение. Раньше я считал себя немного могущественным пользователем, но после этого я действительно в тупике. Любые советы будут оценены наиболее высоко.Имя функции и адрес отсутствуют в Linux System.map
Спасибо,
Jayce
[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
как вы скомпилируете код? звучит так, как если бы код был скомпилирован с помощью оптимизационных переключателей, которые в gdb пропускают мимо него или system.map не синхронизируется с ядром? – t0mm13b
Ядро скомпилировано без оптимизации и с включенной функцией -g (отладочная информация). Опять же, мне интересно, что другие функции одного и того же типа возврата и подписи, которые определены в одном файле, отображаются в файле System.map и видны отладчику, но эта одна функция таинственно отсутствует. Благодарю вас за предложение. -jayce – user277453
Я ошибаюсь - ядро скомпилировано с -Os и с включенным -g. Я попытался скомпилировать с -O0, но он ломается на [корень ядра] /net/core/dev.c +1710 и +1717. – user277453