*************** 看前须知 ***********

1.本文仅仅是西电软件工程OS实验课的教程,原则上只接受关于本实验相关的问题

2.代码原则上仅仅作为参考,如果被查出因为抄袭而导致不良的后果,本人不负任何责任。

3.文章中的代码是经过整合而得到的,如有侵权,请及时联系

4.关于实验系统 本人使用的是Ubuntu 20.04 linux内核最低5.4.x vmware 15.x

5.接上条,如果你按照了这个配置还是出现了问题,那么可以at我

6.本教程已经更新了专题一需要加学号的问题,由于两个专题步骤差不多,所以写到一起,大家看的时候注意就行了!

========================================================

$ 0.99

本文参考自 https://blog.csdn.net/BAR_WORKSHOP/article/details/111647568 侵权必删

在专题一中学习完了之后,你发现其实这里有你始终过不去的坎,那就是专题二你还得要编译内核,所以我知道一开始偷懒还是得要还的

然后你们又来白嫖我了…那我T某就继续当工具人给你们写教程好了…

$$ 0.999

内核版本 :5.11.19

$ 1.0 准备工作

由于已经有上述博主的先列,我们直接按照他的教程来比较好

1.1 手动换源

sudo gedit /etc/apt/sources.list
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse

这里我的做法是,直接把这一段复制到了最上面的位置

ps # 代表注释


我添加到了 第4行之后
之后那自然就是更新一下源咯

sudo apt-get update && sudo apt-get upgrade

1.2 下载内核依赖

先进入root 模式

sudo su

然后再一条一条复制下载这些(当然你可以把这些写个.sh 然后bash 之后去喝茶)

sudo apt-get install libc6-dev -y
sudo apt-get install libelf-dev -y
sudo apt-get install libncurses5-dev libssl-dev -y
sudo apt-get install build-essential openssl -y
sudo apt-get install libidn11-dev libidn11 -y
sudo apt-get install zlibc minizip -y
sudo apt-get install bison -y
sudo apt-get install flex -y
sudo apt-get install pkg-config -y
这几个依赖你都得下载(不要问我哪个依赖是干嘛的,我一个写web后端的,我哪知道啊…)


如果全部安装成功 那么基本上没啥问题了
这里我引用原博主的原话

这一步比较容易出问题,我在做的时候遇到了各种依赖无法安装的报错,如果您第一步更换源听从了我的建议,这里应该一遍过,会少走很多弯路。

当然 我运气比较好,没出现什么问题,如果有问题欢迎去原博主的地方看看
(其实是我比较lowbee,,,,懒得一个一个瞎折腾了)

1.3 下载内核源码

请先去kernel 官网下载 内核源码

https://www.kernel.org/
我下的是5.11.19

然后暴力拖进虚拟机(其实你可以在虚拟机里面下载(其实你可以上梯子下载))
注意不要拖到桌面(桌面好像不让拖,点开文件夹拖到合适的地方就行)

然后 切换 到root 把文件解压到/usr/src目录下

sudo su
tar -xavf  linux-5.11.19.tar.xz  -C /usr/src

(如果你下不到5.11.19了,那把关于这个linux的版本号改成你的就行了(之后的一样))

1.4添加自定义系统调用

 cd  /usr/src/linux-5.11.19
  • 之后都在 /usr/src/linux-linux-5.11.19 这个文件下操作
打开自定义系统调用号的syscall_64.tbl文件,在里面添加自定义的系统调用
sudo gedit arch/x86/entry/syscalls/syscall_64.tbl


我解释一下 这里442是我们新增的系统调用 mysyscall 和 sys_mysyscall 是调用表之间的映射

442必须放在441的后面,不然GG

1.5 添加函数声明和定义

  • 添加函数声明
sudo gedit include/linux/syscalls.h


记得 这个得在#endif之前加

  • 打开 sys.c 文件
