小编Hig*_*eat的帖子

如何使用QEMU和KGDB调试Linux内核?

我已经能够使用以下方法来启动基于PowerPC的系统(具体来说为MPC8544DS)来调用qemu(v1.7.0)

qemu-system-ppc -M mpc8544ds -m 512 -kernel zImage -s -nographic -initrd busyboxfs.img -append "root=/dev/ram rdinit=/bin/sh kgdboc=ttyS0,115200 kgdbwait"
Run Code Online (Sandbox Code Playgroud)

其中zImage是一个自定义的交叉编译Linux内核(v2.6.32),已启用并编译了KGDB(用于启动代码调试),并且busyboxfs.img是基于busybox的rootfs。

由于我正在使用-sQemu 的标志,因此可以使用跨gdb闯入内核,如下所示:

(gdb) target remote localhost:1234
Remote debugging using localhost:1234
mem_serial_in (p=<value optimized out>, offset=5) at drivers/serial/8250.c:405
405  }
Run Code Online (Sandbox Code Playgroud)

但是,如果我删除该-s标志并尝试闯入内核,/dev/ttyS0则会给我一个权限被拒绝的错误:

(gdb) set remotebaud 115200
(gdb) target remote /dev/ttyS0
permission denied 
Run Code Online (Sandbox Code Playgroud)

是因为它被Qemu保留了吗?另外,在互联网上的示例中ttyAMA0,我已经了解了kgdboc ,该AMBA总线代表特定于基于ARM的系统的总线。我们对PowerPC有类似的东西吗?我在这里做错什么了吗?

linux embedded qemu powerpc linux-kernel

6
推荐指数
2
解决办法
2982
查看次数

FreeBSD模块调试 - 无法访问内存地址

我试图破解/理解nullfs内核模块(在FreeBSD上)所以为此,我做了以下事情:

在目标机器上: kldstat给出:

Id Refs Address            Size     Name
 1   10 0xffffffff80200000 17e10c8  kernel
 2    1 0xffffffff819e2000 4cf0     vmxnet.ko
 3    1 0xffffffff819e7000 16e0     echo.ko
 4    1 0xffffffff81c11000 23dc     vmmemctl.ko
 5    1 0xffffffff81c14000 641b     nullfs.ko

nm /boot/kernel/nullfs.ko | grep mount
00000000000018f0 t null_getwritemount
0000000000000540 t nullfs_mount
0000000000000930 t nullfs_unmount
                 U vfs_mountedfrom
                 U vop_getwritemount_desc
Run Code Online (Sandbox Code Playgroud)

在通过充当串行控制台的命名管道(我正在使用虚拟机)连接到目标的本地计算机上:

(kgdb) tr0
kdb_sysctl_enter (oidp=<value optimized out>, arg1=<value optimized out>,
arg2=0xfffffe004e7cc7f0,
    req=<value optimized out>) at /usr/src/sys/kern/subr_kdb.c:446
446                     kdb_why = KDB_WHY_UNSET;
Current language:  auto; currently minimal
(kgdb) getsyms
During …
Run Code Online (Sandbox Code Playgroud)

debugging freebsd kernel-module kgdb

5
推荐指数
0
解决办法
406
查看次数