不正经的保姆级西电软工操作系统实验课教程 ==== 专题二 内核编译
*************** 看前须知 ***********
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了)所以这个问题留给你们
记得一键三连,我们专题三见
不正经的保姆级西电软工操作系统实验课教程 ==== 专题二 内核编译相关推荐
- 不正经的保姆级西电软工操作系统实验课教程 ==== 专题一
*************** 看前须知 *********** 0000000!!!!! 由于题目要求加学号,但是本lowbee没有看到这个要求 于是只是换了内核,不符合要求只能被打回,但是已经找到 ...
- 西电软工操作系统实验:编译Ubuntu18.04新内核并添加系统调用(含代码以及详细分析)
西电软工操作系统实验一:编译Linux内核 目录 (一)前言 (二)实验内容 (三)实验环境 (四)实验过程 4.1安装虚拟机 4.2虚拟机换源 4.3 添加系统调用内核 4.4 下载编译所需的软件依 ...
- Ubuntu增加一个系统调用(20.04)西电软工OS实验专题二
title: 西电软工OS实验专题二–增加系统调用 date: 2022-05-14 07:48:48 tags: OS 写在前面: 如果这个过程中你某个地方没有把握,切记使用vm的快照功能,血的教训 ...
- 西电软工操作系统复习纲要
文章目录 写在前面 第一章 引论(Overview) 一. 什么是操作系统? 第二章 进程与线程(Process & Thread) 一. 什么是进程 二. 什么是线程 三. 进程间通信 四. ...
- 西电软工操作系统作业题
Q1:关于进程创建的问题,进程创建的整个完整的历程是怎样的,就比如说,你用鼠标点开浏览器的过程,我觉得首先是鼠标作为输入设备,点击以后给系统输入了一个打开浏览器的信号,问题就是接下来系统创建浏览器这个 ...
- 西电软工oop面向对象程序设计实验二上机报告
实验目的 本次实验通过设计实现几道以自定义函数为主的程序,以熟悉 C++为程序员提供的函数相关机制,加深对命令行参数.参数传递方式.函数形参的特殊形式等知识的感性认识.学会过程式程序设计范型的基本策略 ...
- 西电软工计组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 ...
- 【快速上手系列】保姆级Layuimini与SSM的联合使用教程(数据表格操作)
[快速上手系列]保姆级Layuimini与SSM的联合使用教程(数据表格操作) 使用步骤 导入layuimini 下载layuimini文件 这个并不是直接运行的,需要用HBuilder导入 layu ...
- 西电软工计算机通信与网络期末复习要点总结
数据通信模型 数据通信网络:广域网WAN (电路交换 分组交换 帧中继 ATM),局域网LAN,无线网城域网. 第二章协议体系结构:协议:语法.语义.定时关系.层,协议,服务,接口.OSI七层协议模型 ...
最新文章
- Host Only、NAT和Bridge三种网络连接
- 动态域名作为dga的做法
- Java设计模式之创建型:单例模式
- js基础练习---图片无缝左右滚动效果(主要以复制删除为主)
- Dp问题:奶牛的聚会
- php性能需求,PHP语言性能考察
- 编写脚本电脑怎么编写界面_在任何无法理解的情况下,请编写脚本
- 最大最小距离算法(K-MEANS K-medoids )聚类算法的结合运用
- SQLite CodeFirst、Migration 的趟坑过程 [附源码]
- 计算文件的hash值方法 | 使用powershell 以及 使用python
- PHP页面跳转几种实现方法
- Django搭建个人博客:改写View视图
- 实习成长之路——设计模式三:组合与继承有啥关系?为什么说多用组合少用继承?如何选择使用哪种方式?
- 传统词向量nlp处理的优缺点_吴恩达深度学习笔记(126) | NLP | GloVe 词向量
- U盘无法格式化解决方法
- 电脑调分辨率黑屏了怎么办_Win10调分辨率后出现黑屏提示“超出工作频率范围”怎么办...
- 姓名投票c语言未给定候选人,C语言上机
- linux服务器console口,Linux重定向console口控制台
- studio 3T如何添加索引
- 2.牛批了 Android 2021中高级面试题 一线大厂和二线大厂面试真题精选 (京东 附答案)第二套 22k+
热门文章
- matlab语音识别系统(源代码),matlab语音识别系统(源代码)最新版DOC.doc
- 缺陷分析在软件项目中的实践
- 腾讯开放平台荣获“中国互联网生态价值之星”
- 测试京东万象的Webservice接口
- Maven3.5.3下载安装与环境配置
- Python学习随笔:使用xlwings读取和操作Excel文件
- pandas无法创建excel文件或者无法读取excel文件
- 图谱实战 | ​鲍捷:知识图谱技术在金融领域的分析和应用
- 微凉的风吹着我凌乱的头发,突然决定开个客博,以录下从MATLAB到OMNET的艰难历程
- 200所高校男女比例排行榜,脱单还有望吗?