基于 Jenkins 搭建针对内核的 CI

背景简述 目标内核分支:4.4、4.18、4.19、5.10 根文件系统:最后一版非 Stream 的 CentOS 8 架构概述: 制作一份统一的原始 rootfs 镜像; 为每个内核版本各自设立一个 Job,各自拷贝一份原始 rootfs 运行 VM,随后在 VM 内执行编译内核、安装内核、运行测试套以及其他特定内核版本所需的动作。 Jenkins 配置手册 使用清华开源镜像站 。 Jenkins 有普通版(每周一更)和 LTS 版(每 12 周一更),安装包(以 Ubuntu 为例)在清华源上分别保存在 debian/ 和 debian-stable/ 上。下载下来直接安装即可,不用配 apt 啥的,主要是网络代理太麻烦。 安 …

基于 BusyBox 快速制作内核验证环境

本文介绍的方法,旨在利用基于 BusyBox 制作的简易文件系统来快速启动内核并进入一个 shell 环境,以此来验证内核的功能和稳定性。其优点在于制作简单,资源占用小,验证环境的启动时间短(仅需启动内核,省去了各种用户态应用及框架的启动过程);缺点是可拓展性较差,难以支撑一些需要用到用户态工具的复杂内核功能的验证。 本文主要以 ARM64 为例讲解整个过程。实际操作中,应结合实际使用的体系结构与工具链对步骤细节进行调整。介绍的验证环境有基于 initrd 和基于 SD 卡两种,可以根据实际情况选择。 BusyBox 编译 1# BusyBox 源代码下载,解压 2# https://busybox.net/downloads/ 3 …

Linux 内核问题调试手段——QEMU 专题

VM 启动后没有输出?莫慌~ 一般而言,在运行 qemu-system-xxx 启动虚拟机后,我们希望在主机的当前终端上看到内核的启动日志,并在虚拟机启动后用该终端直接操作虚拟机。然而有时,当前终端在运行了 qemu-system-xxx 后却毫无动静。此时,在确认内核可以正常启动的前提下,要去确认几件事情: 当前终端对 QEMU 虚拟机而言是什么设备; 当前内核使用的 /dev/console 指向了哪个设备。 先找到一个可用的虚拟机终端(比如通过 VNC 连接的方式),然后向 /dev/{console,tty{,S}{0,1,...}} 等物理终端设备文件逐个尝试输入一些内容,看看哪个文件能让主机的当前终端有输出1。确定了是哪 …

基于完整发行版搭建内核验证环境

0x01 虚拟机(VM)安装及启动 1. 选择一个发行版,下载其安装镜像 选择格式为 .iso 的安装镜像进行下载。 2. 制作根文件系统(rootfs)镜像 总体思路:启动一个 QEMU 虚拟机,以 rootfs 镜像文件为硬盘,以安装镜像 iso 文件为光盘。设置虚拟机从光盘启动,将系统安装至硬盘。 1# create an empty rootfs image file 2qemu-img create -f qcow2 rootfs.qcow2 128G 3 4# boot from CD-ROM, so that OS can be installed into the rootfs image …