Kasan实现原理以及实现过程

内核:4.18.0-147.8.1.el7.aarch64
实现过程:在鲲鹏arm服务器完成

1.官网下载部分源码rpm包kernel-alt-4.14.0-115.el7a.0.1.src.rpm

2.编译内核之前,必须安装编译内核基本工具链,如未安K 7 P M B E $ `装可能遇到如下问题:

   error: Failed build dependencieH i q * e y I c ys:
xmlto is needed by kernel-alt-4.14.0-= b x , 4 p115.el7.0.1.aarch64
asciidoc is needed by kernel-alt-4.14.0-115.el7.0.1.aarch64
newt-devel i5 q 1s needed by kernel-alt-4.14.0-115.el7.0.1.aa] t Z Hrch64
pciutils-devel is needed by kernel-alt-4.14.0-115.l m Zel7.0.1.aarch64
执行命令安装:
`yum insr s ]tall –y xmlto asciido# e @ z q tc newt-devel pciutils-devel`
安装要求的工具链:
yum install rpm-buil{ U W W n Nd redhat-rpm-config asJ o c S S R n cciidoc hmaccalc perl-ExtUtils-Embed pesign xmlto
y~ F q y &um in H ( Y U Nnstall_ _ _ audit-libs-devel binutils-devel elfutN % c p v Oils-devel elfutils-libelf-devel
yum install ncurses-devel newt-du O Q g ] A Kes S # C E y % 1 %vel numactl-devel pciutils-devel pythonB c z @ @ c-dev; T J Y D Sel zlib-deve

3.编译之前确保mockbuiu @ ^ Y 1ld用户和mockbu8 P Bild所属的组有效

   groupadd mockbuild
radd mockbuild -g mockbuild

4.安装rpm 包,此rpm 包实际为rpmbuild 构建工程

rpm -ivh kernel-alt-4.14.0-115.el7a.0.1.src.rpm
安装t & e } ` 3 v完成,rpm构建工程自动部署在
/root/rpmbuild/SPECS
/root/rpmbuild/SOURCES

5.rpmbuild 构建,会自动下载全[ | ^ | V . ) ;量内核代码(包括补丁合入E g 4 P 0 r r

cd /root/rpmbuild/SPECS
rpmbuild -bp --target=$(uname -T k dm) kernel-alt.spe

6.构建完成后,可以获取到全量内核源y ) M B !

路径为:
cd /root/rX a t Apmbuild/BUILD/kernel-alt-4.14.0-115.el7a/linux-4.14.0-115.el7.0.1.aarch64

7.进入编译 make menuconfig也可直接更改.congfig

CONFIG_SLUB_DEBUG=y
CO? C z  ~NFIG_KASAN=y
  1. Make 编译时会有两( r * C n个选项
    make -j 64
    make modules_install 驱动安装(可选)
    Make insta~ n B J - - # Oll 内核安?  ! Z _装(可选)
    选择第一个,而后选择M模块编译

    Kasan实现原理以及实现过程
    Kasan实现原理以及实现过程

9_ 5 n f.编译完成后查看/boot下会多出一个内核Kasan实现原理以及实现过程

10.查询本系统内有几个内核

cat /etc/grub2-efi.cfg |grep menuentry
新编译的内核会有显示(如果未显示就重启,reboot)

Kasan实现原理以及实现过程

11.设置更改后的内核为首选项启动并查询是否更改

grub2-set-defaultH # x Z K 0 k "CentOS Linux (4.14.0) 7 (AltArch)";
grub2-editenv lim k ) y Z 2 L H =st

12.测试是否成功

Linux 内核的源码中已经包含了针对 Kasan 的测试代码,其位置在 lib/test_kasan.c。编译内核或者单独编译 lib 模块的时候,会生成 test_kasan.ko 模块。当向内核插入该模块的时候,就会执行测试代码,编译过就会生成.ko
Insmo c k I rd test_kasan.ko

13.加载ko即可在dmesg中查询或者直接输出
dmesg |grep kasan
Kasan实现原理以及实现过程