2023《操作系统原理》实习一(实习中进行过的操作以及遇到的问题)

本文介绍了如何使用VirtualBox安装Ubuntu和Windows11双系统,包括VirtualBox的下载与安装,Windows11ISO的获取,以及Ubuntu的安装步骤。此外,还列举了常见的Linux命令,如`cd`,`ls`,`mkdir`,`mv`,`rm`等,并提到了内核崩溃和串口日志为空的常见问题及其解决方案。
摘要由CSDN通过智能技术生成

目录

实习题目

软件准备

VirtualBox安装

题目一

Windows11安装

Ubuntu安装

题目二

题目三

题目三已经提前发布了,操作流程在该链接中

在此提出几个最近常被问到的问题和解决办法:

1.编辑完成后启动时内核崩溃显示类似如下界面:

 2.串口输出日志为空

题目四




实习题目

        1、在一台机器上(真机或虚拟机)安装ubuntu和windows双系统。

        2、练习linux常用命令,在报告中简述不少于20个命令的作用及示例。

        3、通过在Grub中修改Ubuntu内核启动参数,获取Ubuntu启动日志,在Ubuntu的系统初始化一开始输出:操作系统原理实习一-班学号-姓名。

        4、增加系统功能调用sys_syscall_XXXXXXX并建立简单用户程序进行调用测试,在内核日志中输出:操作系统原理实习一-班学号-姓名。XXXXXXX为班学号


软件准备

        实习之前需要准备虚拟机,以及windows和ubuntu各一个镜像文件。毕竟这么一个看上去就容易崩系统的课设,还是不要折腾自己的电脑了。

老师提供了如下软件下载链接:

VirtualBox: Downloads – Oracle VM VirtualBox

VMWare:VMware Workstation 17 Player 中文版-官方免费版虚拟机软件丨简而易网

Ubuntu:Enterprise Open Source and Linux | Ubuntu

Windows11:Download Windows 11 (下载ISO)

Windows10:下载 Windows 10(先下载MediaCreationTool22H2.exe,再选择为另一台电脑创建安装介质,即可获得ISO)

        就我个人而言,电脑上一直是有装VM的,里面有一个ubuntu18。但是我对它的印象一直是:软件很大、有时报错重装、功能复杂(可能是第一次使用时啥也不会,带来的痛苦回忆)。所以很久没用了,依稀记得最后一次使用时候有个网络问题没解决。然后我简单了解了一下VirtualBox,发现这个软件令人惊喜的小。启动也很快,直接就是一个更换阵地的操作。

VirtualBox安装

点击链接进入官网之后就是这个界面:

af7be685e5cb4fea924159453bf6f01c.png

         最好还是不要使用自动翻译,不然容易导致自己不认识,点击画出来的链接就是下载windows使用的版本。同样的,它下面则是其它平台使用的版本。

        下载好后就打开开始安装:

         接下来的步骤基本用不着调整,除了调整默认安装位置。当时安装的时候没截图,这里偷个懒,借用一下其它博客的图片:

        原文链接:VirtualBox的下载与安装_virtualbox下载教程_角落遗失的眼泪的博客-CSDN博客

        由于这个博客所用的VB比较老,界面有所差别。调整的话就是点浏览(Browse)然后将地址前面的C改成你想存到的盘,比如D:\Program Files\Oracle\VirtualBox\。

         安装完成后可以参考以下步骤对虚拟机文件夹所在位置进行调整

原文链接:虚拟机VirtualBox下载与安装、安装Ubuntu超详细图文步骤,对一些配置问题也有所写。_virtualbox安装_橙木博客的博客-CSDN博客

题目一

        题目要求装双系统,因为我本来电脑上装了个Ubuntu虚拟机,所以第一时间想到的是搜搜怎么在Ubuntu上装Windows,但是搜完之后一是博客少,而且看上去超级难,就罢了,在此放一篇Ubuntu上装windows的博客:

[详细教程] 在现有Ubuntu系统上安装Windows 10 (双系统)_ubuntu安装windows_宇内虹游的博客-CSDN博客

