Linux内核驱动源码走读之编译内核及外部驱动实操指南
本文约900字,本文主要介绍编译内核和外部驱动的实操说明,这是后续自己编写驱动调试必须要准备的工作环节。
关注公众号, 即可获得与Linux相关的电子书籍(含《深入理解计算机系统》)以及常用开发工具,文末有文档清单。
编译环境:
基于Ubutun18.04 内核版本为6.1.161
环境依赖库安装:
sudo apt-get update
sudo apt-get install -y build-essential flex bison libssl-dev libelf-dev \
ncurses-dev bc ca-certificates wget git gcc make dpkg-dev fakeroot \
rsync kmod cpio libncurses5-dev
一 下载内核源码
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.1.161.tar.xz
tar -xf linux-6.1.161.tar.xz
cd linux-6.1.161
二 配置内核
[1].配置内核基础配置
cp /boot/config-$(uname -r) .config
或者make defconfig
[2].编辑内核配置(打开调试及相关驱动模块等)
make menuconfig
Kernel hacking→ 勾选所有调试选项
确保以下关键选项开启:
CONFIG_DEBUG_INFO=y # 包含调试信息CONFIG_DEBUG_INFO_DWARF5=y # DWARF5格式(GDB支持更好)CONFIG_GDB_SCRIPTS=y # GDB脚本支持CONFIG_KGDB=y # KGDB内核调试CONFIG_FRAME_POINTER=y # 帧指针(backtrace)CONFIG_DEBUG_KERNEL=yCONFIG_DEBUG_DRIVER=yCONFIG_DYNAMIC_DEBUG=y # 动态调试
如果需要编译null驱动,则需要打开如下配置:

保存配置(保存为 .config文件)。
三 编译内核
[1]. 编译内核镜像
make V=1 -j$(nproc) //详细输出,首次编译时推荐查看编译过程
说明:编译中会提示证书的问题,通过创建空证书规避报错。
mkdir -p debiantouch debian/canonical-certs.pemecho "" > debian/canonical-certs.pem# 告诉系统使用空证书scripts/config --set-str CONFIG_SYSTEM_TRUSTED_KEYS ""
[2]. 编译内核模块(驱动)
make modules -j$(nproc)
[3]. 安装内核模块
sudo make modules_install
[4]. 安装内核
# 安装内核到/bootsudo make install
我们主要是为了走读内核的驱动源码,然后自己写写驱动调试一下。第4步可以不做。
四 编译外部驱动模块
[1]. 创建hello.ko驱动示例
// hello.c#include<linux/init.h>#include<linux/module.h>#include<linux/kernel.h>MODULE_LICENSE("GPL");MODULE_AUTHOR("My Name");MODULE_DESCRIPTION("Hello World driver");staticint __init hello_init(void){printk(KERN_INFO "Hello world, kernel 6.1.161!\n");return 0;}staticvoid __exit hello_exit(void){printk(KERN_INFO "Goodbye, kernel!\n");}module_init(hello_init);module_exit(hello_exit);
[2]. 创建Makefile
#MakefileKDIR ?= linux-6.1.161PWD := $(shell pwd)# 或者指向你的内核源码目录# KDIR ?= /path/to/linux-6.1.161obj-m += hello.oall:$(MAKE) -C $(KDIR) M=$(PWD) modulesclean:$(MAKE) -C $(KDIR) M=$(PWD) clean
[3]. 编译驱动
执行make

因打开了详细输出查看内核编译过程, 需要好久才编译完,刚编译完驱动公司外网网络就断开了,来不及安装驱动调试了。有兴趣的可以继续往下调试。
以上为全文内容。
这里是女程序员的笔记本
15年+嵌入式软件工程师兼二胎宝妈
分享读书心得、工作经验,自我成长和生活方式。
希望我的文字能对你有所帮助
夜雨聆风
