IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 编译linux0.11内核 -> 正文阅读

[系统运维]编译linux0.11内核

一、实验环境

这次照例还是在Vmware虚拟机上进行实验,实验环境为Ubuntu16.04版本。

image-20211002175332245

同时,本次内容也是基于哈尔滨工业大学《操作系统》课程实验的相关内容进行操作。hit-oslab

image-20211002180037128

二、下载文件

1、可以直接在hit-oslab-github下载,如果访问不了,或者下载速度慢,这里提供了gitee下载路径:hit-oslab-gitee

image-20211002202910390

注意:

  1. 如果VMware实现了文件共享功能,可在解压好之后,直接拖动文件夹放入Ubuntu对应的文件路径中。

  2. 还可以在Ubuntu中安装git,命令如下:sudo apt install git。git安装好之后,可以直接用git命令获取文件。命令如下:git clone -b os https://gitee.com/fayoung/os.git

2、下载好之后,会得到以下目录

image-20211002202806690

3、其中的hit-oslab就是这次我们需要的文件。内容如下:

image-20211002203050557

三、配置Linux0.11所需环境

由于LInux0.11在设计之初是在32位的机器上进行编译的,而现在的各大Linux发行版(例如Ubuntu、redhat、CentOS)都是64位,所以直接对Linux0.11进行编译会出现问题。

现在要配置Linux0.11所需的环境,在刚刚所下载的文件当中,已经写好了相关的脚本,直接运行即可。

执行setup.sh脚本:./setup.sh

image-20211002204253588

这时候会提示权限不足,需提高一个该文件的权限,命令为:chmod 777 ./setup.sh 。执行之后,会发现setup.sh文件变成绿色,是一个可执行文件。

image-20211002204535576

然后,重新执行:./setup.sh

image-20211002204648190

完成之后,会提示以下字符:

image-20211002204736412

然后,该脚本会在源目录下生成oslab文件夹

image-20211002191425636

四、编译内核

进入oslab文件目录

image-20211002204956792

进入到linux-0.11文件夹目录中

image-20211002205203101

在当前目录下,使用make命令进行编译

image-20211002205259620

等待一段时间,编译成功。

image-20211002205402183

五、运行linux0.11

回到上一级目录当中,执行run文件。

image-20211002205720756

提高run文件的权限,运行run文件

image-20211002214735341

发现还是报错

image-20211002214819285

根据提示,提高当前目录下bochs中bochs-gdb的权限

image-20211002214939809

接下来,再执行run文件:./run

image-20211002215004709

弹出Bochs界面

image-20211002215035490

输入ls命令

image-20211002215141324

说明编译成功!

六、说明

1、setup.sh脚本里进行了什么操作?

setup.sh代码如下:

#!/bin/sh

# Harbin Insitute of Technology
# Operating System - Setup Script v0.0.1
#
# $Author$: Deng Xiongfei<dk@hit.edu.cn>
# $Date$: 2014-10-10
export OSLAB_INSTALL_PATH=$HOME/oslab
cat hit.icon
echo "|                 Environment Setup Script v0.0.1                   |"
echo "|                $ \033[34mDeng Xiongfei\033[0m <dk@hit.edu.cn> $                  |"
echo "+-------------------------------------------------------------------+"

install_gcc34_amd64() {
    echo -n  "* Install gcc-3.4 for x86_64(amd64) arch now......"
    if [ -z `which gcc-3.4` ]; then
        sudo dpkg -i gcc-3.4/amd64/gcc-3.4-base_3.4.6-8ubuntu2_amd64.deb > /dev/null
        sudo dpkg -i gcc-3.4/amd64/cpp-3.4_3.4.6-8ubuntu2_amd64.deb > /dev/null
        sudo dpkg -i gcc-3.4/amd64/gcc-3.4_3.4.6-8ubuntu2_amd64.deb > /dev/null
        echo "\033[34mDone\033[0m"
    else
        echo "\033[32mSipped\033[0m"
    fi
}

install_gcc34_i386() {
    echo -n  "* Install gcc-3.4 for x86(i386) arch now......"
    if [ -z `which gcc-3.4` ]; then
        sudo dpkg -i gcc-3.4/i386/gcc-3.4-base_3.4.6-8ubuntu2_i386.deb > /dev/null
        sudo dpkg -i gcc-3.4/i386/cpp-3.4_3.4.6-8ubuntu2_i386.deb > /dev/null
        sudo dpkg -i gcc-3.4/i386/gcc-3.4_3.4.6-8ubuntu2_i386.deb > /dev/null
        echo "\033[34mDone\033[0m"
    else
        echo "\033[33mSkipped\033[0m"
    fi
}

