文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>linux系统引导探索和实验1

linux系统引导探索和实验1

时间:2006-03-22  来源:blowingwind

  最近因为做的东西太底层,所以有幸接触了linux系统的内核,所以对操作系统产生兴趣 ,也知道了通过什么途径可以接触到系统的相关知识 ,感觉学到很多东西 ,目前的想法是白天在公司分析驱动 ,晚上分析操作系统嘿嘿  ,累了些 ,但感觉很好   我用的是linux-0.11-devel-040809带gcc 核原码的系统 ,前几天终于琢磨出来怎么在bochs上面编译核调试内核 。但是发现内核内容太多所以先从启动部分学习起    废话少说,在参考并且试验网络文章《自己动手写操作系统〉〉失败后 (主要原因是ld86 0.11 没有 - d 选项),经过几天的徘徊 ,终于想另外的办法 ,不就是构造一个软盘或软盘IMG文件么,俺自己写汇编生成BIN然后自己用ULTRA_EDIT拷贝到IMG文件上 ,通过痛苦的实验 ,可以是可以了 但好辛苦 ,我都要哭了 ,这个时候发现俺买过的一本书上有系统试验指南 ,靠,发现的太晚了吧 (以前看到也不明白做什么的) 于是发现了 PARTCOPY NASM等工具这下好了 可以干活了     于是cp了一段启动代码 ------------------------------------------------------------  ; boot.asm
; 从磁盘扇区装载另外一个程序,并且执行
[ORG 0]         jmp 07C0h:start     ; 跳转到段07C0 start:
        ; 设置段寄存器
        mov ax, cs           ;将代码段的内容装载到数据寄存器
        mov ds, ax           ;讲数据段内容放入数据段寄存器
        mov es, ax           ;讲数据段内容放入扩展段

reset:                      ; 重置软盘驱动器
        mov ax, 0           ;
        mov dl, 0           ; Drive=0 (=A)
        int 13h             ;
        jc reset            ; ERROR => reset again

read:
        mov ax, 1000h       ; ES:BX = 1000:0000
        mov es, ax          ;
        mov bx, 0           ;
        mov ah, 2           ; 读取磁盘数据到地址ES:BX
        mov al, 5           ; 读取5个扇区
        mov ch, 0           ; Cylinder=0
        mov cl, 2           ; Sector=2
        mov dh, 0           ; Head=0
        mov dl, 0           ; Drive=0
        int 13h             ; Read!
        jc read             ; ERROR => Try again
        jmp 1000h:0000      ; 跳转到被装载的程序处,开始执行

times 510-($-$$) db 0
dw 0AA55h
-----------------------------------------------------------------   嘿嘿 ,毕竟是第一次这么干 ,有人要偷笑了 ; prog.ASM
; 被引导程序装载的程序
; 在屏幕上打印:Program Loaded Succeed! Hello, myos! [ORG 0]
 jmp start2 ; Goto segment 07C0
; 定义需要打印的字符串
msg     db  'Program Loaded Succeed! Hello, myos!',$0
start2:
        ; 设置段寄存器
        mov ax, cs
        mov ds, ax
        mov es, ax
        mov si, msg     ; 打印字符串
print:
        lodsb           ; AL=字符串存放在DS:SI
        cmp al, 0       ; If AL=0 then hang
        je hang
        mov ah, 0Eh     ; Print AL
        mov bx, 7
        int 10h
        jmp print       ; 打印下一个字符
hang:                   ; 挂起计算机!
 jmp hang
------------------------------------------------------------------
这两天走了很多弯路 ,碰到一些困难 ,总不能一点都不写吧 ,呵呵管它呢 ,也不知道书的作者会不会骂我,反正俺学过做过的就是自己的,俺也不指望做网站卖钱 ,俺就是图个兴趣,按照书里面的步骤写的 。     然后再编译上面2个代码     nasm boot.asm -o boot.bin     nasm  prog.asm -o prog.bin     然后用ultera_edit将boot.bin的内容拷贝到软盘img文件的0-512字节 ,prog.bin拷贝到512后面的字节 ,然后用这个新的img文件引导linxu0.11 ,管它的反正是引导成功 ,打印出来hello,myos!     今天虽然依葫芦画瓢引导成功,但里面的内容很多不太明白 ,以后会详细分析这个引导文件 。太晚了休息了嘿嘿          
相关阅读 更多 +
排行榜 更多 +
Event Horizon

Event Horizon

飞行射击 下载
Counter Terrorist Sniper Shoot

Counter Terrorist Sniper Shoot

飞行射击 下载
Special Agent

Special Agent

飞行射击 下载