操作系统内核实验——第二节环境配置

一、实验目的
配置环境和工具,学习启动加载内核流程,学习编写代码运行。

二、实验环境
Vmware Pro 15.5
Centos 6

三、实验内容
设置共享目录
(1)指定一个 windows 系统上的文件目录
在这里插入图片描述
(2)挂载目录,可以显示共享的目录:
在这里插入图片描述

(3)拷贝压缩包到共享目录下面, 在 windows 可以看到:
在这里插入图片描述
(4)在 Centos 可以看到:
在这里插入图片描述
拷贝压缩包到/root/目录下:
在这里插入图片描述
在这里插入图片描述
下面先利用远程连接工具PuTTY连接虚拟机,这样可以远程操作。

首先获取虚拟机地址,ip addr
在这里插入图片描述
在PuTTY上操作
在这里插入图片描述
在这里插入图片描述
连接成功。

下面首先处理nasm
切换到 root 目录,cd /root/解压指定文件,并编译。
用指令 tar jxvf nasm-2.14.02.tar.bz2 解压;

在这里插入图片描述
编译 nasm 编译器,建议切换到 root 用户编译和安装,可以避免权限设置问题。

找到 nasm-2.14.02 目录,cd nasm-2.14.02
运行脚本:./autogen.sh
./configure
在这里插入图片描述
在这里插入图片描述
编译 make
在这里插入图片描述
安装 make install
在这里插入图片描述
查看安装成功
在这里插入图片描述
处理gcc相关
设置环境变量,在文件/etc/profile,建议切换到 root 用户编译和安装,可 以避免权限设置问题。

cd /root/ 切换目录
解压 i386-elf-gcc 编译器:tar zxvf i386-elf-gcc.tar.gz
在这里插入图片描述
将 bin 目录添加到环境变量 PATH 中:vi /etc/profile
输入i进入编辑模式,添加语句
export PATH=/root/i386-elf-gcc/bin:$PATH

在这里插入图片描述
Esc 键退出编辑
:wq 保存并退出

生效命令:source /etc/profile
输入命令检验是否成功:i386-elf-gcc -v
在这里插入图片描述
处理i386-elf-binutils-linux-i686
同理解压 i386-elf-binutils-linux-i686.tar.bz2

tar jxvf i386-elf-binutils-linux-i686.tar.bz2
在这里插入图片描述
设置环境变量:vi /etc/profile
输入 i 进入编辑模式
添加语句:export PATH=/root/i386-elf-binutils/bin:$PATH
Esc 退出编辑
:wq 保存并退出
在这里插入图片描述
输入生效命令:source /etc/profile
输入命令检验是否成功:i386-elf-ld -v
在这里插入图片描述
下面是Grub安装

解压 grub 压缩包:tar zxvf grub-2.04.tar.gz
切换目录:cd grub-2.04
在这里插入图片描述
配置路径:./configure
在这里插入图片描述
编译:make
安装:make install
在这里插入图片描述
查看安装成功:grub-mkrescue -v
在这里插入图片描述
安装 xorriso
yum install xorriso
在这里插入图片描述
进入 2st 目录:cd /mnt/hgfs/centos666/sel4/kernelclass/2st
在这里插入图片描述
解压文件:tar zxvf grub-boot.tar.gz
在这里插入图片描述
进入目录生成 iso 镜像:cd grub-boot
make iso
在这里插入图片描述
在 Windows 目录下可以看到生成了镜像
在这里插入图片描述
命令行启动镜像进入 grub 界面
在这里插入图片描述
在这里插入图片描述
查看可用的命令:help
在这里插入图片描述
裸机启动
编译第一个汇编程序来裸机启动。
编译,在 centos666\sel4\kernelclass\2st 目录下运行:
nasm -f bin boot_ sect_ simple.asm -o boot_ sect_ simple.bin
之后用 ls 指令可以看见多了 boot_sect_simple.bin 文件,可知编译成功
在这里插入图片描述
Windows 下命令行输入:
qemu-system-i386 “D:\centos666\sel4\kernelclass\2st\boot_sect_simple.bin”
在这里插入图片描述
在这里插入图片描述
也就是说:boot_sect_simple.bin 是一个硬盘。

1.1 打印
mov ah , 0x0e ; ah 中写入 0x0e,代表 scrolling teletype BIOS routine,可以在屏幕输出字符 int 0x10; 调入软中断,BIOS 显示功能 int 是中断指令,后面是中断的数字。

