前言

本文为该系列博客的第一篇,本人学习ReactOS的新手一枚,因为很喜欢Windows NT系列的操作系统,一直想要深入的学习和研究一下其内部的原理,以前很早就看到有人说开源操作系统ReactOS架构和Windows NT极其相似,那么此种情况下,用ReactOS来当做学习的对象最好不过了。

为什么要学习ReactOS?

我现在本身正在从事软件开发的职业,见识了程序中各种五花八门的技术,但是这些技术的本身来讲,是由Windows NT内核提供的支持,那么如果在熟悉操作系统结构的情况下,对以后的编程以及代码编写将会有很多的好处。正好打算以后想往游戏反外挂的方向去发展,所以学习操作系统结构更是势在必行了。

ReactOS

ReactOS(官方网站:http://www.reactos.org)是一款完全开源的仿Windows NT 5 Service Pack 2(5.2)的操作系统,其内核结构和Windows Server 2003的内核结构基本一致。

下载

目前我使用的版本为0.4.10-dev, 代码Git地址:(https://github.com/reactos/reactos)。以下为我使用的详细的编译版本:                                                                                    

编译

编译整体来说其实非常简单,只是可能我的搜索技巧有问题,在编译过程中一直没有找到有效的方法。编译通过加能正常调试用了好几天的时候。编译方式目前提供了三种方式:

  • 1. ReactOS提供的编译环境;
  • 2. 基于VS IDE命令行的编译方式;
  • 3. 生成VS sln的方式进行编译;

基于 ReactOS提供的编译环境方式:

该方式非常简单,只需要从ReactOS官方网站下载编译环境,然后下载安装然后就可以执行编译了。地址(ReactOS开发环境下载),

打开编译环境之后,执行源码根目录下configure.cmd

完成之后,进入生成的output-MinGW-i386

然后再执行Ninja, 这时候就会进入编译阶段了, 等待编译完成之后,所有的模块就编译完成了。

这时候再执行ninja livecd, 或者 ninja bootcd.就会生成可引导的ISO文件了。

, 这时候用这个文件就可以放到虚拟机里面运行测试了。

2. 基于VS IDE命令行的编译方式和生成VS sln的方式进行编译

为什么这两种方式要放在一起讲,因为其实他们都是使用的相同的方式进行的编译,一个是基于命令行,都是VS IDE环境进行的编译,它们在编译的过程中遇到的问题都是类似的。

我这里选择的是VS 2015进行编译的,还可以使用其他的环境进行编译。

首先打开VS 2015 开发者命令行并切换到ReactOS源码的根目录下:

这里分开讲一下,

1. 基于VS IDE命令行的编译方式, 使用和ReactOS类似的方法进行的配置和编译,首先执行configure.cmd, 然后切换到生成的同级目录output-VS-i386下,执行ninja,

2. 生成VS sln的方式进行编译, 他的方式略微不同,同样打开VS 2015开发者命令行,并切换到源码根目录下,并执行"configure.cmd VSSoution" , 这个时候用VS开发环境去打开output-VS-i386-sln下的REACTOS.sln编译,也可以在命令行内使用msbuild REACTOS.sln /m执行编译。

编译和运行的问题

额外的设置

以上为没有出错的编译过程, 不出错的情况下,整个过程完成不过20多分钟。

第一种基于ReactOS编译环境编译的文件,一般不会出现问题;1W多个文件10多分钟就编译完成了。但是我的目的并不是为了编译和运行它, 我还需要对操作系统进行调试,ReactOS提供的编译环境并不支持直接用VS或者Windbg调试,(没有PDB文件)。所以我们需要编译一个调试的版本能让VS环境或者Windbg进行调试以观察流程。

在尝试过程中遇到了很多的错误,比如:错误报告说文件内文字编码无法识别,反正就是各种错误都出现了。最后都解决不了。 - -,大体错误如下:

f:\open_source\reactos\base\setup\usetup\lang/bg-BG.h: warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss

f:\open_source\reactos\base\setup\usetup\lang/bg-BG.h(47): error C2001: newline in constant
f:\open_source\reactos\base\setup\usetup\lang/bg-BG.h(48): error C2059: syntax error: 'constant'
f:\open_source\reactos\base\setup\usetup\lang/bg-BG.h(56): error C2059: syntax error: '}'
f:\open_source\reactos\base\setup\usetup\lang/bg-BG.h(75): error C2001: newline in constant
f:\open_source\reactos\base\setup\usetup\lang/bg-BG.h(76): error C2059: syntax error: 'constant'

主要需要设置一下操作系统的一些选项并重启电脑,然后这些编译问题都可以被解决。

设置1:

将当前操作系统的 locale设置为English, 并且你还需要安装一个英文的语言。

以前很多的国外项目编译都是切换一下这个locale就可以正常编译了,但是这一招对于ReactOS编译居然不好使。

设置2(修改当前时区并重启):

以上设置修改并重启电脑之后,重新去编译项目你会发现都没有问题了。

无法加载VS编译的ISO问题

使用VS编译的ISO文件无法在虚拟机里面成功引导,估计某个地方有点儿什么问题。如果不想用VS编译的文件,那么使用第二个编译方式编译的出来的文件就可以满足调试需求,如果一定要使用VS里面编译的文件来测试等等。那么以下方法可以解决VS编译的ISO无法加载问题。

首先使用ReactOS编译环境编译一个可引导的ISO,此处以为bootcd.iso,编译完成之后,使用软碟通(ISO编辑软件)打开这个ISO, 然后将里面的文件都删除,并将VS编译的ISO的文件替换进去,最后保存。 保存之后就可以用这个ISO来引导和运行了。

因为编译环境的原因,无法直接使用VS编译的文件去替换部分的ReactOS编译环境编译的文件,需要完全替换才行正常运行。否则就会出现错误。

调试

调试我目前使用的方式是Windbg和VS调试的,其他的调试方式请参见《ReactOS Debugging》。

关于Windbg的调试设置, 官网原文如下:

To take full advantage of WinDBG, you need to compile ReactOS with MSVC to get PDB symbols. For MSVC builds this is the default debugging style. If you want to use gcc builds, you need to compile with WINKD option set to TRUE (you can either use CMake-GUI and edit the value after configuring and then reconfigure, or you can edit the default value in the options.cmake file) Another possibility is to replace ntoskrnl.exe and kdcom.dll built with the WINKD = TRUE option. You can also replace kdcom.dll with the one from Windows 2003, which has a few more features such as reconnect and break-in which do not work properly with ReactOS's own kdcom.

大概意思就是,如果要使用Windbg进行调试的话,那么需要重新编译KDCOM.exe和NTOSKRNL.exe,并且需要在编译的时候加入已处理定义:_WINKD_=1,或者将Windows 2003里面的kdcom.dll 替换到\ReactOS\system32\kdcom.dll也行。

VS调试ReactOS

我比较喜欢使用VS进行调试ReactOS,因为这样可以直接进行源码级调试,就像直接用VS写的程序一样方便,而且同时还支持Windbg命令。

VS调试的准备:

首先下载适合VS使用的WDK环境,下载地址:https://docs.microsoft.com/zh-cn/windows-hardware/drivers/download-the-wdk

安装完成之后,打开VS是这样的,

首次运行需要去配置调试目标,

,

设置完成之后,使用VS附加功能,如下图所示:

点击附加就进入等待状态了。

附上一张成功调试的图.

结语

完成这些操作才仅仅是学习ReactOS的第一小步,同时也希望能遇到一样喜欢ReactOS,我们一起成长一起学习。

欢迎加群QQ群号:931238114, 备注:ReactOS学习, 希望大佬来入驻(PS:我还是新手).

下一篇帖子我会介绍ReactOS的启动流程,以及一些可能作为新手最关心的问题。

ReactOS学习笔记--编译和调试相关推荐

  1. 吴恩达深度学习笔记-超参数调试、Batch正则化(第6课)

    超参数调试 一.调试处理 二.为超参数选择合适的范围 三.超参数训练的实践:Pandas VS Caviar 四.正则化网络的激活函数 五.将Batch Norm拟合进神经网络 六.Batch Nor ...

  2. nginx 学习笔记(5) nginx调试日志

    为启动一个调试日志,nginx需要在构建时配置城支持调试模式. ./configure --with-debug ... 而且调试级别应该使用err_log指令来设置: err_log /path/t ...

  3. [libjingle学习笔记]编译注意事项

    1. 注意按照readme设置环境变量,在解压文件时选择解压到"当前目录"后,再拷贝到对应目录,或者直接解压到指定目录,谨防由于解压路径多包含一层文件名而导致编译时找不到库文件. ...

  4. mac vim python3_VIM学习笔记 编译源码(Compile Code)-Python

    Python作为一种解释型编程语言,需要解释器来编译并执行Python代码. 测试Python 对于Linux和Mac操作系统,均已预装Python.而在Windows下,可以使用安装包或者直接解压版 ...

  5. Sharepoint学习笔记—DebugTroubleShooting--不同调试对象的Attach方式

    在Sharepoint的开发环境中调试不同的对象有时需要Attach到不同的进程,下面就是一些常见的情况    1.Farm Solution     -----W3WP.EXE    2.SandB ...

  6. Linux学习笔记-使用gdb调试

    使用gdb调试 在Linux使用gdb命令进行单步调试 在compile这一步添加-g 如: g++ -g main.cpp -o hellowrld 在Makefile里面 %.o: %.cpp   ...

  7. Linux学习笔记-编译与链接的过程

    程序的生成过程分为两步: Linux编译与链接的过程 1.编译:compile,将*.cpp->*.o 2.链接:link,将所有的*.o->executable 编译: g++ -c m ...

  8. blfs(systemd版本)学习笔记-编译安装openssh软件包

    openssh项目地址:http://www.linuxfromscratch.org/blfs/view/stable/postlfs/openssh.html 1.下载openssh包和补丁并校验 ...

  9. JAVA学习笔记——异常处理与调试

    目录 错误与异常 异常分类 声明受查异常 抛出异常 创建异常类 异常捕获与处理 基本结构 再次抛出异常与异常链 带资源的 try 语句 使用异常机制的技巧 断言的使用 启用和禁用断言 使用断言完成参数 ...

最新文章

  1. APP不同上线情况对应的测试流程
  2. R语言ggplot2可视化条形图可视化控制底部和x轴之间没有空格实战:即条形图的底部直接和坐标轴连接
  3. 如何确定开关电源TL431反馈回路的参数
  4. (转)python3 计算字符串、文件md5值
  5. 【计算机组成原理】定点除法运算
  6. 计算机基础与应用教程计算机硬件,计算机基础系列一:计算机硬件
  7. 订阅Jenkins的邮件列表,获取最新的信息
  8. 别把数学想得太难,数学是一场游戏
  9. 读取配置文件工程src目录下配置文件封装,如sms_format.properties
  10. android网络动态获取权限,基于JetPack实现的权限动态获取
  11. SQL Server DTS
  12. ISE14.7添加工程外部的IP核
  13. BatchConfigTool批量配置工具
  14. 显卡简介,显卡怎么查看
  15. js版身份证省市性别查询
  16. 直击|咪蒙公众号自主注销 此前微博已永久关停
  17. yum linux gcc安装包下载,linux下安装yum及gcc
  18. 【VideoQA最新论文阅读】第一篇视频问答综述Video Question Answering: a Survey of Models and Datasets
  19. 7-2 动物声音“模拟器”
  20. 媒体邀约尴尬瞬间(二三则)

热门文章

  1. ug编程内公差和外公差是什么_ug编程内外公差是什么
  2. STAF/STAX安装配置
  3. IDEA 在debug 模式下启动tomcat报错:Application Server was not ..reason:Unable to ping server at localhos:1199
  4. 2018级《程序设计基础(B)II》期末上机考试( 题解)
  5. IoT僵尸网络Miori通过ThinkPHP远程代码执行漏洞进行传播
  6. 2009上海最新“四金”及个人所得税计算(器)
  7. xyplorer保存设置失败_XYplorer有哪些独特的强大之处?又可以在哪些方面替代,或者超越total commander?...
  8. 怎么从安卓设备转移数据到苹果_如何将数据从安卓设备转移到iPhone12
  9. HCU500主轴编码器检测工具
  10. 关于python3的input函数和int()强制转换