在Fedora22环境下编译调试linux 0.12
来源:互联网 发布:淘宝卖家基本设置出错 编辑:程序博客网 时间:2024/04/30 14:31
概述:
本文介绍在Fedora22中编译调试Linux0.12。本文基于网友提供的Linux0.12源代码(我在makefile中做了一处修改)、赵炯博士所提供的linux-0.11-gdb-rh9-050619资料包1,2等资源,完成能够在Fedora22中编译并调试Linux0.12内核(根文件系统存放与硬盘中,而不是软盘)。
环境:
Fedora: Fedora release 22
gcc(g++): 5.1.1 20150618 (Red Hat 5.1.1-4)
BOCHS: 2.6.8
as: 2.25
ld: 2.25-8.fc22
nasm: 2.11.06 compiled on Feb 18 2015
gdb: 7.9-11.fc22
要点:
1,安装BOCHS
a) 需要先安装(安装bochs的必要条件):
dnf install libX11
dnf install libX11-devel
dnf install gtk+
dnf install gtk+-devel
dnf install libXrandr
dnf install libXrandr-devel
b) 下载BOCHS源代码
c) 在源代码目录中运行BOCHS脚本./configure –enable-gdb-stub
d) make
e) make install
f) BOCHS安装完成
2, 编译Linux0.12内核,网友所提供的版本3。
3, 其它必要文件
a) *.bxrc,附件中为bochsrc-gdb.bxrc
b) 根文件系统,名为:rootimage-0.12-hd
c) 运行bxrc的脚本
4, 运行gdb、BOCHS调试
5, 其它说明
a) 资料下载:点击打开链接
b) bochs找不到
解决办法:bochs默认安装于/usr/local/bin/路径,请将其拷贝至/usr/bin/路径下;
c) 下载相关资料后,不要修改任何文件,直接实验一遍,以测试环境是否OK;
d) gdb控制端中不断地出现page_fault的情况:
解决办法4:
1) 修改bochs的gdbstub.cc文件的代码:
将代码:
switch (buffer[0]) { // 'c [addr]' Continue. addr is address to resume. // If addr is omitted, resume at current address. // This packet is deprecated for multi-threading support. See [vCont packet] case 'c': { /* 此处省略数行代码 -- by 博主 */ if (last_stop_reason == GDBSTUB_EXECUTION_BREAKPOINT || last_stop_reason == GDBSTUB_TRACE) { write_signal(&buf[1], SIGTRAP); } else { write_signal(&buf[1], 0); } put_reply(buf); break; }
修改为:
switch (buffer[0]) { // 'c [addr]' Continue. addr is address to resume. // If addr is omitted, resume at current address. // This packet is deprecated for multi-threading support. See [vCont packet] case 'c': { /* 此处省略数行代码 -- by 博主 */ if (last_stop_reason == GDBSTUB_EXECUTION_BREAKPOINT || last_stop_reason == GDBSTUB_TRACE) { write_signal(&buf[1], SIGTRAP); } else if ( last_stop_reason == GDBSTUB_STOP_NO_REASON ) { write_signal(&buf[1], SIGSEGV); } else { write_signal(&buf[1], 0); } put_reply(buf); break; }
2) 开始gdb后,输入handle SIGSEGV nostop noprint ignore ,以忽略bochs传递过来的SIGSEGV信号。
OK,实践结果:
后记:
先发布,有问题再改:)
参考:
[1] Linux内核完全剖析-基于0.12内核
[2] http://www.oldlinux.org/Linux.old/kernel/0.1x/
[3] http://www.oldlinux.org/oldlinux/viewthread.php?tid=15138&highlight=nasm
[4] http://blog.163.com/shaoyong_2001/blog/static/1716125702013399858963/
- 在Fedora22环境下编译调试linux 0.12
- HBase 在linux环境下本地编译及调试
- 在Linux环境下调试静态库
- 在linux环境下如何调试live555
- 在linux环境下调试总结
- Fedora22下git和github环境搭建
- 在Linux x86_64环境下编译memcached
- 在linux下建立交叉编译环境
- glew在linux环境下的编译
- 在linux环境下编译C++ 程序
- MQTT在linux下环境下的编译与配置
- linux在eclipse下编译并单步调试libevent
- qgroundcontrol在LINUX下的编译与调试
- 在 Fedora 下建立 ARM-Linux 交叉编译环境
- 在linux环境下编译avr单片机程序
- 在linux下编译gloox需要的环境
- ActiveMQ-CPP在linux环境下的编译
- 在 Fedora 下建立 ARM-Linux 交叉编译环境
- iOS-绘图介绍
- DevExpress XPO 开发指南 简要
- 计算机领域在于创新,做好自己散文送上
- 进程调度算法
- 剑指Offer面试题34(java版):丑数
- 在Fedora22环境下编译调试linux 0.12
- osgi5——camel整合activiti
- pat(B) 1002. 写出这个数
- UE4发报机-关卡蓝图调用蓝图类的发报机
- [Android]Volley在没有网络时读取图片缓存时出现的问题
- LDS文件格式分析
- x86架构和arm架构处理器分析
- mybatis 源码系列 组件之 Transaction
- 百度编辑器多图上传返回图片绝对路径问题