利用bochs调试引导程序和Linux内核

    今天使用bochs2.4.5调试《Linux内核完全注释》上的一个简单的启动代码例子,bochs是一个模拟Intelx86指令系统很好的软件系统,可以从网上免费下载,下文就如何进行调试做说明。

先来看到的是《Linux内核完全注释》中的一个例子:在Ubuntu10.04中编写代码后保存为boot.s文件

.globl begtext,begdata,begbss,endtext,enddata,endbss    !全局标识符,供ld86链接使用       .text  !正文段       begtext:       .data  !数据段       begdata:       .bss   !未初始化数据段       begbss:       .text           BOOTSEG = 0x07c0   !BIOS加载bootsect代码的原始段地址       entry start       start:            jmpi go,BOOTSEG    !段间跳转至0x07c0:go处,该跳转语句会把cs寄存器加载为0x07c0(原为0)        go:  mov ax,cs            mov ds,ax            mov es,ax            mov [msg1+17],ah                mov cx,#20         !共显示20个字符,包括回车换行             mov dx,#0x1010     !字符将显示在屏幕第17行,第17列             mov bx,#0x000c     !字符显示为红色             mov bp,#msg1       !执向要显示的字符串                     mov ax,#0x1301     !写字符串并移动光标到串结尾处             int 0x10    !BIOS屏幕显示中断int 0x10。寄存器cx中是字符串长度值,dx中是显示位置值,bx中显示使用的字符属性,es:bp指向字符串            loop0:  jmp loop0    msg1:  .ascii "Loading system......"    !调用BIOS中断显示的信息。共20个ASCII码字符            .byte 13,10                      !回车换行    .org 510                                 !表示以后语句从地址510(0x1FE)开始存放           .word 0xAA55                     !引导扇区有效标志,供BIOS加载引导扇区使用。必须处于引导扇区最后2字节处    .text    endtext:    .data    enddata:    .bss    endbss:   

该段代码需要使用as86汇编编译器编译,在Ubuntu10.04中没有,需要先apt-get install bin86进行安装,安装结束后使用

as86 -0 -a -o boot.o boot.s   //编译

ld86  -0 -s -o boot boot.o     //链接,去掉符号信息

dd    bs=32 if=boot of=cun skip=1 //删除BOOT程序前的32B,这部分是MINIX头结构,并将文件名改为cun(这是偶的名字

<-_->)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwxfgf.html