将System.map值绑定到内核地址

时间:2016-04-27 14:34:54

标签: linux debugging linux-kernel arm embedded-linux

我试图在BeagleBoneBlack上启动自定义内核。 u-boot工作,并按如下方式加载内容:

U-Boot 2016.03 (Apr 26 2016 - 11:32:30 +0000)

       Watchdog enabled
I2C:   ready
DRAM:  512 MiB
MMC:   OMAP SD/MMC: 0, OMAP SD/MMC: 1
*** Warning - bad CRC, using default environment

Net:   <ethaddr> not set. Validating first E-fuse MAC
cpsw, usb_ether
Press SPACE to abort autoboot in 2 seconds
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
Found /boot/extlinux/extlinux.conf
Retrieving file: /boot/extlinux/extlinux.conf
278 bytes read in 39 ms (6.8 KiB/s)
1:      Linux grsec
Retrieving file: /boot/initramfs-grsec
5875398 bytes read in 349 ms (16.1 MiB/s)
Retrieving file: /boot/vmlinuz-4.4.8-grsec
3140944 bytes read in 211 ms (14.2 MiB/s)
append: BOOT_IMAGE=/boot/vmlinuz-4.4.8-grsec modules=loop,squashfs,sd-mod,usb-storage modloop=/boot/modloop-grsec console=ttyO0,115200n8
Retrieving file: /boot/dtbs/am335x-boneblack.dtb
31516 bytes read in 426 ms (71.3 KiB/s)
Kernel image @ 0x82000000 [ 0x000000 - 0x2fed50 ]
## Flattened Device Tree blob at 88000000
   Booting using the fdt blob at 0x88000000
   Loading Ramdisk to 8fa65000, end 8ffff6c6 ... OK
   Loading Device Tree to 8fa5a000, end 8fa64b1b ... OK

Starting kernel ...

我认为到目前为止,一切看起来都很好。但内核无法加载。我无法通过内核选项中启用的低级调试来访问内核中的任何内容。

我已经连接了一个J-Link JTAG调试器并且希望能够找到问题所在,但是我在将System.map绑定到反汇编时遇到了麻烦。

这里举例说明是System.Map的开始:

00000000 t __vectors_start
00000024 A cpu_ca8_suspend_size
00000024 A cpu_v7_suspend_size
0000002c A cpu_ca9mp_suspend_size
00001000 t __stubs_start
00001004 t vector_rst
00001020 t vector_irq
000010a0 t vector_dabt
00001120 t vector_pabt
000011a0 t vector_und
00001220 t vector_addrexcptn
00001240 t vector_fiq
00001240 T vector_fiq_offset
80204000 A swapper_pg_dir
80208000 T _text
80208000 T stext
8020808c t __create_page_tables
8020813c t __turn_mmu_on_loc
80208148 t __fixup_smp
802081b0 t __fixup_smp_on_up
802081d4 t __fixup_pv_table
80208228 t __vet_atags
80208280 T __idmap_text_start
80208280 T __turn_mmu_on
80208280 T _stext

所以拿__create_page_tables,我在./arch/arm/kernel下的源代码中用:

.../arm/arm/kernel$ grep __create_page_tables -rn
Binary file head.o matches
head.S:128:     bl      __create_page_tables
head.S:180:__create_page_tables:
head.S:355:ENDPROC(__create_page_tables)

因此我们在符号地址处寻找以下内容:

__create_page_tables:
    pgtbl   r4, r8                          @ page table address

但是反汇编程序在地址上显示了不同的内容我也正在翻译,内核加载为0x82000000:

Kernel __create_page_tables address

如何将内核符号转换为调试器地址?

0 个答案:

没有答案