Linux 0.11 实验环境搭建与调试
缘起
之前我写过一篇博文:Linux 0.11 实验环境搭建
本以为有了这个环境(gcc-3.4 & gdb-6.8),就可以调试无忧了。谁知遇到了以下问题:
(1)用 gdb 调试 main 函数的时候,无法输出变量的值。总是提示:
No symbol “XXX” in current context.
(2)虽然在编译时为 gcc 加上了-gdwarf-2 -g3
这两个选项,但仍然无法查看宏的定义。
如下图所示:
对于(1),因为有-g
选项,所以 gcc 编译后确实生成了相关符号,但为什么 gdb 总说找不到符号呢?因为 gdb 版本过低,对于较高版本的 gcc 产生的符号表,它根本不认识,所以说找不到符号。解决办法就是升级 gdb.
对于(2),我本以为原因同(1)。把 gdb 升级到 8.1 还是不行,看来另有原因。
我写了一个小程序,gcc-5.4.0 配合 gdb-8.1,调试时可以打印宏的值,info macro xxx
等命令没有问题。所以,我打算用高版本的 gcc 编译 Linux-0.11.
问题来了,Linux-0.11 已经是很古老的代码了,用高版本的 gcc 根本编译不过,怎么办呢?好在有很多前辈勇于探索,修改了源码和 Makefile,使得 Linux-0.11 可以被高版本的 gcc 编译通过。
环境搭建
他山之石,可以攻玉。搜了一波后,发现了一个叫“泰晓科技”的网站,其官网是http://tinylab.org/,官方代码仓库是 https://github.com/tinyclub
代码仓库里面有个项目——Linux 0.11 Lab
下载源码
得到linux-0.11-lab-master.zip
文件,解压后进入目录linux-0.11-lab-master
,如下图:
用make help
命令可以查看帮助信息。
—– Linux 0.11 Lab (http://tinylab.org/linux-0.11-lab) —–
:: Compile ::
make –generate a kernel floppy Image with a fs on hda1
make clean – clean the object files
make distclean – only keep the source code files
:: Test ::
make start – start the kernel in vm (qemu/bochs)
make start-fd – start the kernel with fs in floppy
make start-hd – start the kernel with fs in hard disk
make start-hd G=0 – start with curses based terminal, instead of SDL
:: Debug ::
make debug – debug the kernel in qemu/bochs & gdb at port 1234
make debug-fd – debug the kernel with fs in floppy
make debug-hd – debug the kernel with fs in hard disk
make debug DST=boot/bootsect.sym – debug bootsect
make debug DST=boot/setup.sym – debug setup
make boot BOCHS=bochs-debugger VM=bochs – debug with bochs internal debugger
make switch – switch the emulator: qemu and bochs
make boot VM=qemu|bochs – switch the emulator: qemu and bochs
:: Read ::
make cscope – genereate the cscope index databases
make tags – generate the tag file
make cg – generate callgraph of the default main entry
make cg f=func d=dir|file b=browser – generate callgraph of func in file/directory
:: More ::
>>> README.md <<<
~ Enjoy It ~
—–Linux 0.11 Lab (http://tinylab.org/linux-0.11-lab)—–
—> Linux Kernel Lab (http://tinylab.org/linux-lab) <—
安装一些软件
这里以 Linux Ubuntu 操作系统为例。作者推荐用 docker.
The docker install method is recommended for all systems, including Linux, Windows and Mac OS.
不过我没有用 docker,还是用比较原始的办法。
Here is the deprecated method:
The Linux distributions: debian and ubuntu (>= 14.04) are recommended
Install basic tools
$ sudo apt-get install vim cscope exuberant-ctags build-essential qemu lxterminal
Optional
$ sudo apt-get install bochs vgabios bochsbios bochs-doc bochs-x >libltdl7 bochs-sdl bochs-term $ sudo apt-get install graphviz cflow
编译
在linux-0.11-lab-master
目录下,运行make
命令.
运行
$ make start
采用 qemu 或者 bochs 模拟器运行 Linux-0.11,如果想切换模拟器,可以用
$ make switch
调试
$ make debug
运行后出现如下界面:
再开一个终端,还是在linux-0.11-lab-master
目录下,运行命令
$ gdb --quiet src/kernel.sym
这时候,就可以用 gdb 的各种命令进行调试了。
如何查看宏
正如 GDB 官网上说:
We pass the
-gdwarf-2
and-g3
flags to ensure the compiler includes information about preprocessor macros in the debugging information.
所以,先要给 gcc 添加 -gdwarf-2
和-g3
选项。对于本实验环境,就是修改src 目录下的 Makefile.head 文件。为第 29 行的CFLAGS
加上 -gdwarf-2 -g3
。
如图:
之后重新编译,再次调试。
在调试的时候,可以用p(print)
命令查看宏的值,还可以用
info macro 宏名
例如:
【参考资料】
https://sourceware.org/gdb/onlinedocs/gdb/Macros.html
https://github.com/tinyclub/linux-0.11-lab/blob/master/README.md
Linux 0.11 实验环境搭建与调试相关推荐
- Linux 0.11 实验环境搭建
如果想学习Linux 0.11,实验环境是必不可少的.最好是能编译,能运行,能调试. 如今大家都是用64位的Linux操作系统,而且是高版本的GCC(4.0以上),所以环境搭建是个难题.要么就是编译后 ...
- linux0.11+Bochs环境搭建和使用
Linux 系统的创始人在一篇新闻组投稿上所说的,要理解一个软件系统的真正运行机制,一定 要阅读其源代码(RTFSC – Read The Fucking Source Code).系统本身是一个完整 ...
- 自己动手搭建 Linux 0.12 编译环境 — Linux主机
Hi,又见面了,这两天事情比较少,所以又快速构思这篇的内容. 上篇我用极简模式说完了关于Linux 0.12的模拟环境Bochs,这篇同样沿袭上篇的思路,不过主要内容是关于Linux主机.在搭建Lin ...
- Xp下的程序编译成linux,WinXP下打造自己的linux 0.11简易编译环境(原创)
http://caiwei8888.blog.163.com/blog/static/3017424120101913353856/ 学习赵炯博士的<linux 0.11 内核完全注释>, ...
- Eclipse CDT+Qemu调试Linux 0.11内核
操作系统:CentOS 6.3 for 32bit 需要软件:eclipse-cpp-galileo-SR2-linux-gtk.tar.gz qemu 需要内核文件:linux 0.11(Makef ...
- LINUX 0.11内核完全剖析学习笔记-第三章内核编程语言和环境
一.编译器 linux 0.11 集成了两种汇编器.一种是能产生16位代码的as86汇编器,使用配套的ld86链接器:另一种是GUN汇编器gas,使用GNU ld链接器俩链接产生的目标文件. 1.1 ...
- ARM64+树莓派4b+JLINK仿真器实验环境搭建指南
ARM64体系结构与编程,全球原创的ARM64实验,笨叔带队,等你哟! ARM64体系结构与编程-yx音频:00:00/00:20 奔跑吧第三季视频课程实验设备清单 硬件开发平台:树莓派4B (2G或 ...
- Linux 0.11内核分析04:多进程视图
目录 1 进程概念的引入 1.1 使用CPU的直观想法 1.2 直观用法的缺点 1.3 直观用法的改进 1.4 进程的概念 1.4.1 保存程序执行状态 1.4.2 进程与PCB 1.5 Linux ...
- Linux 0.11内核分析01:概述
目录 1. 什么是操作系统 1.1 计算机硬件组成 1.2 操作系统基本结构 2. 操作系统核心视图 2.1 多进程视图 2.1.1 操作系统的相关演变 2.1.2 核心思想 2.2 文件视图 2.2 ...
最新文章
- Navicat 2003-can't connect to MYSQL server on 'localhost'(10061)
- SQL Server-聚焦使用视图若干限制/建议、视图查询性能问题,你懵逼了?(二十五)...
- basis--IMG后台如何显示事务码(How to display IMG's Tcode)
- java 读取中文配置文件问题
- QT的QMutableVectorIterator类的使用
- 四则运算栈c语言程序,四则运算 
c语言编程
- Python 18.4 aiohttp
- 整理 .NET 平台下一些强大的开源控件和类库
- 一个好的公司网站应怎么样去推广
- jquery click()方法模拟点击事件对a标签不生效的解决办法
- 怎么在pyqt界面上添加新菜单栏选项_PyQt创建菜单栏、工具栏
- 1月16日英语计算机统考,高考英语听力首次机考16日开考
- Ubuntu 安装sopcast-player看网络电视
- 带你读论文系列之计算机视觉--Inception V4
- 计算机键盘音乐 卡农,巴赫键盘音乐
- Robotic KDL library
- windows10安装配置vim
- 如何在 GitLab CI 管道中构建 Docker 映像
- 上海职称不用考计算机和英语翻译,国家翻译专业资格考试将替代职称评定
- android studio按坐标布局,Android studio一个手势锁的界面布局