Windows11安装

        从官网上可以直接下载windows11的镜像文件,链接在上面有给(但是是真的慢,可以考虑从别的途径下载)。有了镜像文件之后,打开virtualbox新建

        名字自己随意定一个就可以,ISO Image那里选你下载好的win11镜像文件 ,把下面的skip我几次建虚拟机都是直接选上了,省些步骤,目前没发现什么问题。然后next

        内存和cpu的数量可以自己看着给,但是我的建议是尽量给多点,不然容易卡得怀疑人生。next

        这里也同理,建议磁盘空间给大一点,最好不要低于默认值。这里要注意,虚拟机的磁盘其实就是电脑里的一个文件,数值是限定它的存储上限,不是说立马就会占那么多空间,所以不用太担心。 next

         finish之后返回virtualBox界面,在右边栏可以看到你刚才建的虚拟机,点设置:

         进入系统界面,把这几个选项调出来,不然安装不了win11

         点OK保存退出后就可以点击设置右边,启动虚拟机了,然后由于某些暂时还不太清楚的设置问题,启动的时候会进入shell界面;

        这个时候不要急。输入“exit”再回车就可以回到上一界面——BIOS界面(同时,这个画面可能会有点小,是虚拟机默认分辨率太低导致的,你可以在左上角的视图中选择自动缩放模式 )

 进入BIOS界面后通过方向键选中Boot Manager,回车进入。

 

这个界面的条目顺序可能不同,选择名字里带CD-ROM的那行(如果有多个就从上到下挨个试试吧),回车后就进入安装流程,具体不细讲了,当进入下面的界面时,选择我没有产品密钥就行,版本就是你电脑的版本,或者家庭版、专业版之类的:

         后续就是跟随引导安装windows,安装完成后就可以为装双系统做准备了,在刚安装的Windows里,首先打开文件资源管理器或者任意一个文件夹,右键点击左边栏中的此电脑。

然后就是:显示更多选项-》管理 -》磁盘管理:

在最大的磁盘上右键选择压缩卷,在输入框里输入想要分给Ubuntu的硬盘大小后选择压缩

 

( 这里注意,压缩后不要再做别的操作了——指新建简单卷,直接关机就可以)

Ubuntu安装

在之前的链接中下载Ubuntu,不过我个人还是建议选上一个版本,会更稳定些,比如说20.04:

https://releases.ubuntu.com/20.04.5/?_ga=2.188593900.573092987.1677985002-1582932756.1677985002

下载好后打开之前建的Windows虚拟机的设置-》存储,然后点光盘形状图标那行显示如下界面

 然后把原本的win11虚拟盘换成Ubuntu虚拟盘,确定后再次启动此虚拟机

 在启动还是黑屏的时立刻点击虚拟机页面,把鼠标键盘捕获到虚拟机中,然后狂按ESC键进入我们熟悉的BIOS界面,老方法Boot Manager,然后是有CD-ROM那行,回车后就会开始进入Ubuntu安装界面,在出现下面第二幅图画面前应该不用动,或者是第一行选项回车

 

这里存在一个问题,可能大多数人进去之后界面不是这样的,很小且界面也不完整,左侧语言栏下滑选简体中文后先选试用Ubuntu

 会进入这个界面,打开右上角设置

然后是显示器,把分辨率调高,直至可以完整显示界面

 应用后关闭设置界面,点击桌面上安装Ubuntu20.04的软件图标,后回到安装流程,不停继续后直至出现如下选择界面

 选择其他选项进行手动分区,这里参考其他博客分区方案就可以,有很多,这里随意找一篇:

Ubuntu 20.04系统分区-CSDN博客

 注意一般比例一致就行,唔,或者全分配给根目录好像也行,舍友说可以,我自己没试过。

分区步骤:

选中之前标着空闲的大小最大的分区,右键添加,或者左下角的加号

 上面输入框分配大小(不要太在意我这只有2M,懒得再弄给虚拟机了,所以这个虚拟机的windows没有压缩卷),然后下面的选项对应分区方案中的各项值

 分完区后就是现在安装就可,安装完成后按照提示重启,之后会进入grub选择界面来选择是windows还是Ubuntu,默认不点就是Ubuntu。

 这样双系统就装完成了

题目二

这里是一些常用linux指令