install_dep_i386() {
    echo  "* Install dependencies for x86(i386) arch now......"
    sudo apt-get install bin86
    sudo apt-get install build-essential
    echo  "* Install dependencies for x86(i386) arch now......\033[34mDone\033[0m"
}

install_dep_amd64() {
    echo  "* Install dependencies for x86_64(amd64) arch now......"
    sudo apt-get install bin86
    sudo apt-get install gcc-multilib
    sudo apt-get install build-essential
    sudo apt-get install bochs bochs-x bochs-sdl
    echo  "* Install dependencies for x86_64(amd64) arch now......\033[34mDone\033[0m"
}

configure_for_i386() {
    echo -n  "* Copy rest files to oslab......"
    cp -r i386/* $OSLAB_INSTALL_PATH
    echo  "\033[34mDone\033[0m"
}

configure_for_amd64() {
    # 64-bit version bochs has to show in sdl mode, bochs-sdl required
    echo -n "* Change bochs:display_library into sdl......"
    echo "display_library: sdl" >> $OSLAB_INSTALL_PATH/bochs/bochsrc.bxrc
    echo  "\033[34mDone\033[0m"

    echo -n "* Copy run script to oslab......"
    cp -r amd64/* $OSLAB_INSTALL_PATH
    echo "\033[34mDone\033[0m"
}

# Common Code
if [ "$1" ] && ([ "$1" = "-s" ] || [ "$1" = "--skip-update" ]); then
    echo -n "* Begin to setup......\033[33m3\033[0m sec to start"; sleep 1
    echo -n "\r* Begin to setup......\033[33m2\033[0m sec to start"; sleep 1
    echo -n "\r* Begin to setup......\033[33m1\033[0m sec to start"; sleep 1
    echo "\r* Begin to setup......                                 \033[0m"
else
    echo -n "* Update apt sources......\033[33m3\033[31m sec to start"; sleep 1
    echo -n "\r* Update apt sources......\033[33m2\033[31m sec to start"; sleep 1
    echo -n "\r* Update apt sources......\033[33m1\033[31m sec to start"; sleep 1
    echo "\r* Update apt sources......                                 "
    sudo apt-get update
fi

echo -n "* Create oslab main directory......"
[ -d $OSLAB_INSTALL_PATH ] || mkdir $OSLAB_INSTALL_PATH
echo "\033[34mDone\033[0m"

echo -n "* Create linux-0.11 directory......"
[ -d $OSLAB_INSTALL_PATH/linux-0.11 ] || mkdir $OSLAB_INSTALL_PATH/linux-0.11
echo "\033[34mDone\033[0m"

# Extract linux-0.11
echo -n "* Extract linux-0.11......"
tar zxf common/linux-0.11.tar.gz -C $OSLAB_INSTALL_PATH/linux-0.11
cp common/linux-0.11.tar.gz $OSLAB_INSTALL_PATH
echo "\033[34mDone\033[0m"

# Extract bochs and hdc image
echo -n "* Extract bochs configuration file and hdc image......"
tar zxf common/bochs-and-hdc.tar.gz -C $OSLAB_INSTALL_PATH/
echo "\033[34mDone\033[0m"

# Copy common files
echo -n "* Copy common files......"
cp -r common/files $OSLAB_INSTALL_PATH
echo "\033[034mDone\033[0m"

# `getconf LONG_BIT` works better than `uname -a`
if [ `getconf LONG_BIT` = "64" ]
then
    install_dep_amd64
    install_gcc34_amd64
    configure_for_amd64
else
    install_dep_i386
    install_gcc34_i386
    configure_for_i386
fi

echo "\033[34m* Installation finished. Ciao~\033[0m"

总的来说就是:

  • 为所在环境安装gcc3.4,使其可以编译32位的代码文件
  • 配置编译Linux0.11所需要的依赖
  • 下载Linux0.11代码
  • 安装bochs和hdc image
  • 最后将以上文件统一放入在home路径下新建的oslab文件夹中

2、最后弹出来的窗口bochs是什么?

Bochs是一个x86硬件平台的开源模拟器。它可以模拟各种硬件的配置。Bochs模拟的是整个PC平台,包括I/O设备、内存和BIOS。

通过改变配置,可以指定使用的CPU(386、486或者586),以及内存大小等。一句话,Bochs是电脑里的“PC”。根据需要,Bochs还可以模拟多台PC。它还有自己的电源按钮。

bochs的典型应用是提供x86 PC的完整仿真,包括x86处理器、硬件设备、和存储器。在工作站上的模拟器里运行操作系统和软件,就像你有一台机器内的机器。

总的来说就是一台模拟器,现在来看就是虚拟机中的虚拟机。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-03 17:25:02  更:2021-10-03 17:26:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:20:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码