「电〇生存手册(1)」为什么跟着老师的配置还会 kernel panic
写在前面
这篇文章属于是小孩子不懂事写着玩的(误),基本上只有一些心得和暴论啥的。想到这会笔者把内容都已经拖到大三了,连仅存的参考意义都没有了,唉,拖延症,
总之这文章充满暴论中的暴论(乐),如果有人从我这里确实能获得参考或者收获,那也挺好,属于是无心插柳柳成荫。
操作步骤直接看后面就行,咱认为这样的教程应该先让人跑起来,而不是抽象的讲来讲去各种原理,真正上手的时候只给一小段操作教程。
借助了一点 new Bing 和前辈的经验,我们注定要成为教学事故的操作系统实验在一通诡辩当中混过去了,这个月又是社团事务又是新冠复阳又是计划财务处发癫不给我发经费又是四门实验又要期末复习,屋漏偏逢连夜雨,月末只有几百块钱的我要交手办尾款,本来混过去之后想出勤打 mai 来庆祝,看到西安这个天天都在下雨的傻卵天气,就寻思窝在宿舍里写博客吧,省省钱不好吗。。。
写这篇文章的原因就是,我真的受不了直到 3022 年我们操作系统实验老师还在用 Ubuntu 10 搭配远古时期的 VMware,这真的不能忍——
- 看着电脑里面复杂的 Hyper-V 预设,即使关闭了,也无法彻底完全关闭、难以开启远古时期的 VMware。
- 我是懒狗,不想当怀古厨。用 VMware Workstation Pro 17,打开 Ubuntu 10 居然出现了花屏和爆音。。。。这能忍这能忍这能忍这能忍?在 Windows 11 平台兼容性已经成这样了,我推测是显卡驱动相关的地方兼容性慢慢的寄掉了,
- 本来想进一步配置 WSL 的,不过实验内容都这样了就顺从 VMWare 吧,菜鸡还是需要个 GUI,不为了别的东西,就图个心里踏实,下次继续研究.jpg
于是 Ubuntu 22.04,启动!
环境配置
Ubuntu 有三大版本,桌面版、服务器版及用于物联网设备和机器人的 Core 版。而在这三大版本当中,因为桌面版最满足学习操作系统的入门者的欲望,所以,为了简单的学习操作系统,在这三者中,优先性是第一位的。如果能在调试的过程中,很多看起来麻烦的问题可以开袋即食的解决,也能让萌新无比愉快。而在现实生活中,存在着对…
(怎么博客里还能看答辩的,拖出去
1.为什么 gcc 下载不下来啊?是不是这个 Ubumtu 有问题啊?
刻板印象的 CS lore 之一就是 CS 壬不需要 GUI。都「以桌面应用为主」了,其实基本上大部分东西都是开袋即食的模式,一般来说也就遇到个下载的问题。
换个下载源就可以,否则某些时候下东西都困难。
很多包管理器啥的,由于东北亚大陆的独特问题,其实普遍要换源的。很多东西配置起来意外的麻烦,不过 Ubuntu 这些倒也还好。
参考
Ubuntu 的软件源配置文件是
/etc/apt/sources.list
。将系统自带的该文件做备份,然后替换源就可以了。
配置的是清华 tuna
的软件源,可以参考https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
配置之后更新即可。
1 | sudo apt-get update |
然后可以配置 gcc 之类的。
- 那 Ubuntu 10.04 的话,要怎么安装捏?
妈妈生的.jpg
还 Ubuntu 10 还 Ubuntu 10 还 Ubuntu 10,一会就去撅♂了你去,开机花屏你舒服?安不了 VMware tools 你舒服?这么喜欢爆音 ear rape 就给你开开眼(被拖走
2. 无法拖拽文件?提示「drag and drop is not supported;An invalid drag type was used」
使用 22.04 的时候确实遇到了这个情况。
看到的一个方法是安装 Nemo?确实解决了这个问题。
1 | sudo apt install nemo |
然后设置默认应用,在 startup application preference 中添加
Command:nemo-desktop
编译内核
到上面这一步,满足大部分条件的代码都能写了,效果如何取决于您个人的造诣或者拷打 GPT 的造诣,但对于课没听过一节、只剩下三四天时间验收的人来说,接下来学这玩意肯定要面临的叹息之墙是内核编译。到这一步我看着每一个系统音都跟喇叭被雷普了一样的 Ubuntu 10 陷入了沉思,这能忍这能忍这能忍这能忍?
接下来是 Ubuntu 22.04 通过编译内核源代码的方法进行内核版本升级到 Linux-6.1.30 的方法,其实这些事情都很简单。
编译内核消耗时间和空间。可以多分配点硬盘空间和 CPU 核心数。我虚拟机分配了 16GB RAM + 4 核 + 80GB。
操作:
下载源代码、解压。kernel.org 即可,可以解压到
/usr/src
啥的。配置全套工具,一股脑给它都下载下来,其实这么一句话就解决问题了(
1 | sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev |
一气呵成的全部安装。
- 配置
.config,防止下一步遇到某个问题暴毙(
make: 没有规则可制作目标
)
问题参考:https://askubuntu.com/questions/1329538/compiling-the-kernel-5-11-11,这个问题确实让我报错了。如果用新一点的版本普遍可能需要设置。
1 | CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem" |
替换成
1 | CONFIG_SYSTEM_TRUSTED_KEYS="" |
- 编译内核(别真把注释搞进去,bash 不支持这样配置注释!)
1 | sudo make menuconfig //进入 GUI,可以设置版本号 |
- grub 自己就可以识别内核。重启。如果要看版本可以长按 shift 键进 grub,选择你想要的内核版本就可以。
-为什么我按照他的教程还是会报 kernel panic ,这是咋回事啊?
-真别说,我按照老师那个步骤,跟他毕加索一样的讲授方法绕了大半个 M78 星云,顶着爆音和显卡驱动 VMWare 各种不兼容,拿 Ubuntu 10 与 Linux 2.6 kernel 编译的时候就 kernel panic。也不知道哪里出的问题,我不知道连 apt-get 都没法用的一个远古系统,出了玄学问题的时候,要去哪里找相关的参考。如今 GPT 之类的工具也完善起来了,也包括 Stackoverflow 这样的论坛积攒了多年的各种问题,很多都有一定的参考性,解决 10.04 这种早已停止支持的老古董的问题,要远比仍旧在生命周期内的 22.04 要麻烦。
增加系统调用
(适用于 Ubuntu 22,很早以前的版本或许不一样。)
- 修改系统调用表文件。
在
*您的linux源代码位置*/arch/x86/entry/syscalls/syscall_64.tbl
当中,添加一行内容。加在「请不要在下面添加
不会使用」的注释的上面(它都不让你添加了)
例:
1 | 334 common rseq sys_rseq |
- 添加系统调用函数声明
在 /include/linux/syscalls.h
中添加:
1 | asmlinkage long sys_my_syscall1(int num, int flag); |
- 修改内核代码本体。
在 /kernel/sys.c
中添加:
1 | SYSCALL_DEFINE2(my_syscall1, int, num, int, flag) |
- make。