cd [-L][-P [-e]] [dir] #切换用户当前工作目录
#-L和-P是可选参数 dir是想要转到的目录位置
#例子
cd        #进入用户主目录
cd /      #进入根目录
cd ~      #进入用户主目录
cd ..     #返回上级目录
cd 桌面   #转到桌面
cd /sbin  #转到根目录下的sbin文件夹(目录)
ls [选项] [文件名...]    #显示当前目录下的文件

ls       # 仅列出当前目录可见文件
ls -l    # 列出当前目录可见文件详细信息
ls -hl   # 列出详细信息并以可读大小显示文件大小
ls -al   # 列出所有文件(包括隐藏)的详细信息
ls --human-readable --size -1 -S --classify # 按文件大小排序
du -sh * | sort -h # 按文件大小排序(同上)
ls -a    #显示当前目录下包括隐藏文件的所有文件
ls -1    #单列输出(这是数字)
ls -m    #水平输出
ls -t    #按修改时间排序
ls -l    #列出文件和文件夹详细信息(这是字母)
mkdir (选项)(参数)  #用来创建目录

#-p 如果路径上级目录尚未建立则一并建立
mkdir 我的文件
mkdir -p 我的文件/文件1/文件1.1
mv (选项)(参数)    #用于将一个目录以另一给名字转移到另一个目录

#-b        文件存在时,覆盖前先为其创建备份
#-f        存在同名文件直接覆盖
#-u        若目标路径所在位置不存在同名文件才执行操作

