摘要:上篇我们实现了时钟中断的响应,以及输出简单的字符功能。本篇我们实现系列文章的最终目的:任务切换。任务切换在x86上,硬件给提供了硬件支持,简单可行。涉及到tss切换,并自动实现了ldt切换。非常简单。1. 看代码head.sSCRN_SEL = 0x18 TSS0_SEL = 0x20 LDT0_SEL = 0x28 TSS1_SEL = 0X30 LDT1_SEL = 0x38 TSS2_SEL = 0X40 LDT2_SEL = 0x48 .globl startup_32 .text startup_32: movl $0x10,%eax mov %ax,%ds mov %ax,...
阅读全文
摘要:上几节的介绍中,我们能够用bootloader加载32位代码,进入保护模式,并且跳转到了保护模式下的程序里,本篇我们实现在32位模式下完成写显存输出字符,并且在时钟中断中完成显示字符的程序。此后的代码,我们会略去bootloader不说,只说明32位程序head.s1. 看代码head.sSCRN_SEL = 0x18 .globl startup_32 .text startup_32: movl $0x10,%eax mov %ax,%ds mov %ax,%es mov %ax,%gs mov %ax,%fs lss init_stack,%esp call setu...
阅读全文
摘要:写底层代码,我们需要特别的手段去调试,去debug.本文针对几种应用场景,介绍几种手段.1. 查看文件的二进制值 - hexdump命令以文章(2)中的head程序为例子ld head.o -m elf_i386 -Ttext 0 -e startup_32 -o system之后,生成system是有文件头的可执行文件,并不是纯粹的代码.hexdump system命令输出如下:0000000 457f 464c 0101 0001 0000 0000 0000 00000000010 0002 0003 0001 0000 0000 0000 0034 00000000020 1140 0
阅读全文
摘要:上篇文章我们完成了一个简单的bootloader,与其说是bootloader,不如说是boot,本篇我们完成loader部分功能.loader部分是在boot部分基础上,通过到约定好的启动盘位置上读数据载入内存,达到loader的目的。到启动盘读数据是bios提供的功能调用.1. 铺垫(1)我们这次的程序分两个部分,一个部分是bootloader,boot和loader功能;一个是head程序,这个程序什么也不做,简单的几条指令,我们只是要加载它执行它而已.(2)bootloader是as86+ld86的产物,语法遵从as86语法;head是gnu汇编器语法,使用gcc编译ld链接,是32位
阅读全文
摘要:直接看代码,即使已经理解了代码,但是还是会有种没有学到手的感觉.真正的掌握来自实践,来自己动手做出来.“简单AB任务切换程序”系列文章的目的是,在bochs下,实践出简单AB两个任务的切换.1. bochs安装或者编译参考Ubuntu10.04搭建linux-0.11编译环境(1.bochs安装和使用)Ubuntu10.04搭建linux-0.11编译环境(2.bochs编译)2. 实现一个最简单的bootloader(1)bootloader,顾名思义boot + loader,我们现在只实现boot,loader其实就是简单bios中断调用,后面接触.(2)此处使用汇编语言,汇编和连接器分
阅读全文
摘要:ubuntu10.04上自带的bochs不能调试,需要自行编译带有调试功能的bochs.1.源码bochs-2.4.6.tar.gz2.安装依赖库sudo apt-get install build-essential xorg xorg-dev gnome-core-devel3.编译bochs./configure --enable-debugger --enable-disasmmake -j5sudo make install4. bochs需要的所有东西都具有了,可以删除掉从包安装的bochssudo apt-get remove bochs bochsbiso bochs-doc5
阅读全文
摘要:oldlinux发布的bochs配置文件与Ubuntu10.04上的bochs版本不匹配,造成配置文件解析的一系列问题,本文解决此类问题.1. 安装bochs sudo apt-get install bochs vgabios bochs-x bochsbios bochs-doc bochs-sdl如有问题,找到合适源即可.2. 获取可启动的linux-0.11 系统1. 下载压缩包http://oldlinux.org/Linux.old/bochs/linux-0.11-devel-060625.zip2. 解压unzip linux-0.11-devel-060625.zip3. 进
阅读全文