使用GDK8调试内核模块(以刘姥姥为例)

刘姥姥是曹雪芹在《红楼梦》中塑造的一个著名角色,同时也是由格蠹开发的一个小型内核模块,通过刘姥姥驱动,用户可以亲手写代码,把自己的代码放入到内核世界,像刘姥姥进大观园那样真正走进LINUX内核世界。
本篇文章就以刘姥姥驱动为例,展示如何借助GDK8、挥码枪以及Nano Code来进行内核模块的调试。

主要步骤:

1.进入GDK8中加载刘姥姥内核模块

cd /home/geduer/gelabs/llaolao

注:如果进入llaolao文件夹后没有看到.ko文件,需要先执行make操作来进行编译。


输入命令来加载这个内核模块:sudo insmod llaolao.ko
需要卸载内核模块可以使用命令:sudo rmmod llaolao
加载成功后可以使用命令来测试内核模块是否加载成功,使用命令来测试是否加载成功可以参考以下文章:
https://www.nanocode.cn/wiki/docs/youlan/youlan-1es7tc4pgnull

例如:

本人使用的GDK8中的刘姥姥文件名为llaolao,如果为llaolao2则步骤也与上面相同


2.加载符号并进行内核调试

llaolao.ko文件放入主机加载符号的同个位置中:

并进行内核调试,步骤和之前的文章相同,这里不再赘述
https://www.nanocode.cn/wiki/docs/gdk8_primer/gdk8_primer-1et5la1gp8i0u
进入内核调试成功后,执行.reload重新加载一下符号,再执行x llaolao!*
出相关符号,出现以下界面则代表llaolao符号已经加载成功。

3.打上断点进行测试

这里我们可以先寻找llaolao中相关的read函数进行断点测试,看是否能够命中断点。

我们选中proc_lll_read函数进行测试,给llaolao!proc_lll_read地址打上一个断点。

然后我们在GDK8中执行cat /proc/llaolao命令,看是否能够命中断点。

可以看到在输入这个命令后,断点命中,也就是内核模块刘姥姥可以在GDK8中进行成功的调试。

作者:Zhang Yinkui  创建时间:2023-07-24 13:05
最后编辑:张诗雨  更新时间:2024-09-14 11:25