mv /usr/men/*                    #将/usr/men中所有文件转移到当前目录
mv file_1.txt /home/office/      #移动文件
mv file_1.txt file_2.txt         #重命名文件
rm (选项)(参数)     #用于删除给定的文件和目录

#-r    递归处理删除目录中所有子目录(不然只能删除空目录)
#-f    强制删除

rm -r *            #删除当前目录下除隐含文件外所有文件和子目录
rm -rf testdir     #强制删除testdir目录及其内容
sudo (选项)(参数)    #以其他身份来执行,默认为root

#-k    结束密码有效期限
#-l    列出目前用户可执行与无法执行的指令
#-v    延长密码有效期限5min

sudo su                 #以root身份重新登录
sudo mv init init.1     #以root身份执行mv指令
make (选项)(参数)    #GNU的工程化编译工具

make     #编译当前目录
reboot (选项)    #重新启动正在运行的Linux系统

reboot
#变更文件或目录的权限
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...

#linux文件的用户权限说明:

# 查看当前目录(包含隐藏文件)的长格式。
ls -la
  -rw-r--r--   1 user  staff   651 Oct 12 12:53 .gitmodules
'''
 第1位如果是d则代表目录,是-则代表普通文件。
 更多详情请参阅info coreutils 'ls invocation'(ls命令的info文档)的'-l'选项部分。
 第2到4位代表当前用户的权限。
 第5到7位代表组用户的权限。
 第8到10位代表其他用户的权限。

参考man chmod文档的DESCRIPTION段落得知:

u符号代表当前用户。
g符号代表和当前用户在同一个组的用户,以下简称组用户。
o符号代表其他用户。
a符号代表所有用户。
r符号代表读权限以及八进制数4。
w符号代表写权限以及八进制数2。
x符号代表执行权限以及八进制数1。
X符号代表如果目标文件是可执行文件或目录,可给其设置可执行权限。
s符号代表设置权限suid和sgid,使用权限组合u+s设定文件的用户的ID位,g+s设置组用户ID位。
t符号代表只有目录或文件的所有者才可以删除目录下的文件。
+符号代表添加目标用户相应的权限。
-符号代表删除目标用户相应的权限。
=符号代表添加目标用户相应的权限,删除未提到的权限。
'''
chmod +x init    #为init添加执行权限
apt-get [OPTION] PACKAGE    #Debian Linux发行版中的APT软件包管理工具

apt-get install vim  # 安装新包
apt-get remove vim   # 卸载已安装的包(保留配置文件)
apt-get -purge remove vim  # 卸载已安装的包(删除配置文件)
apt-get update       # 更新软件包列表
apt-get upgrade      # 更新所有已安装的包
apt-get autoremove   # 卸载已不需要的包依赖
apt-get dist-upgrade # 自动处理依赖包升级
apt-get autoclean    # 将已经删除了的软件包的.deb安装文件从硬盘中删除掉
apt-get clean        # 删除软件包的安装包
cat [OPTION]... [FILE]...    
#连接多个文件并打印到标准输出,显示文件内容,如果没有文件或文件为-则读取标准输入等作用

cat init    #查看编辑好的init内容
cat ./1.log ./2.log ./3.log    # 合并显示多个文件
cat -A test.log                # 显示文件中的非打印字符、tab、换行符
cat -s test.log                # 压缩文件的空行
cat -n test.log                # 显示文件并在所有行开头附加行号
cat -b test.log                # 显示文件并在所有非空行开头附加行号
echo '######' |cat - test.log  # 将标准输入的内容和文件内容一并显示
pwd [-LP]    #显示当前工作目录的绝对路径

#-L (默认值)打印环境变量"$PWD"的值,可能为符号链接。
#-P 打印当前工作目录的物理位置。


[root@localhost var]# pwd
/var
echo(选项)(参数)    #输出指定的字符串或者变量
#-e:启用转义字符。
#-E: 不启用转义字符(默认)
#-n: 结尾不换行
'''
使用-e选项时,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:

\a 发出警告声;
\b 删除前一个字符;
\c 不产生进一步输出 (\c 后面的字符不会输出);
\f 换行但光标仍旧停留在原来的位置;
\n 换行且光标移至行首;
\r 光标移至行首,但不换行;
\t 插入tab;
\v 与\f相同;
\\ 插入\字符;
\nnn 插入 nnn(八进制)所代表的ASCII字符;
'''

echo -e "\e[1;31mThis is red text\e[0m"
This is red text
#\e[1;31m 将颜色设置为红色
#\e[0m 将颜色重新置回
#颜色码:重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,洋红=35,青色=36,白色=37
exec(选项)(参数)    #调研并执行指定的命令

exec /lib/systemd/systemd
rmdir [选项] 目录 #从一个目录中删除一个或多个子目录项,删除某目录时也必须具有对父目录的写权限

#-p 递归删除目录dir,当子目录删除后其父目录为空时,也一同被删除。
#-v, --verbose 显示指令执行过程

rmdir test1    #删除空目录 test1,非空目录无法删除
rmdir -p test2 # test 目录下仅有 test2
sleep (参数)    #将目前动作延迟一段时间

sleep 5    #延迟5秒
sleep 5m   #延迟5分
sleep 5h   #延迟5时
sleep 5d   #延迟5天
nl [选项] [文件]    #输出内容且自动加上行号

'''
-b :指定行号指定的方式,主要有两种:
-b a :表示不论是否为空行,也同样列出行号(类似 cat -n)
-b t :如果有空行,空的那一行不要列出行号(默认值)
-n :列出行号表示的方法,主要有三种:
    -n ln :行号在萤幕的最左方显示
    -n rn :行号在自己栏位的最右方显示,且不加 0
    -n rz :行号在自己栏位的最右方显示,且加 0
-w :行号栏位的占用的位数
'''

nl test.log
more (语法)(参数)    #显示文件内容,每次显示一屏

'''
-<数字>:指定每屏显示的行数;
-d:显示“[press space to continue,'q' to quit.]”和“[Press 'h' for instructions]”;
-c:不进行滚屏操作。每次刷新这个屏幕;
-s:将多个空行压缩成一行显示;
-u:禁止下划线;
+<数字>:从指定数字的行开始显示。
'''

more -dc file    
more -c -10 file    #翻页显示,每页10行
less (选项)(参数)    #分屏上下翻页浏览文件内容

'''
-e:文件内容显示完毕后,自动退出;
-f:强制显示文件;
-g:不加亮显示搜索到的所有关键词,仅显示当前显示的关键字,以提高显示速度;
-l:搜索时忽略大小写的差异;
-N:每一行行首显示行号;
-s:将连续多个空行压缩成一行显示;
-S:在单行显示较长的内容,而不换行显示;
-x<数字>:将TAB字符显示为指定个数的空格字符。
'''
sudo less /var/log/shadowsocks.log
wget [参数][URL地址]    #Linux系统下载文件工具

wget http://www.jsdig.com/testfile.zip

题目三

题目三已经提前发布了,操作流程在该链接中

操作系统原理实习题三操作流程_kyle_pyl的博客-CSDN博客

在此提出几个最近常被问到的问题和解决办法:

1.编辑完成后启动时内核崩溃显示类似如下界面:

首先表示抱歉,代码中!打成中文字符了,现已修改,然后在把我提到了的步骤完成外有以下几点需要注意

  • init文件中,#!/bin/bash中没有空格,其后要空一行
  • 编写保存后可以查看一下是否成功保存
cat init
  • 添加权限后,权限是否添加成功
ls -al init

 2.串口输出日志为空

 对于这个问题,如果其它步骤没有出错的话,要注意串口要开第一个串口,因为ttyS0对应的是串口1,如果是串口2则需要把所有ttyS0改成ttyS1,以此类推。不过我还是建议尽量都是用串口1,其它串口没用过,不能保证是正确的。

题目四

以下代码和过程来自chat,本人还在尝试,先发出来以供参考

  

以下是在Ubuntu 20.04中下载一个版本对应的内核并添加系统调用的步骤以及相关代码。

  1. 首先确认当前系统中的内核版本:

    uname -r
  2. 在网上找到一个合适的内核版本,例如下载Linux 5.15.6的源代码:

    wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.15.6.tar.xz
  3. 解压源代码包:

    tar -xvf linux-5.15.6.tar.xz
  4. 进入解压后的目录,并进行配置:

    cd linux-5.15.6 
    make menuconfig

    这一步会打开一个界面,可以在其中对内核进行各种配置,但一般情况下直接保存退出即可。

  5. 备份原有的内核文件,以防意外情况:

    sudo cp /boot/vmlinuz-$(uname -r) /boot/vmlinuz-$(uname -r)-backup 
    sudo cp /boot/initrd.img-$(uname -r) /boot/initrd.img-$(uname -r)-backup
  6. 编译内核,这个过程可能需要较长时间:

    make -j4

    这里使用-j参数可以启用4个线程进行编译,可以根据自己机器的CPU核心数适当调整。

  7. 安装内核模块,这一步会将编译后的内核模块安装到系统中:

    sudo make modules_install
  8. 安装内核,这一步将编译后的内核安装到系统中:

    sudo make install
  9. 重启系统,进入新安装的内核:

    sudo reboot
  10. 添加系统调用,首先进入内核源代码目录下的arch/x86/entry/syscalls目录,并在其中找到syscall_64.tbl文件。在该文件中添加一行:

    546 common syscall_111211 __x64_sys_syscall_111211

    这里的546是该系统调用在表中的编号,可以根据需要调整。syscall_111211是系统调用的名字,可以根据自己的需求修改。__x64_sys_syscall_111211是系统调用的实现函数,在下一步中会定义。

  11. 在内核源代码目录下的include/linux/syscalls.h文件中添加一行:

    asmlinkage long sys_syscall_111211(void);
  12. 实现系统调用,在内核源代码目录下的kernel/sys.c文件中添加以下代码:

    SYSCALL_DEFINE0(syscall_111211) { printk("操作系统原理实习一-111211-Peng Yinlun\n"); return 0; }

    这里的printk函数用于输出信息到内核日志中

一些过程中发现需要的配置(看情况更新):

apt update
apt install make
apt-get update
apt-get install build-essential
apt-get install libncurses5-dev libncursesw5-dev
apt-get install flex
apt-get install bison

之前通过老师提供的博客进行尝试过,但出现了一些问题

Ubuntu增加一个系统调用(20.04)西电软工OS实验专题二_ubuntu添加系统调用_李黎玖的博客-CSDN博客

在执行到这一步时,因为要求并不一致所以自己写了一个函数,但是忘了加"return 0;"导致后续编译失败

这一步时"make modules_install"代码一直失败,后来问Chat,它说先运行make,后来成功运行了一晚上,第二天完成 。不过不一定是因为这个,因为当时同时改了好几个地方。

最后重启的时候内核报错了

截至目前,尚未解决,重装系统后正在尝试chat给的方法

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值