1.1.1 常量
编译,在 centos666\sel4\kernelclass\2st 目录下运行:
nasm -f bin boot_ sect_hello.asm -o boot_ sect_ hello.bin
之后用 ls 指令可以看见多了 boot_sect_hello.bin 文件,可知编译成功
在这里插入图片描述
Windows 下命令行输入:
qemu-system-i386
“D:\centos666\sel4\kernelclass\2st\boot_sect_hello.bin”
在这里插入图片描述
在这里插入图片描述
1.1.2 指针
编译,在 centos666\sel4\kernelclass\2st 目录下运行:
nasm -f bin boot_ sect_memory.asm -o boot_ sect_ memory.bin
之后用 ls 指令可以看见多了 boot_sect_memory.bin 文件,可知编译成功
在这里插入图片描述
Windows 下命令行输入:
qemu-system-i386
“D:\centos666\sel4\kernelclass\2st\boot_sect_memory.bin”
在这里插入图片描述
在这里插入图片描述
提示:当前代码结构,数据段 the_secret 偏移位置在 ox2d。

1.1.3 堆栈
编译,在 centos666\sel4\kernelclass\2st 目录下运行:
nasm -f bin boot_ sect_stack.asm -o boot_ sect_ stack.bin
之后用 ls 指令可以看见多了 boot_sect_stack.bin 文件,可知编译成功
在这里插入图片描述
Windows 下命令行输入:
qemu-system-i386
“D:\centos666\sel4\kernelclass\2st\boot_sect_stack.bin”
在这里插入图片描述
在这里插入图片描述
1.1.4 函数调用
编译,在 centos666\sel4\kernelclass\2st 目录下运行:
nasm -f bin boot_ sect_main.asm -o boot_ sect_ main.bin
之后用 ls 指令可以看见多了 boot_sect_main.bin 文件,可知编译成功
在这里插入图片描述
Windows 下命令行输入:
qemu-system-i386 “D:\centos666\sel4\kernelclass\2st\boot_sect_main.bin”
在这里插入图片描述
在这里插入图片描述
注意:[org 0x7c00];这是全局偏移声明,bx 不需要每次都加 0x7c00 偏移了。

1.1.5 段
编译,在 centos666\sel4\kernelclass\2st 目录下运行:
nasm -f bin boot_ sect_segmentation.asm -o boot_sect_segmentation.bin
之后用 ls 指令可以看见多了 boot_sect_segmentation.bin 文件,可知编译成功
在这里插入图片描述
Windows 下命令行输入:
qemu-system-i386
“D:\centos666\sel4\kernelclass\2st\boot_sect_segmentation.bin”
在这里插入图片描述
在这里插入图片描述
1.1.6 磁盘/硬盘
“boot_sect_main.asm”准备磁盘读取的参数并调用“disk_load”。
编译,在 centos666\sel4\kernelclass\2st 目录下运行:
nasm -f bin boot_ sect_disk_main.asm -o boot_ sect_ disk_main.bin
之后用 ls 指令可以看见多了 boot_sect_disk_main.bin 文件,可知编译成功。
在这里插入图片描述
Windows 下命令行输入:
qemu-system-i386
“D:\centos666\sel4\kernelclass\2st\boot_sect_disk_main.bin”
在这里插入图片描述
在这里插入图片描述
1.2 32位保护模式
gcc工具链配置
vi /etc/profile
在这里插入图片描述
存盘退出之后:
source /etc/profile
使环境变量在当前命令窗口生效

1.2.1 模式切换
编译,在 centos666\sel4\kernelclass\2st 目录下运行:
nasm -f bin 32bit-main.asm -o 32bit-main.bin
之后用 ls 指令可以看见多了 32bit-main.bin文件,可知编译成功
在这里插入图片描述
Windows 下命令行输入:
qemu-system-i386 -hda
“D:\centos666\sel4\kernelclass\2st\32bit-main.bin”
在这里插入图片描述
在这里插入图片描述
1.2.2 内核引导
编译,在 centos666\sel4\kernelclass\2st\bootsect 目录下运行:
make os-image.bin
之后用 ls 指令可以看见多了 os-image.bin文件,可知编译成功
在这里插入图片描述
Windows 下命令行输入:
qemu-system-i386 -fda
“D:\centos666\sel4\kernelclass\2st\bootsect\os-image.bin”
在这里插入图片描述
在这里插入图片描述
注意左上角的 X 字样。这说明内核加载成功。

作业:
1 画一个裸机启动加载内核的流程图。

在这里插入图片描述
2 设计一个启动内核后的运行代码,比如打印 hello world

Centos666\sel4\kernelclass\2st 目录下新建 boot_ sect_hellolinux.asm

在这里插入图片描述
在 centos666\sel4\kernelclass\2st 目录下运行:
nasm -f bin boot_ sect_helloworld.asm -o boot_ sect_ helloworld.bin
之后用 ls 指令可以看见多了 boot_sect_hellolinux.bin 文件,可知编译成功
在这里插入图片描述
Windows 下命令行输入:
qemu-system-i386
“D:\centos666\sel4\kernelclass\2st\boot_sect_helloworld.bin”

在这里插入图片描述
在这里插入图片描述

注意事项:

  1. 重启虚拟机时共享文件夹,需要重新挂载目录
    vmhgfs-fuse .host:/ /mnt/hgfs/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值