“中美贸易战了,我们才发觉原先我们的操作系统是薄弱的,国外居然没有可以独当一面的操作系统arm linux内核编译,我们服务器都用红帽或则centos,手机都用安卓,PC都用苹果或则windows。Linux内核是是我们操作系统最好的弯道会车。如今早已是Linux5.0时代了,代码量远超2000w行,面对纷繁复杂的内核代码,怎么高效学习Linux内核?

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

01

使用busybox工具制做的最小文件系统,该最小系统仅仅包含了Linux系统最常用的命令,如ls,top等命令。假如要在此最小系统中进行systemtap以及kdump等试验的话,我们须要自动编译和安装这种工具,这个过程是相当复杂和繁杂的。因此,我们尝试使用Debian的根文件系统来构造一个精巧并且好用的实验平台。在这个实验平台中,读者可以在线安装丰富的软件包,例如kdump,crash什么是linux,systemtap等工具。这个实验平台具有如下特征:

使用“O0”来编译内核

在主机Host中编译内核

使用QEMU来加载系统

arm linux内核编译_内核编译时间不变怎么办_内核编译工具

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

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

在线安装Debian软件包

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

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

这个runninglinuxkernel内核默认使用GCC的“O0”优化等级来编译的。读者可能发觉gdb在单步调试内核时会出现光标乱跳而且难以复印有些变量的值(比如出现)等问题,虽然这不是gdb或QEMU的问题。是由于内核编译的默认优化选项是O2ubuntu linux,因而若果不希望光标乱跳,可以尝试把linux-5.0根目录Makefile中的O2改成O0,然而这样编译时有问题,作者因此做了一些更改。最后须要特别说明一下,使用GCC的“O0”优化等级编译内核会造成内核运行性能增长,因而我们仅仅是为了便捷单步调试内核。

(1)安装工具

首先在UbuntuLinux18.04中安装如下工具。

arm linux内核编译_内核编译工具_内核编译时间不变怎么办

$sudoapt-getinstallqemulibncurses5-devgcc-aarch64-linux-gnubuild-essentialgit

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

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

编译内核

编译内核模块

安装内核模块

安装内核头文件

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

制做ext4根文件系统

内核编译工具_内核编译时间不变怎么办_arm linux内核编译

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

注意,该脚本会使用dd命令来世成一个8GB大小的镜像文件arm linux内核编译,因而主机系统须要保证起码须要10个GB的空余c盘空间。若读者须要生成一个更大的根文件系统镜像,可以修该run_debian_arm64.sh这个脚本文件。

$cdrunninglinuxkernel-5.0

$./run_debian_arm64.shbuild

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

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

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

$sudo./run_debian_arm64.shrun

运行的结果如下:

arm linux内核编译_内核编译工具_内核编译时间不变怎么办

$sudo./run_debian_arm64.shrun

登陆Debian系统:

用户名:root或则benshushu

密码:123

在线安装软件。

内核编译时间不变怎么办_内核编译工具_arm linux内核编译

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

图形化单步调试内核是必备的绝门必杀技了。eclipse有一个用处,可以边单步边查看复杂数据结构的成员的值,例如task_struct,mm_struct等数据结构。只有通过trace调试,你就能保证你的理解是和处理器的理解是一样的。笨叔发觉,好多时侯我们都偏颇了,通过trace单步跑一遍,发觉自己理解居然和处理器跑的不一样,打脸了!并且这些情况还经常发生!

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

内核编译工具_arm linux内核编译_内核编译时间不变怎么办

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复