ubuntu20.04上搭建linux内核驱动调试环境

搭建linux内核驱动调试环境

linux驱动开发调试的条件

我用的是ubuntu20.04,这个基本不能用来调试内核的,这种发行版本一定会关闭调试选项,为了保证运行速度。

关于linux内核第四章linux设备驱动的调试自己有了一个很长时间的思考,其实打开linux设备驱动的关键条件是要打开内核中的CONIFG_DEBUG_INFO选项。

我用的是gdb,根据第四章的介绍,需要打开两个选项,CONFIG_DEBUG_INFO还有CONFIG_FRAME_POINTER选项。

如何在ubuntu上编译linux内核

由于只是简单测试,没有开发板子,更没有必要去安装gcc的交叉编译环境,所以直接在虚拟机上重新编译内核就可以,不会再用自己电脑编译了,出错之后可能直接打不开。

在ubuntu上安装linux内核源码

sudo apt install linux-source
cd /usr/src

执行完成之后会在/usr/src下面生成代码目录,注意不要直接删掉,删掉后会出现虚目录,再次apt就装不上了,只能安装系统后重新编译

zhanglei@ubuntu:~$ ls
linux-headers-5.4.0-26          linux-source-5.4.0
linux-headers-5.4.0-26-generic  linux-source-5.4.0.tar.bz2

解压 linux-source-5.4.0.tar.bz2

sudo tar -jxvf linux-source-5.4.0.tar.bz2

出现了目录linux-source-5.4.0,然后安装相关依赖

sudo apt install build-essential
sudo apt install libncurses-dev
sudo apt install flex
sudo apt install bison
sudo apt install libelf-dev
sudo apt-get install libssl-dev

安装好这些依赖之后,我们可以执行

sudo make menuconfig

去配置相关的linux 内核的选项

选择

Kernel Hacking -> Compile-time checks and compile options -> Compile the kernel with debug info

设置相关选项后

编译驱动模块

sudo make modules 

安装模块

sudo make modules_install

安装内核

sudo make install

经过长时间编译后,重新启动机器,选择对应的linux内核版本

sudo reboot -f

确定版本

选择linux内核版本5.4.78后,重启完成确定内核版本

uname -r

版本确认

zhanglei@ubuntu:/usr/src/linux-source-5.4.0/linux-source-5.4.0$ uname -r
5.4.78

使用gdb确认效果

编写测试的c文件

//test.c
#include<linux/init.h>
#include<linux/module.h>
MODULE_LICENSE("GPL");
static int test_init(void)
{
	printk(KERN_ALERT "Hello,world\n");
	return 0;
}
static void test_exit(void)
{
	printk(KERN_ALERT"Goodbye,cruel world\n");
 
}
module_init(test_init);
module_exit(test_exit);

测试的make file

obj-m:=test.o
 
KERNELDIR:=/lib/modules/$(shell uname -r)/build
 
PWD:=$(shell pwd)
 
modules:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

使用gdb加载ko文件

(gdb) add-symbol-file test.ko 
add symbol table from file "test.ko"
(y or n) y
Reading symbols from test.ko...
(gdb) 

发现成功加载ko文件了,剩下的调试技巧,明天继续学习

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 鲸 设计师:meimeiellie 返回首页