sudo gedit kernel/sys.c
  • 添加 调用函数 (在末尾 #endif之前)
SYSCALL_DEFINE1(mysyscall,long long,number)
{long ge,shi,bai,qian,wan,shiwan;if(number % 2 == 1 ){ge = number % 10 ;number = number / 10;shi = number % 10 ;number = number / 10;bai = number % 10 ;number = number / 10;qian = number % 10 ;number = number / 10;wan = number % 10 ;return wan * 10000 + qian *1000 + bai *100 +shi *10 +ge;}else{ge = number % 10 ;number = number / 10;shi = number % 10 ;number = number / 10;bai = number % 10 ;number = number / 10;qian = number % 10 ;number = number / 10;wan = number % 10 ;number = number / 10;shiwan = number % 10 ;return shiwan*100000 + wan * 10000 + qian *1000 + bai *100 +shi *10 +ge;}}

!!!!! 不要问我这个函数为什么写的这么lowbee,我哪想啊,还不是为了开荒写的,而且讲真其实应该返回应该是 char* 但是这个函数只能返回long ,我tm有啥办法???
而且内核里面不让用for,老师那道题给出的int 和long 根本就放不进去,我尼玛当时编译内核从早到晚编译了一天。十几次(错了就得重来(wdnmd)),这个才写出来 讲真linux谁太深了,我这种lowbee真的太垃圾了(wqnmlgb)(老子这一辈子不会再去写内核(真香))

1.6 内核编译

先说好,如果你按照以上老老实实的做了 ,那应该是没啥问题… 不然哪怕错了一步,都得重来,重来就是一个小时
  • 净化内核
sudo make mrproper

这条命令会删除所有的编译生成文件、内核配置文件和各种备份文件

sudo make clean

这条命令会删除前一次编译过程中残留的数据

  • 配置文件,不需要改什么的话直接Exit
sudo make menuconfig

直接exit就行,啥也别改

然后要把.config里面一个地方改了,不然GG

sudo gedit .config


这个地方原来有个 debian/balabala 什么东西 把那个全部清了 不然GG

================================================

关于加学号的问题,现在在这里更新

由于加学号仅仅涉及到改Makefile文件,最终都还得编译的!

sudo gedit Makefile


改这就行了 记得保存 之后也不需要改grub了(之后他会自动换的!) 一切运行完了之后uname -a 就行了!

  • 编译内核,j后面的数字是分配的核心数,根据自己得情况来给定
  • 我的是 2 *6 =12
sudo make -j12

我这边大概一次40多分钟 ,我有个室友竟然跑到了2个h,所以安心等待
哦 如果你这个时候打游戏,你的cpu直接跑满,是不是很刺激
(当然你可以加电压超频)

  • 重置内核
sudo make modules_install
sudo make install

这两部很快,如果出现了和专题1一样的结果 那基本上没啥问题了
直接 reboot(重启)

如果出问题了 不妨 sudo make module 看看错到哪了

1.6 测试代码

随便一个位置(我是桌面)

sudo gedit test.c
#include <linux/kernel.h>
#include <sys/syscall.h>
#include <unistd.h>
#include <stdio.h>int main(int argc,char **argv)
{//441:long sys_mysyscall(int)long long temp;scanf("%lld",&temp);  long fuck ;fuck = syscall(442,temp);printf("mysyscall return %ld\n",fuck);return 0;
}
  • 然后编译
gcc -o test test.c
  • 运行
./test

这里我给出测试结果

很好 竟然通过了
其实这不算严格的完成,因为理论上来讲应该是返回char*类型,但是amslinkage我不会用(我太lowbee了)所以这个问题留给你们
记得一键三连,我们专题三见

不正经的保姆级西电软工操作系统实验课教程 ==== 专题二 内核编译相关推荐

  1. 不正经的保姆级西电软工操作系统实验课教程 ==== 专题一

    *************** 看前须知 *********** 0000000!!!!! 由于题目要求加学号,但是本lowbee没有看到这个要求 于是只是换了内核,不符合要求只能被打回,但是已经找到 ...

  2. 西电软工操作系统实验:编译Ubuntu18.04新内核并添加系统调用(含代码以及详细分析)

    西电软工操作系统实验一:编译Linux内核 目录 (一)前言 (二)实验内容 (三)实验环境 (四)实验过程 4.1安装虚拟机 4.2虚拟机换源 4.3 添加系统调用内核 4.4 下载编译所需的软件依 ...

  3. Ubuntu增加一个系统调用(20.04)西电软工OS实验专题二

    title: 西电软工OS实验专题二–增加系统调用 date: 2022-05-14 07:48:48 tags: OS 写在前面: 如果这个过程中你某个地方没有把握,切记使用vm的快照功能,血的教训 ...

  4. 西电软工操作系统复习纲要

    文章目录 写在前面 第一章 引论(Overview) 一. 什么是操作系统? 第二章 进程与线程(Process & Thread) 一. 什么是进程 二. 什么是线程 三. 进程间通信 四. ...

  5. 西电软工操作系统作业题

    Q1:关于进程创建的问题,进程创建的整个完整的历程是怎样的,就比如说,你用鼠标点开浏览器的过程,我觉得首先是鼠标作为输入设备,点击以后给系统输入了一个打开浏览器的信号,问题就是接下来系统创建浏览器这个 ...

  6. 西电软工oop面向对象程序设计实验二上机报告

    实验目的 本次实验通过设计实现几道以自定义函数为主的程序,以熟悉 C++为程序员提供的函数相关机制,加深对命令行参数.参数传递方式.函数形参的特殊形式等知识的感性认识.学会过程式程序设计范型的基本策略 ...

  7. 西电软工计组II作业答案(2020-2021)

    西电软工计组II作业答案(2020-2021) 文章目录 西电软工计组II作业答案(2020-2021) 第六章 6.5 6.9 6.10 第七章 7.2 7.6 7.7 7.16 7.22 7.23 ...

  8. 【快速上手系列】保姆级Layuimini与SSM的联合使用教程(数据表格操作)

    [快速上手系列]保姆级Layuimini与SSM的联合使用教程(数据表格操作) 使用步骤 导入layuimini 下载layuimini文件 这个并不是直接运行的,需要用HBuilder导入 layu ...

  9. 西电软工计算机通信与网络期末复习要点总结

    数据通信模型 数据通信网络:广域网WAN (电路交换 分组交换 帧中继 ATM),局域网LAN,无线网城域网. 第二章协议体系结构:协议:语法.语义.定时关系.层,协议,服务,接口.OSI七层协议模型 ...

最新文章

  1. Host Only、NAT和Bridge三种网络连接
  2. 动态域名作为dga的做法
  3. Java设计模式之创建型:单例模式
  4. js基础练习---图片无缝左右滚动效果(主要以复制删除为主)
  5. Dp问题:奶牛的聚会
  6. php性能需求,PHP语言性能考察
  7. 编写脚本电脑怎么编写界面_在任何无法理解的情况下,请编写脚本
  8. 最大最小距离算法(K-MEANS K-medoids )聚类算法的结合运用
  9. SQLite CodeFirst、Migration 的趟坑过程 [附源码]
  10. 计算文件的hash值方法 | 使用powershell 以及 使用python
  11. PHP页面跳转几种实现方法
  12. Django搭建个人博客:改写View视图
  13. 实习成长之路——设计模式三:组合与继承有啥关系?为什么说多用组合少用继承?如何选择使用哪种方式?
  14. 传统词向量nlp处理的优缺点_吴恩达深度学习笔记(126) | NLP | GloVe 词向量
  15. U盘无法格式化解决方法
  16. 电脑调分辨率黑屏了怎么办_Win10调分辨率后出现黑屏提示“超出工作频率范围”怎么办...
  17. 姓名投票c语言未给定候选人,C语言上机
  18. linux服务器console口,Linux重定向console口控制台
  19. studio 3T如何添加索引
  20. 2.牛批了 Android 2021中高级面试题 一线大厂和二线大厂面试真题精选 (京东 附答案)第二套 22k+

热门文章

  1. matlab语音识别系统(源代码),matlab语音识别系统(源代码)最新版DOC.doc
  2. 缺陷分析在软件项目中的实践
  3. 腾讯开放平台荣获“中国互联网生态价值之星”
  4. 测试京东万象的Webservice接口
  5. Maven3.5.3下载安装与环境配置
  6. Python学习随笔:使用xlwings读取和操作Excel文件
  7. pandas无法创建excel文件或者无法读取excel文件
  8. 图谱实战 | ​鲍捷:知识图谱技术在金融领域的分析和应用
  9. 微凉的风吹着我凌乱的头发,突然决定开个客博,以录下从MATLAB到OMNET的艰难历程
  10. 200所高校男女比例排行榜,脱单还有望吗?