积分规则 网站地图 帮助中心    
嵌入式软件 单 片 机 DSP 存储器 传感控制 光电显示
嵌入式硬件 CPLD/FPGA SOPC AD/DA 接口电路 模拟设计
I C设计 通信产品 汽车电子 电源产品 消费电子 数控系统
工业控制 军工/航天 安防产品 医疗电子 计算机外设 测试测量
供应 I C
求购 公司库

  IC 求购 销售 公司 论文 DATASHEET 参考设计 论坛
当前位置: 电子技术 >> 嵌入式硬件 >> X86
  相关分类: 相关文章 | ARM | 新产品 | 下载 | MIPS | X86 |
一个基于X86的小型中文操作系统的设计、编码与调试(二)
 
作者:陈斌   来源:本站原创    点击数:916   更新时间:2007-2-6
您可以添加到网摘 让更多人关注此文章:

    

三 编码过程

1.       开发环境

我们尝试了两种开发环境,LinuxWindows。在Linux环境下,程序开发工具丰富好用,但是在对中文的支持上不够。在Windows下,适合操作系统开发的程序开发工具并不是很多,但对中文支持很好,且具有更大的通用性。所以,在进行了一段时间的Linux开发后,我们选用Windows做为开发平台。

2.       C编译器

我们采用GNUgcc编译器进行C程序的开发。GccLinux下著名的C程序编译器,支持内联的汇编语句,比较适合系统程序的开发。且支持多种目标文件的格式,如coffelf等,可以将C源程序方便地编译成多种目标文件。在Windows环境下,默认情况下产生coff文件格式,而在Linux环境下,默认产生elf格式的文件。

3.       汇编器

在众多的汇编器中,我们选用nasm来进行汇编部分代码的编译。这是因为nasm非常适合操作系统的开发。如用其它的汇编器,在从实模式到保护模式的过渡过程中,因为涉及到16位与32位指令的过渡,一般要直接写二进制代码来进行jmp的步骤。而在nasm中,直接用jmp dword就可以轻松做到。可以使用nasm –f coff a.asm来产生coff格式的目标文件,-f开关用于选择要产生的目标文件类型。Nasm也支持elfcoff等多种目标文件格式。

4.       连接器

在用编译器产生C和汇编目标文件后,下一步是用连接器将它们连接成一个内核文件。我们选用GNUld连接器来进行目标文件的连接工作。

5.       二进制文件格式

Windows环境下,coff文件格式是得到编译器和连接器较为广泛支持的一种目标文件格式。在coff目标文件中,C与汇编产生的标号(Symbol)略有不同,在开发中应予以重视。即gcc在对C源程序中的标号进行处理时,在前面添加了一个下划线。如果我们在汇编程序中要引用这个标号,就要注意增加一个下划线。如有一个C程序里面有一个void maind(void)函数,如在汇编中引用,则要这样定义:

extern  _maind

如果编译成elf文件格式,则没有此问题。

 

四 调试过程

1.       使用X86模拟器

作为计算机的基础软件,在编译后的操作系统一定要在真实的机器上运行才能知道程序是否正确。这样,如果要进行操作系统的调试,要么把本机重启,要么找一台专门的机器用于调试。这样做都不是很方便。

我们还有一个选择就是使用X86系统的模拟器。模拟器运行于现有的操作系统之上,其将操作系统内核读入,在其内部摸拟X86系统。这样,我们运用摸拟器就可以直接在开发机上进行操作系统的运行,非常方便快速。

常见的X86模拟器有VMWareBochs等。VMWare是商业软件,有WindowsLinux两种版本,易于使用,但其是为一般用户开发的,功能较少。Bochs是开源的优秀模拟器,免费使用,而且它体积小巧,功能强大。在我们的开发中,使用Bochs进行系统的模拟环境,并借用Bochs进行二进制级别的调试。

2.       使用Bochs进行二进制级别的调试

在操作系统的开发中,调试是一件比较困难的事情。因为在开发的初期无法移植一些知名的调试软件之前,调试一般只能依靠二进制级的工具来进行。前面提到的模拟器Bochs,在除了模拟功能以外,还具有一定的调试功能。在Bochs目录下,BOCHSDBG.EXE即为集成了调试功能的Bochs可执行文件。在Bochs运行后,出现了如下的提示后,就可以输入一些进行诸如断点设置,汇编/反汇编,查看CPU状态等调试命令。

Next at t=0

(0) context not implemented because BX_HAVE_HASH_MAP=0

[0x000ffff0] f000:fff0 (unk. ctxt): jmp f000:e05b

<bochs:1>

下面是用Bochs进行调试的一些常用命令,熟练掌握这些命令,对调试系统是非常有帮助的。

命令

说明

c

