免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: eaglec83
打印 上一主题 下一主题

[内核模块] 请问如何用虚拟机调试内核? [复制链接]

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
21 [报告]
发表于 2014-10-11 20:31 |只看该作者
本帖最后由 Tinnal 于 2014-10-11 20:35 编辑

关于自己编译的内核没有debuginfo包的问题,systemtap的官方FAQ已经有说明:
https://sourceware.org/systemtap/wiki/SystemTapFAQ
2) What config options need to be enabled to be able to use systemtap on custom built kernels?

Look at SystemTapWithSelfBuiltKernel for the specific config options to be enabled for systemtap.

3) I have a kernel built with options listed in (2), but still can't get systemtap to work. What am I missing?

See Q2. Also, if you've used 'make install' to install your custom built kernel, it may not have copied the uncompressed 'vmlinux' to /boot/vmlinux-'uname-r'. You can place 'vmlinux' in any of these locations,

  /boot/vmlinux-`uname -r`
  /usr/lib/debug/lib/modules/`uname -r`/vmlinux
  /lib/modules/`uname -r`/vmlinux


https://sourceware.org/systemtap ... WithSelfBuiltKernel
Using systemtap with self-built kernels

If you are running a kernel that you built and installed "by hand", rather than by installing a package from a distribution, you can follow these steps to use systemtap. The following blurb may also be found at the bottom of the README file in the sources. See also cross compiling tips.

Build the kernel using your normal procedures. Enable CONFIG_DEBUG_INFO, CONFIG_KPROBES, CONFIG_RELAY, CONFIG_DEBUG_FS, CONFIG_MODULES, CONFIG_MODULE_UNLOAD, CONFIG_UPROBES and the minimal number of auxiliary modules you need (since CONFIG_DEBUG_INFO can multiply disk space usage).

% make modules_install install

Boot into the kernel.

If you want to build instrumentation for that installed kernel without rebooting, you can use the following (replacing RELEASE with version number of the installed kernel):

% stap -r RELEASE [...]

If you do not install the kernel, simply run

% stap -r /path/to/kernel/build/tree [...]

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
22 [报告]
发表于 2014-10-13 11:20 |只看该作者
回复 19# eaglec83

systemtap对内核兼容性做得不好的BUG。具体的详情请看:

https://www.sourceware.org/ml/systemtap/2013-q2/msg00166.html
https://www.sourceware.org/ml/systemtap/2014-q2/msg00023.html

你要不更改一下你的内核选项,规避这个BUG,要不就按上面的patch修复一下systemtap。


   

论坛徽章:
0
23 [报告]
发表于 2014-10-13 14:17 |只看该作者
systemtap在3.14上可以用了,多谢
我换了最新的systemtap 2.6版本,这个版本已经修正了runtime check的问题
回复 20# Tinnal


   

论坛徽章:
0
24 [报告]
发表于 2014-10-13 14:46 |只看该作者
刚刚又试了一把kgdboc的方式, 还是没能搞定
minicom: WARNING: configuration file not found, using defaults
Device /dev/modem access failed: No such file or directory
这个应该是没有这个设备吧? 于是我在virtual machine manager的界面上又加了一个serial的设备,类型选择为pseudo tty(pty)
创建重启后, lspci, 并没有看到该串口设备

minicom -s
选择serial port setting, 将/dev/modem改为/dev/ttyS0, 保存后退出再启动minicom
Welcome to minicom 2.3

OPTIONS: I18n                                                               
Compiled on Aug 19 2010, 05:50:19.                                          
Port /dev/ttyS0                                                              
                                                                             
               Press CTRL-A Z for help on special keys
就停在这个界面了,任何一个键都不起作用, 这个是不是还是串口设备没生效的问题?
请问:
1. 怎么在虚拟机上使能串口设备?
2. 为什么我用kgdboc和kgdboe方式都无法使开发机和目标机连通?
回复 15# eaglec83


   

