• Windows下用Bochs编译运行Linux-0.11(转)


    Windows下用Bochs编译运行Linux-0.11

    原文链接:https://blog.csdn.net/u014688145/article/details/50575588

    **简要介绍:**Bochs主要是一个免费且开源的基于x86架构PC机模拟器。学习linux0.11内核,推荐在该模拟器上进行。

    环境搭建步骤:

    1、下载Linux0.11系统包,本链接的下载包已包含Bochs软件。

    点击打开链接http://oldlinux.org/Linux.old/bochs/linux-0.11-devel-040329.zip 2、解压linux-0.11-devel-040329.zip,目录结构如下图所示:

    https://img-blog.csdn.net/20160125100358856?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

    这里真正使用到的文件为:Bochs-2.1.1.exe 、bochsrc-hd.bxrc、bootimage-0.11、bootimage-0.11-hd、hdc-0.11.img

    3、点击Bochs-2.1.1.exe进行安装。

    4、安装完毕后,将所有linux-0.11-devel-040329下的文件,拷贝到刚才安装bochs下的根目录。原目录如下:

    https://img-blog.csdn.net/20160125100440578?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

    拷贝过后目录为:

    https://img-blog.csdn.net/20160125100451656?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

    5、拷贝完成后,运行bochsrc-hd.bxrc,若安装成功,打开即能见到如下界面:

    https://img-blog.csdn.net/20160125100542264?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

    这已经是x86PC模拟器上,搭建完成的Linux操作系统。建立linux操作平台命令,就能操作Linux。由于学习操作系统需要,我们需要在Linux下,编译操作系统以及完成简单的源码修改,从而达到理解Linux内核的能力。接下来,主要演示Linux内核源码的修改,以及内核的编译过程。由于该Linux版本的原因,我们还需要对代码做出调整,方能成功编译。

    · 内核编译过程:

    1、进入/usr/src/linux 目录下,键入命令 cd ../src/linux ,如下图所示:

    https://img-blog.csdn.net/20160125100604983?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

    2、进行编译,键入命令 make clean 和 make后。

    https://img-blog.csdn.net/20160125100628749?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

    若出现如下所示错误:gcc-cc1: Invalid option "string-insns"。这是需将Linux目录下的Makefile文件中的-mstring-insns参数去掉。除此之外,每个子目录fs,lib,kernel以及kernel目录下的三个驱动程序子目录(math, blk_drv, chr_drv)的Makefike当中的-mstring-insns参数去除掉。此处只演示根目录下的Makefile文件修改。

    3、依次修改:/linux/Makefile、/linux/fs/Makefile、/linux/lib/Makefile、

    /linux/kernel/Makefile、/linux/kernel/math/Makefile、/linux/kernel/blk_drv/Makefile、/linux/kernel/chr_drv/Makefile文件。linux目录下,键入:vi Makefile。如下图所示:

    https://img-blog.csdn.net/20160125100647968?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

    找到文件中的-mstring-insns 参数,并删去保存。

    4、到/usr/local/bin中找到文件ar,并把ar 改名为gar,键入命令:mv ar gar。如下图所示:

    https://img-blog.csdn.net/20160125100725953?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

    5、回到linux 目录下,重新键入make clean以及 make,完成内核的编译链接。

    https://img-blog.csdn.net/20160125100752345?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

    出现上图提示,即表面程序编译成功。完成编译后,便可以开始修改内核源码,从而达到扩展操作系统功能以及学习操作系统的目的。这里,我们简单修改下,linux操作系统开机启动项bootsect.s源码,让开机后输出个性化的字符串。

    6、进入/usr/src/linux/boot目录,修改bootsect.s源码,保存并退出。

    ! Print some inane message
    mov    ah,#0x03        ! read cursor pos
    xor    bh,bh
    int    0x10
    mov    cx,#47
    mov    bx,#0x0007        ! page 0, attribute 7 (normal)
    mov    bp,#msg1
    mov    ax,#0x1301        ! write string, move cursor
    int    0x10
    
    msg1:
    .byte 13,10
    .ascii "Loading system ...this is create by demon"
    .byte 13,10,13,10
    .org 508

    7、修改完成后,在linux目录下,重新键入make命令,完成编译。

    8、make成功后生成引导启动映象文件Image。若需要输出这个Image文件, 可以首先备份bootimage-0.11-hd文件, 然后使用下面命令就会把bootimage-0.11-hd替换成新的引导启动文件,键入命令:dd bs=8192 if=Image of=/dev/fd0。如下图所示:

    https://img-blog.csdn.net/20160125100928393?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

    9点击reset重启Linux操作系统。如下图所示:

  • 相关阅读:
    stm32时钟分析
    STM32中断优先级彻底讲解
    STM32 外部中断简介
    sencha touch 选择器
    sench touch 页面跳转
    sencha touch 学习汇总(转)
    ES6项目构建(babel+gulp+webpack)
    sencha touch
    sencha touch 目录结构
    angular学习笔记(6)- 指令
  • 原文地址:https://www.cnblogs.com/yasepix/p/12295607.html
Copyright © 2020-2023  润新知