zoukankan      html  css  js  c++  java
  • OS实验一 操作系统的引导


    草,我还以为延时要付费呢

    指令备忘

    • 编译内核cd ./linux-0.11/然后make all
    • 删除编译make clean
    • 运行编译好的内核cd ~/oslab/然后./run
    • 汇编级调试:./dbg-asm
    • C语言级调试:先cd ~/oslab然后./dbg-c;之后cd ~/oslab然后./rungdb
    • 访问linux0.11:cd ~/oslab/然后sudo ./mount-hdc(启动挂载脚本)之后hdc下就是和0.11内核一样的文件系统了
    • 密码是shiyanlou
    • 读写完毕,卸载文件系统cd ~/oslab/然后sudo umount hdc
    • 注意 1:不要在 0.11 内核运行的时候 mount 镜像文件,否则可能会损坏文件系统。同理,也不要在已经 mount 的时候运行 0.11 内核。
    • 注意 2:在关闭 Bochs 之前,需要先在 0.11 的命令行运行 “sync”,确保所有缓存数据都存盘后,再关闭 Bochs。

    操作系统的引导实验

    下面将给出一些更具体的 “提示”。这些提示并不是实验的一步一步的指导,而是罗列了一些实验中可能遇到的困难,并给予相关提示。它们肯定不会涵盖所有问题,也不保证其中的每个字都对完成实验有帮助。所以,它们更适合在你遇到问题时查阅,而不是当作指南一样地亦步亦趋。本课程所有实验的提示都是秉承这个思想编写的。

    所以还是先自己做一遍吧~难度不大

    改写bootsect.s

    1.解压缩文件

    # 进入到 oslab 所在的文件夹
    $ cd /home/shiyanlou/oslab/
    
    # 解压,并指定解压到 /home/shiyanlou/
    # 这样的话,在 /home/shiyanlou/oslab/ 中就能找到解压后的所有文件
    $ tar -zxvf hit-oslab-linux-20110823.tar.gz 
      -C /home/shiyanlou/
    
    # 查看是否解压成功
    $ ls -al
    # 除了压缩包 hit-oslab-linux-20110823.tar.gz 之外,其他的就是压缩包中的内容
    

    2.gedit打开Linux 0.11 文件夹中的 boot/bootsect.s、boot/setup.s 和 tools/build.c
    3.更改关键代码
    bootsect.s

    Print some inane message mov ah,#0x03!read cursor pos xor bh,bh int 0×10
    mov Cx,#23
    mov bx,#0x0007 !page 0,attribute 7(normal)
    mov bp,#msg1
    mov ax,#0×07c0
    mov es,ax mov ax,#0x1301 !write string,move cursor int 0x10
    inf loop: jmp inf loop
    
    msg1:
    	.byte 13,10
    	.ascii  "treblez's OS desu"
    	.byte 13,10,13,10
    
    .org 510
    
    boot_flag:
    	.word 0xAA55
    

    4.进行编译

    cd ./linux-0.11/然后make all

    5.编译之后得到了好多文件,之后我们编译连接

    $ as86 -0 -a -o bootsect.o bootsect.s
    $ ld86 -0 -s -o bootsect bootsect.o
    

    这里讲解一下,.s.o和.S

    .s 汇编语言源程序; 操作: 汇编
    .S汇编语言源程序; 操作: 预处理 + 汇编
    .o文件 只编译不链接形成.o文件。里面包含了对各个函数的入口标记,描述,当程序要执行时还需要链接(link).链接就是把多个.o文件链成一个可执行文件。

    -0(注意:这是数字 0,不是字母 O)表示生成 8086 的 16 位目标程序,-a 表示生成与 GNU as 和 ld 部分兼容的代码,-s 告诉链接器 ld86 去除最后生成的可执行文件中的符号信息。
    6.去除bootsect中的可执行文件头部(只留下引导扇区的512字节)

    dd bs=1 if=bootsect of=Image skip=32
    
    # 当前的工作路径为 /home/shiyanlou/oslab/linux-0.11/boot/
    # 将刚刚生成的 Image 复制到 linux-0.11 目录下
    $ cp ./Image ../Image
    # 执行 oslab 目录中的 run 脚本
    $ ../../run
    

    然后就出现了一个从dosbox就开始写,从virualbox也写过,然后现在又写了一遍的字符串显示窗口。
    在这里插入图片描述

    改写setup.s

    bootsect.s

    SETUPLEN=2
    SETUPSEG=0x07e0
    entry _start
    _start:
        mov ah,#0x03
        xor bh,bh
        int 0x10
        mov cx,#36
        mov bx,#0x0007
        mov bp,#msg1
        mov ax,#0x07c0
        mov es,ax
        mov ax,#0x1301
        int 0x10
    load_setup:
        mov dx,#0x0000
        mov cx,#0x0002
        mov bx,#0x0200
        mov ax,#0x0200+SETUPLEN
        int 0x13
        jnc ok_load_setup
        mov dx,#0x0000
        mov ax,#0x0000
        int 0x13
        jmp load_setup
    ok_load_setup:
        jmpi    0,SETUPSEG
    msg1:
        .byte   13,10
        .ascii  "Hello OS world, my name is LZJ"
        .byte   13,10,13,10
    .org 510
    boot_flag:
        .word   0xAA55
    

    setup.s

    ! Print Now we are in SETUP
        mov     ax,#SETUPSEG
        mov     es,ax
        mov     ah,#0x03                ! read cursor pos
        xor     bh,bh
        int     0x10
    
        mov     cx,#23
        mov     bx,#0x0007              ! page 0, attribute 7 (normal)
        mov     bp,#msg_code
        mov     ax,#0x1301              ! write string, move cursor
        int     0x10
    msg_code:
        .byte 13,10
        .ascii "Now we are in SETUP"
        .byte 13,10,13,10
    
    
  • 相关阅读:
    NSUserDefaults写作和阅读对象定义自己
    JavaScript三在弹出的对话框中
    mybatis02 架构
    mybatis01
    oracle17 视图
    oracle16 例外
    oracle15 pl/sql 分页
    oracle14 复杂数据类型
    oracle13 触发器 变量
    oracle12 pl/sql
  • 原文地址:https://www.cnblogs.com/treblez/p/13271342.html
Copyright © 2011-2022 走看看