奔跑吧实验平台:首个“O0”编译的Linux 5.0内核

“中美贸易战了,我们才发现原来我们的操作系统是薄弱的,国内竟然没有可以独当一面的操作系统,我们服务器都用红帽或者centos,手机都用安卓,PC都用苹果或者windows。Linux内核是是我们操作系统最好的弯道超车。现在已经是Linux 5.0时代了,代码量远超2000w行,面对错综复杂的内核代码,如何高效学习Linux内核?

一个能单步调试最新内核的实验平台很重要,特别是使用“O0”来编译内核,能让你在调试内核过程中游鱼得水,深刻领悟linux内核代码的精髓。”

01

使用busybox工具制作的最小文件系统,该最小系统仅仅包含了Linux系统最常用的命令,如ls,top等命令。如果要在此最小系统中进行systemtap以及kdump等试验的话,我们需要手动编译和安装这些工具,这个过程是相当复杂和繁琐的。为此,我们尝试使用Debian的根文件系统来构造一个小巧而且好用的实验平台。在这个实验平台中,读者可以在线安装丰富的软件包,比如kdump,crash,systemtap等工具。这个实验平台具有如下特点:

 使用“O0”来编译内核

 在主机Host中编译内核

 使用QEMU来加载系统

 支持GDB单步调试内核以及Debian系统

 使用ARM64版本的Debian系统的根文件系统

 在线安装Debian软件包

 支持在虚拟机里动态编译内核模块

 支持Host主机和虚拟机共享文件

这个runninglinuxkernel内核默认使用GCC的“O0”优化等级来编译的。读者可能发现gdb在单步调试内核时会出现光标乱跳并且无法打印有些变量的值(例如出现)等问题,其实这不是gdb或QEMU的问题。是因为内核编译的默认优化选项是O2,因此如果不希望光标乱跳,可以尝试把linux-5.0根目录Makefile中的O2改成O0,但是这样编译时有问题,作者为此做了一些修改。最后需要特别说明一下,使用GCC的“O0”优化等级编译内核会导致内核运行性能下降,因此我们仅仅是为了方便单步调试内核。

(1)安装工具

首先在Ubuntu Linux 18.04中安装如下工具。

$ sudo apt-get install qemu libncurses5-dev gcc-aarch64-linux-gnu build- essential git

(2)编译内核以及制作文件系统

在runninglinuxkernel目录下面有一个rootfs_debian_arm64.tar.xz文件,这个是基于ARM64版本的Debian系统的根文件系统。但是这个根文件系统还只是一个半成品,我们还需要根据编译好的内核来安装内核镜像和内核模块。整个过程比较复杂:

 编译内核

 编译内核模块

 安装内核模块

 安装内核头文件

 安装编译内核模块必须依赖文件

 制作ext4根文件系统

这个过程比较繁琐,作者制作了一个脚本来简化上述过程。

注意,该脚本会使用dd命令来生成一个8GB大小的镜像文件,因此主机系统需要保证至少需要10个GB的空余磁盘空间。若读者需要生成一个更大的根文件系统镜像,可以修该run_debian_arm64.sh这个脚本文件。

$ cd runninglinuxkernel-5.0

$ ./run_debian_arm64.sh build

执行上述脚本需要几十分钟,依赖于主机的计算能力。

(3)运行刚才编译好的ARM64版本的Debian系统。

运行run_debian_arm64.sh脚本,输入run参数即可。

$ sudo ./run_debian_arm64.sh run

运行的结果如下:

$ sudo ./run_debian_arm64.sh run

奔跑吧实验平台:首个“O0”编译的Linux 5.0内核_第1张图片

登录Debian系统:

 用户名:root 或者 benshushu

 密码:123

奔跑吧实验平台:首个“O0”编译的Linux 5.0内核_第2张图片

在线安装软件。

奔跑吧实验平台:首个“O0”编译的Linux 5.0内核_第3张图片

另外大家可以使用本实验平台来玩kdump+crash实验。

奔跑吧实验平台:首个“O0”编译的Linux 5.0内核_第4张图片

奔跑吧实验平台:首个“O0”编译的Linux 5.0内核_第5张图片

图形化单步调试内核是必备的绝门必杀技了。eclipse 有一个好处,可以边单步边查看复杂数据结构的成员的值,比如task_struct,mm_struct等数据结构。只有通过trace调试,你才能保证你的理解是和处理器的理解是一样的。笨叔发现,很多时候我们都想当然了,通过trace单步跑一遍,发现自己理解竟然和处理器跑的不一样,打脸了!而且这种情况还时常发生!

奔跑吧实验平台:首个“O0”编译的Linux 5.0内核_第6张图片

目前这个实验平台暂时开放给购买过笨叔旗舰篇视频的小伙伴试用,等笨叔蓝色奔跑吧v2修订版出版之后会上传到github上。

奔跑吧实验平台:首个“O0”编译的Linux 5.0内核_第7张图片

你可能感兴趣的:(linuxcentos)