继续执行(continue)

step  [count]

单步执行,count为步数,默认为1(execute count instructions)

Ctrl-C

停止运行

quit

退出bochs

vbreak seg:off

虚拟地址断点,seg为段地址,off为偏移,用于在指定的虚拟地址处设置断点(virtual address break)

pbreak addr            

物理地址断点,addr为物理地址。用于在指定的物理地址处设置断点(physical address break)

info break

显示已经设置的断点情况

delete n

删除断点(Delete a breakpoint)

x  /nuf addr

查看在线性地址处的内存单元内容(Examine memory at linear address addr)
其中:n表示要显示的单元数,u表示单元大小,f表示打印格式

xp /nuf addr

查看在物理地址处的内存单元内容(Examine memory at physical address addr)其中nuf的意义同上

setpmem addr datasize val

设置在物理内存地址addr上的内存单元内容。Datasize为要设置的单元大小,val为要设置的值。

info registers

打印出CPU寄存器的当前值。

set $reg = val

将一个寄存器赋值,其中reg可以换为eax等寄存,如set $eax = 0xA

dump_cpu

CPU的整个状态全部打印出来

disassemble start end

反汇编指定地址的程序。Start为开始的线性地址,end为结束的线性地址。

 

参考文献:

1.        IntelIA-32 Intel® Architecture Software Developer’s Manual Volume 3: System Programming GuideIntel Corporation2002

2.        杨季文,80x86汇编语言程序设计教程,清华大学出版社,1998

3.       Peter AbelIBM PC Assembly Language And Programming(Fourth Edition)Prentice Hall1998

4.       W.Richard StevensAdvanced Programming in the UNIX EnvironmentAddison-Wesley1993

5.       M.Morris ManoComputer System Architecture(Third Edition)Prentice Hall1993

6.       Barry B.BreyThe Intel Microprocessors(Fifth Edition)Pearson Education2000

7.       Maurice.BachThe Design of The UNIX Operating SystemPrentice Hall1986

8.       Andrew S.Tanenbaum  Albert S.WooddhullOperating System:Design and Implementation(Second Edition) Prentice Hall1997



相关文章
· 嵌入式x86:非PC设计的要旨?[69]
· Embedded x86: keystone of your non-PC design?[203]
· VxWorks for X86的输入输出定向[177]
· VxWorks for X86的输入输出定向[217]
· ARM、x86对决移动互联,谁将最后胜出?[244]
热门评论排行
·VHDL设计中电路简化问题的
·江苏嵌入式Linux教育培训
·锐极LINUX驱动培训班定于
·基于实时操作系统μC/OS-
·ARM处理器应用开发4步骤

文章评论
    没有任何评论
*只显示最新10条评论。评论内容只代表网友观点,与本站立场无关。更多评论
发表评论
  * 请先[登陆]再进行评论,谢谢。
评分: 1分 2分 3分 4分 5分
内容: *
发帖须知:
一.所发文章必须遵守《互联网电子公告服务管理规定》;
二.严禁发布供求代理信息,公司介绍,产品信息等广告宣传信息;
三.严禁恶意重复发帖;
四.严禁对个人,实体,民族,国家等进行漫骂,污蔑,诽谤。
 
热点新闻 [更多]
 
各种冲值卡批发销售!独家特价!
特价销售GPS车载导航系统!
数字电视批发销售!你想不到的价格!
品牌相机批发销售!你想不到的价格!
品牌手机批发销售!你想不到的价格!
笔记本电脑批发销售!你想不到的价格!
那一年我做了鸭子2
那一年我做了鸭子1
等你十年(下)
等你十年(上)
 
热门下载 [更多]
 
[ ] 手把手学单片机20个例
[ ] 单片机做的智能台灯
[ ] 单片机入门书
[ ] linux系统移植开发文档
[ ] IC卡的读写程序
[ ] 8051单片机C语言彻底应用
[ 常用软件] 555定时器电路设计软件V1.2
[ 常用软件] 51定时器计算软件
[ ] ARM处理器应用开发4步骤
[ ] 实用电源电路集锦
 
论坛新帖 [更多]
 
新店开业,部分开发板&元器件特...
[原创]VB编程RS232串口...
红外摄像机控制故障分析与处理方...
红外防水摄像机在智能视频监控中...
步进电机不用驱动芯片能驱动吗?...
我要选一块双串口,带AD的单片...
[分享]运放和功放的区别是什么...
4×4矩阵式键盘的课程设计...
做过高速信号滤波的高手帮忙...
做视频信号放大器,各位有什么好...

 
赞助商 [更多]
 


ICP许可证号:[粤 05056597]
联系电话:010-82517432 82517615 传真: 010-82517615

版权所有 Copyright © 2006 嵌入式技术网