论坛徽章:
0
25 [报告]
发表于 2014-10-13 14:55 |只看该作者
另外还有一个问题, 怎么让虚拟机的网卡不和宿主机通信?
我在虚拟机上创建了2块网卡, 一块是
00:03.0 Ethernet controller: Red Hat, Inc Virtio network device
        Subsystem: Red Hat, Inc Device 0001
        Physical Slot: 3
        Flags: bus master, fast devsel, latency 0, IRQ 10
        I/O ports at c040 [size=32]
        Memory at f2020000 (32-bit, non-prefetchable) [size=4K]
        Expansion ROM at f2030000 [disabled] [size=64K]
        Capabilities: [40] MSI-X: Enable+ Count=3 Masked-
        Kernel driver in use: virtio-pci

另一块是
00:07.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 20)
        Subsystem: Red Hat, Inc Device 1100
        Physical Slot: 7
        Flags: bus master, fast devsel, latency 0, IRQ 10
        I/O ports at c100 [size=256]
        Memory at f2045000 (32-bit, non-prefetchable) [size=256]
        Expansion ROM at f2050000 [disabled] [size=64K]
        Kernel driver in use: 8139cp

第一块网卡是在创建虚拟机的时候创建的,选择的类型为virtual network default 'NAT'
第2块网卡是在虚拟机界面上创建的,选择的source device: host device eth1:macvtap, source mode: private
ifconfig eth1 up后看见eth1的rx一直在增长, 打开tcpdump看发现不断的有宿主机上网卡eth0的报文过来

我现在想让虚拟机上的网卡eth0继续能和宿主机通信和连接internet, 但是eth1不接收任何宿主机过来的报文
请问有没有什么方法? 能不能再创建一块网卡eth2, 让eth1和eth2 环回?

论坛徽章:
0
26 [报告]
发表于 2014-10-13 14:55 |只看该作者
本帖最后由 eaglec83 于 2014-10-13 15:26 编辑

刚刚试了一下kgdboc的另一个选项:
add hardware
  ->serial
     ->device type: unix socket, path=/dev/ttyS1, mode=client(connect)
按照网上所说, 两台虚拟机通过串口通信应该是使用这种模式

然后启动, 报错
Error starting domain: internal error process exited while connecting to monitor: qemu-kvm: -chardev socket,id=charserial0,path=/dev/ttyS1,server,nowait: socket bind failed: Address already in use
qemu-kvm: -chardev socket,id=charserial0,path=/dev/ttyS1,server,nowait: chardev: opening backend "socket" failed


Traceback (most recent call last):
  File "/usr/share/virt-manager/virtManager/asyncjob.py", line 44, in cb_wrapper
    callback(asyncjob, *args, **kwargs)
  File "/usr/share/virt-manager/virtManager/asyncjob.py", line 65, in tmpcb
    callback(*args, **kwargs)
  File "/usr/share/virt-manager/virtManager/domain.py", line 1114, in startup
    self._backend.create()
  File "/usr/lib64/python2.6/site-packages/libvirt.py", line 678, in create
    if ret == -1: raise libvirtError ('virDomainCreate() failed', dom=self)
libvirtError: internal error process exited while connecting to monitor: qemu-kvm: -chardev socket,id=charserial0,path=/dev/ttyS1,server,nowait: socket bind failed: Address already in use
qemu-kvm: -chardev socket,id=charserial0,path=/dev/ttyS1,server,nowait: chardev: opening backend "socket" failed

怎么会显示address already in use呢?明明没有其他人用啊

论坛徽章:
0
27 [报告]
发表于 2014-10-16 13:45 |只看该作者
有没有人在virtual machine manager上装虚拟机调试的?
帮个忙啊
回复 25# eaglec83


   

论坛徽章:
16
天秤座
日期:2014-08-17 11:27:4215-16赛季CBA联赛之青岛
日期:2017-02-27 17:06:3015-16赛季CBA联赛之广夏
日期:2017-02-08 13:34:58白银圣斗士
日期:2015-11-30 20:57:05冥斗士
日期:2015-12-01 09:49:10嗜杀者
日期:2015-12-01 09:49:10白银圣斗士
日期:2015-11-27 23:56:51神斗士
日期:2015-12-01 09:49:10嗜杀者
日期:2015-12-01 09:49:10青铜圣斗士
日期:2015-12-01 09:49:10白银圣斗士
日期:2015-11-25 14:19:53黄金圣斗士
日期:2015-11-24 10:43:13
28 [报告]
发表于 2014-10-28 23:40 |只看该作者
http://blog.chinaunix.net/uid-26859697-id-3590334.html
我自己折腾的,不知道适不适用...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP