- 浏览: 1489909 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (691)
- linux (207)
- shell (33)
- java (42)
- 其他 (22)
- javascript (33)
- cloud (16)
- python (33)
- c (48)
- sql (12)
- 工具 (6)
- 缓存 (16)
- ubuntu (7)
- perl (3)
- lua (2)
- 超级有用 (2)
- 服务器 (2)
- mac (22)
- nginx (34)
- php (2)
- 内核 (2)
- gdb (13)
- ICTCLAS (2)
- mac android (0)
- unix (1)
- android (1)
- vim (1)
- epoll (1)
- ios (21)
- mysql (3)
- systemtap (1)
- 算法 (2)
- 汇编 (2)
- arm (3)
- 我的数据结构 (8)
- websocket (12)
- hadoop (5)
- thrift (2)
- hbase (1)
- graphviz (1)
- redis (1)
- raspberry (2)
- qemu (31)
- opencv (4)
- socket (1)
- opengl (1)
- ibeacons (1)
- emacs (6)
- openstack (24)
- docker (1)
- webrtc (11)
- angularjs (2)
- neutron (23)
- jslinux (18)
- 网络 (13)
- tap (9)
- tensorflow (8)
- nlu (4)
- asm.js (5)
- sip (3)
- xl2tp (5)
- conda (1)
- emscripten (6)
- ffmpeg (10)
- srt (1)
- wasm (5)
- bert (3)
- kaldi (4)
- 知识图谱 (1)
最新评论
-
wahahachuang8:
我喜欢代码简洁易读,服务稳定的推送服务,前段时间研究了一下go ...
websocket的helloworld -
q114687576:
http://www.blue-zero.com/WebSoc ...
websocket的helloworld -
zhaoyanzimm:
感谢您的分享,给我提供了很大的帮助,在使用过程中发现了一个问题 ...
nginx的helloworld模块的helloworld -
haoningabc:
<div class="quote_title ...
qemu+emacs+gdb调试内核 -
leebyte:
太NB了,期待早日用上Killinux!
qemu+emacs+gdb调试内核
core生成的位置
echo “/data/coredump/core.%e.%p” >/proc/sys/kernel/core_pattern
emacs -nw
1.debug方式编译内核
2.qemu -S启动
3.设置emacs参数 ,启用gdb模式远程调试
环境:
下载linux-2.6.20
http://www.linux-mips.org/pub/linux/mips/kernel/v2.6/
修改Makefile
make defconfig
生成.config文件
这里如果使用这种方式生成的.config文件内核可以编译成功,但是在可能无法进入linux操作系统,尝试使用fabrice bellard的jslinux的配置文件
linuxstart-20120111/config_linux-2.6.20
http://bellard.org/jslinux/tech.html
下载配置文件
http://dl.iteye.com/topics/download/9973ef69-2386-36bb-82f5-1c01a6edabac
把这个保存成.config放到和Makefile同级的目录下
make menuconfig
选择debug模式
vim scripts/mod/sumversion.c
最上面新加一行
vim arch/i386/kernel/Makefile
gcc的版本问题
gcc的参数-m elf_i386改成-m32
ld后的参数不改
改成
vim kernel/mutex.c
开始make
用qemu启动内核
或者使用qemu的官网的test的img:linux-0.2.img
注意:这里加了console=ttyS0 才有很多输出信息,不加没有
注意:这里的hda.bin是fabrice bellard的jslinux中的
注意,这里加了 -serial 才输出到屏幕上,在vnc连进去还是到"ok,booting the kernel"
如果不开-s和-S的调试模式,直接气得弄个qemu的话,append参数里面有console则会在当前命令行进入系统
可以使用qemu官方的linux-0.2.img(不过这个img自带2.6.20的内核,不影响)
如果不适用我们编译的内核,而直接用他自己的内核
vnc连接后
可以去看一下内核的版本
其中-S 是gdb需要的
远程使用vnc 端口3或者5903
进入后应该是一片漆黑
ctl+alt+2
进入qemu调试
然后输入gdbserver回车
默认开启1234端口
指定端口用
(qemu) gdbserver tcp::1233
如果省去gdbserver这步骤
可以启动的时候直接加-s 注意小s是启动server,大S是暂停
可以netstat一下1234端口是否打开
进入linux-2.6.20目录
下面有个vmlinux
如果不使用emacs
直接gdb vmlinux
进入后
target remote localhost:1234
如果使用emacs:
emacs
M-x gdb
Run gdb (like this): gdb -i=mi vmlinux
这里需要设置一下,否则会出现
的错误
设置方法如下
http://stackoverflow.com/questions/15274798/valgrind-vgdb-with-gdb-in-emacs
M-x customize-option
Customize variable: gdb-non-stop-setting
在state上回车
修改成
可以看到在~/.emacs里面多了
回到
M-x gdb
target remote localhost:1234
M-x gdb-many-windows
在gdb下 info source 查看当前文件的名字
开始enjoy吧
另外,linux追代码的时候如果使用vim
编译完内核后到linux-2.6.20目录
make tags
生成ctags文件
这样比自己生成的ctags要准,自己生成的当函数重名的时候会跳错乱
配置~/.vimrc
备注:如果有linux启动不了的问题参考
http://processors.wiki.ti.com/index.php/Kernel_-_Common_Problems_Booting_Linux
http://serverfault.com/questions/471719/how-to-start-qemu-directly-in-the-console-not-in-curses-or-sdl
qemu:http://wiki.qemu.org/Testing
参考:http://blog.chinaunix.net/uid-20729583-id-1884617.html
http://blog.chinaunix.net/uid-26872853-id-3428938.html
这里有版本相关的问题
参考极客范:http://www.geekfan.net/8663/
echo “/data/coredump/core.%e.%p” >/proc/sys/kernel/core_pattern
emacs -nw
1.debug方式编译内核
2.qemu -S启动
3.设置emacs参数 ,启用gdb模式远程调试
环境:
[root@centos140_11 ~]# cat /etc/redhat-release CentOS Linux release 7.1.1503 (Core) [root@centos140_11 ~]# gcc --version gcc (GCC) 4.8.3 20140911 (Red Hat 4.8.3-9) Copyright (C) 2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
下载linux-2.6.20
http://www.linux-mips.org/pub/linux/mips/kernel/v2.6/
修改Makefile
1438 # Modules 1439 %/: prepare scripts FORCE 1440 $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \ 1441 $(build)=$(build-dir)
412 %config: scripts_basic outputmakefile FORCE 413 $(Q)mkdir -p include/linux include/config 414 $(Q)$(MAKE) $(build)=scripts/kconfig $@
make defconfig
生成.config文件
这里如果使用这种方式生成的.config文件内核可以编译成功,但是在可能无法进入linux操作系统,尝试使用fabrice bellard的jslinux的配置文件
linuxstart-20120111/config_linux-2.6.20
http://bellard.org/jslinux/tech.html
下载配置文件
http://dl.iteye.com/topics/download/9973ef69-2386-36bb-82f5-1c01a6edabac
把这个保存成.config放到和Makefile同级的目录下
make menuconfig
选择debug模式



vim scripts/mod/sumversion.c
最上面新加一行
#include <limits.h>
vim arch/i386/kernel/Makefile
gcc的版本问题
gcc的参数-m elf_i386改成-m32
ld后的参数不改
57 # The DSO images are built using a special linker script. 58 quiet_cmd_syscall = SYSCALL $@ 59 cmd_syscall = $(CC) -m elf_i386 -nostdlib $(SYSCFLAGS_$(@F)) \ 60 -Wl,-T,$(filter-out FORCE,$^) -o $@ 61
改成
57 # The DSO images are built using a special linker script. 58 quiet_cmd_syscall = SYSCALL $@ 59 cmd_syscall = $(CC) -m32 -nostdlib $(SYSCFLAGS_$(@F)) \ 60 -Wl,-T,$(filter-out FORCE,$^) -o $@ 61
vim kernel/mutex.c
__mutex_lock_slowpath 的两个方法的static去掉 __mutex_unlock_slowpath的两个方法的static去掉
开始make
make ARCH=i386 -j16
用qemu启动内核
/usr/libexec/qemu-kvm -kernel linux-2.6.20.jslinux/arch/i386/boot/bzImage -hda hda.bin -append "root=/dev/hda console=ttyS0" -serial stdio -vnc 0.0.0.0:3
或者使用qemu的官网的test的img:linux-0.2.img
/usr/libexec/qemu-kvm -kernel linux-2.6.20.jslinux/arch/i386/boot/bzImage -hda linux-0.2.img -append "root=/dev/hda console=ttyS0" -serial stdio -vnc 0.0.0.0:3
注意:这里加了console=ttyS0 才有很多输出信息,不加没有
注意:这里的hda.bin是fabrice bellard的jslinux中的
注意,这里加了 -serial 才输出到屏幕上,在vnc连进去还是到"ok,booting the kernel"
如果不开-s和-S的调试模式,直接气得弄个qemu的话,append参数里面有console则会在当前命令行进入系统

可以使用qemu官方的linux-0.2.img(不过这个img自带2.6.20的内核,不影响)
如果不适用我们编译的内核,而直接用他自己的内核
/usr/libexec/qemu-kvm linux-0.2.img -vnc 0.0.0.0:3
vnc连接后
可以去看一下内核的版本

其中-S 是gdb需要的
远程使用vnc 端口3或者5903

进入后应该是一片漆黑
ctl+alt+2
进入qemu调试
然后输入gdbserver回车
默认开启1234端口
指定端口用
(qemu) gdbserver tcp::1233
如果省去gdbserver这步骤
可以启动的时候直接加-s 注意小s是启动server,大S是暂停
/usr/libexec/qemu-kvm -kernel linux-2.6.20.debug/arch/i386/boot/bzImage -hda hda.bin -append "root=/dev/hda" -serial stdio -vnc 0.0.0.0:3 -S -s

可以netstat一下1234端口是否打开
netstat -nltp |grep 1234
进入linux-2.6.20目录
下面有个vmlinux
如果不使用emacs
直接gdb vmlinux
进入后
target remote localhost:1234
如果使用emacs:
emacs
M-x gdb
Run gdb (like this): gdb -i=mi vmlinux
这里需要设置一下,否则会出现
get Non-stop mode requested, but remote does not support non-stop
的错误
设置方法如下
http://stackoverflow.com/questions/15274798/valgrind-vgdb-with-gdb-in-emacs
M-x customize-option

Customize variable: gdb-non-stop-setting

在state上回车
修改成

可以看到在~/.emacs里面多了
(custom-set-variables ;; custom-set-variables was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(gdb-non-stop-setting nil)) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. ) ~
回到
M-x gdb
target remote localhost:1234
M-x gdb-many-windows

在gdb下 info source 查看当前文件的名字
开始enjoy吧
另外,linux追代码的时候如果使用vim
编译完内核后到linux-2.6.20目录
make tags
生成ctags文件
这样比自己生成的ctags要准,自己生成的当函数重名的时候会跳错乱
配置~/.vimrc
syntax on set tabstop=4 set paste set tags=/home/haoning/rtclinux/websocket/web/jslinux/tmp/linux-2.6.20.jslinux/tags
备注:如果有linux启动不了的问题参考
http://processors.wiki.ti.com/index.php/Kernel_-_Common_Problems_Booting_Linux
http://serverfault.com/questions/471719/how-to-start-qemu-directly-in-the-console-not-in-curses-or-sdl
qemu:http://wiki.qemu.org/Testing
参考:http://blog.chinaunix.net/uid-20729583-id-1884617.html
http://blog.chinaunix.net/uid-26872853-id-3428938.html
这里有版本相关的问题
参考极客范:http://www.geekfan.net/8663/
- config_linux-2.6.zip (5.5 KB)
- 下载次数: 1
评论
2 楼
haoningabc
2015-12-17
leebyte 写道
太NB了,期待早日用上Killinux!
么么哒
1 楼
leebyte
2015-12-17
太NB了,期待早日用上Killinux!
发表评论
-
xl2tp 备份
2019-09-24 16:25 7632019年9月24日更新: 注意,需要开启firewall ... -
sdl笔记
2019-01-31 17:19 752sdl教程教程 https://github.com/Twin ... -
tinyemu
2019-01-24 17:59 1460参考https://bellard.org/jslinux/t ... -
aws搭建xl2tp给iphone使用
2018-12-26 21:37 19202019年12月26日 可以参考原来的配置 https:// ... -
spacemacs的国内镜像
2018-07-03 19:36 3364装emacs25以上可以装spacemacs 目前在mac上 ... -
nginx模块开发(二) 使用gdb-dashboard调试
2017-08-11 18:47 2047gdb-dashboard或者 gdbgui 或者gdb自带 ... -
consul的基本使用
2017-06-27 11:13 1425### 安装 [centos7上consul的安装](ht ... -
lvs的helloworld
2017-06-13 20:36 608###################lvs######### ... -
系统调用的helloworld
2017-05-04 16:14 670《2.6内核标准教程》 p293 #include < ... -
bitcoin和cgminer的安装
2017-04-05 22:45 1975参考 http://blog.csdn.net/rion_ch ... -
ceph安装和常用命令
2017-03-21 21:55 970/etc/hosts ssh-keygen ssh-copy- ... -
mobile terminal 笔记
2016-12-02 15:35 667找出旧的iphone4 越狱之后可以变个小操作系统 mobi ... -
spacemacs的安装
2016-09-23 10:06 1418spacemacs http://ftp.gnu.org/g ... -
socket基础和select(python)
2016-06-14 17:21 1823上接 c语言的socket基础ht ... -
socket基础(c语言)
2016-06-14 16:45 1027不使用select 普通的基础socket连接,对多个客户端的 ... -
ffmpeg+nginx 的直播(2,直播摄像头和麦克风)
2016-05-28 20:21 4409假设我的服务器是centos7 192.168.139.117 ... -
ffmpeg+nginx 的直播(1,直播播放的视频文件)
2016-05-26 17:11 664264位操作系统centos7 ############ 1.一 ... -
socat和netcat(nc)
2016-04-29 22:36 1773转 原文链接: http://www.wenquan.name ... -
neutron基础九(qemu nat网络)
2016-02-06 17:21 1646接上基础八,kvm透传nested忽略 1.在主机ce ... -
neutron基础八(qemu 桥接网络)
2016-02-06 13:13 1560qemu的桥接和nat的qemu启动命令是一样的,但是后续的脚 ...
相关推荐
4-实战使用 qemu + gdb 调试 Linux 内核以及网络配置.md
本篇将深入探讨如何利用QEMU来模拟树莓派3B进行Linux内核调试,重点关注设备树(Device Tree)和原版内核文件的使用。 首先,QEMU是一个开源的全系统虚拟机,它可以在一个平台上模拟运行另一个平台的系统。通过QEMU...
qemu+kvm详细教程 本教程将详细介绍qemu+kvm的使用方法,以及两种之间的关系。 首先,qemu是一款开源的虚拟机监视器,可以模拟各种处理器架构和设备,实现对guest操作系统的模拟。KVM(Kernel-based Virtual ...
原版内核
通过将 GDB 与 QEMU 结合,可以实现源代码级的内核调试。 在使用 GDB 与 QEMU 调试内核分析时,存在一个问题。当内核允许中断时,单步命令(n 与 s)会进入时钟中断。这是因为 QEMU 的虚拟 CPU 在接收到 s 命令前是...
三、QEMU用于内核调试的准备 1. 获取Linux内核源码:首先,你需要从官方网站下载Linux内核源码,并将其解压到本地目录。 2. 配置内核:使用`make menuconfig`命令配置内核,确保开启调试选项,如`CONFIG_DEBUG_INFO`...
本文档详细介绍了:在windows10主机的vmware软件中安装ubuntu18.04系统,再基于x86架构的ubuntu18.04,搭建openEuler_aarch64架构的qemu虚拟机。
"QEMU+SPICE+USBredir详细编译步骤" 本文将详细介绍如何在 Linux 系统(包括 CentOS、Ubuntu 等)下编译 QEMU 和 SPICE 协议,使其支持 USB 重定向。 一、编译 libusb libusb 是一个开源的 USB 库,提供了访问 ...
这个版本的QEMU是QEMU的一个早期版本,可能不包含所有现代特性,但仍然能够支持基本的Linux内核调试。在使用旧版本时,需要注意的是,某些新功能或优化可能未被实现,因此可能需要查阅当时的文档或社区资源来获取...
EVE-NG QEMU镜像列表 Update7,pdf repower 6-6.2r fortinet-5.2.rar fortinet-5.4.rar se-2.0.partol.rar ise-2.0. part02rar ise-2.0.part03rar ise-2..parton.rar ise-2.0.parto5rar ise-2.0.parton.rar linux-...
调试 Linux 内核 本文将教您如何使用 QEMU 和 GDB 调试 Linux 内核,从安装 QEMU 到编译内核和使用 ...使用 QEMU 和 GDB 调试 Linux 内核需要安装 QEMU,编译内核,使用 qemu+gdb 调试内核,并且熟悉 GDB 的基本命令。
设备树
标题中的“行业分类-物理装置-一种通过nova调用qemu+guest+agent接口的方法”表明,这个压缩包文件的内容可能涉及云计算领域的虚拟化技术,特别是针对物理设备的管理。Nova是OpenStack开源云平台中的核心组件,主要...
RISC-V GDB调试指南是一个由SHAKTI Development Team @ IIT Madras开发的教程,旨在帮助用户理解和掌握如何使用GDB(GNU调试器)来调试RISC-V架构的程序。GDB是一款强大的源代码级调试器,支持多种处理器架构,包括...
该脚本文件用于使用您的 kernel.img 文件和 kernel.elf 启动 QEMU 和 GDB,以便您可以愉快地调试。 该脚本采用两个参数: $1(强制)- kernel.img 文件的相对路径$2(可选)- kernel.elf 文件的相对路径。 如果没有...
在本文档中,我们将探讨如何在树莓派4B上安装并运行基于aarch64架构的openEuler操作系统作为虚拟机,利用树莓派的硬件虚拟化功能和开源工具libvirt以及qemu。首先,我们需要确保树莓派4B已经安装了openEuler-20.03-...
下载源码 mkdir trusty cd trusty ...repo sync -j32 编译 ./trusty/vendor/google/aosp/scripts/build.py generic-arm64 查看编译结果 ls build-root/build-generic-arm64/lk.bin 安装运行依赖 sudo apt install ...
此配置文件.config是针对QEMU模拟器裁剪的linux-5.5.9内核源码配置,以减少编译时间。 https://blog.csdn.net/eidolon_foot/article/details/104905084。
安装QEMU,了解QEMU对multiboot的 支持情况 可以使用其他虚拟机或模拟器 遵守multiboot协议,写multiboot header 直接在VGA的显存中写“helloworld” 使用串口输出“HELLOWORLD” 了解并掌握必要的汇编 了解Makefile...
这里说明下,本人调试的内核版本是2.6.11.12,为什么去调试这么“古老”的版本?原因不多说了,你手头也许正拿着ULK3,而它针对的内核版本正是2.6.11,有比这更好的理由吗?而且这个版本不算旧,已不算新,我认为还...