概述
搭建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,worldn");
return 0;
}
static void test_exit(void)
{
printk(KERN_ALERT"Goodbye,cruel worldn");
}
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文件了,剩下的调试技巧,明天继续学习
最后
以上就是欣慰身影为你收集整理的ubuntu20.04上搭建linux内核驱动调试环境搭建linux内核驱动调试环境的全部内容,希望文章能够帮你解决ubuntu20.04上搭建linux内核驱动调试环境搭建linux内核驱动调试环境所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复