现在对着教程开始工具链部分的学习了解,在汇编工具以及汇编语言讲解的过程中引入了一个测试代码:

492_linux内核学习_使用python处理引导扇区程序并在Bochs中运行_编译链接

         我用了截图来展示这段代码,这样能够看到一部分语法信息。这一次暂且不去分析这段代码的实现以及功能,先来测试使用一下工具链。这是一段引导扇区程序,能够正常编译链接通过,并且在Bochs里面运行。

         实现运行,首先需要实现编译链接:

492_linux内核学习_使用python处理引导扇区程序并在Bochs中运行_编译链接_02

         编译以及链接都很顺利,而上面的几个编译选项都是从教程中超过来的。其中,-0用于指定生成8086的16位目标程序; -a用于指定生成与GNU as和ld部分兼容的代码;-s选项用于告诉链接器要去除最后生成的可执行文件中的符号信息。-o是我唯一熟悉的,用于指定生成的可执行文件或者目标文件。

         生成后,通过ls命令查看了细节信息,发现boot大小不是512而是544。按照教程中的说法,这个是因为程序最前面的32个字节是MINIX可执行文件的头结构,需要使用二进制的编辑器去掉。

         我手里没有专用的二进制编辑器,临时不想去研究dd。尝试写了一个简单的python二进制处理脚本,其实我觉得直接使用C语言实现应该也是没有问题的。代码简单:

492_linux内核学习_使用python处理引导扇区程序并在Bochs中运行_编译链接_03

         中间输出了一下这段程序处理前后的长度信息,运行效果:

492_linux内核学习_使用python处理引导扇区程序并在Bochs中运行_可执行文件_04

         新生成的文件已经是512字节了,接下来,利用已经有的Bochs配置模板修改一下,尝试加载这个引导扇区程序。

492_linux内核学习_使用python处理引导扇区程序并在Bochs中运行_编译链接_05

         核心的修改点就这一个,后面的配置是否用得到且不去管了,接下来启动Bochs看看效果:

492_linux内核学习_使用python处理引导扇区程序并在Bochs中运行_编译链接_06

         看招教程的说法,应该会有一个什么声音,在我的机器上是没有听到。不过,加载系统的提示符的确是显示出来了。这样的软硬件交互信息,而且是贴近PC而不是嵌入式的应用我接触还是很少的。后面,仔细分析下,看看或许会有更多的收货。