乐趣区

关于linux:奔跑吧实验平台首个O0编译的Linux-50内核

“中美贸易战了,咱们才发现原来咱们的操作系统是单薄的,国内居然没有能够独当一面的操作系统,咱们服务器都用红帽或者 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 在单步调试内核时会呈现光标乱跳并且无奈打印有些变量的值(例如呈现 <optimized out>)等问题,其实这不是 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

登录 Debian 零碎:

 用户名:root 或者 benshushu

 明码:123

在线装置软件。

另外大家能够应用本试验平台来玩 kdump+crash 试验。

图形化单步调试内核是必备的绝门必杀技了。eclipse 有一个益处,能够边单步边查看简单数据结构的成员的值,比方 task_struct,mm_struct 等数据结构。只有通过 trace 调试,你能力保障你的了解是和处理器的了解是一样的。笨叔发现,很多时候咱们都想当然了,通过 trace 单步跑一遍,发现自己了解居然和处理器跑的不一样,打脸了!而且这种状况还时常产生!

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

退出移动版