Skip to content

Philon/rpi-drivers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

d1c55d0 · May 23, 2021

History

38 Commits
May 23, 2021
Jul 13, 2019
Jul 22, 2019
Aug 11, 2019
Aug 20, 2019
Sep 8, 2019
Sep 22, 2019
Oct 8, 2019
May 23, 2021
May 23, 2021
May 23, 2021
May 23, 2021
May 23, 2021

Repository files navigation

树莓派驱动开发实战

本项目是基于Raspberry Pi 3B+平台学习Linux驱动开发的记录与分享,旨于对Linux内核模块机制的熟悉、常见接口的Linux驱动实现、常用模块的原理掌握。原则上,每个驱动模块我都会编写对应的教程(因为我相信掌握知识最有效的方式是理解并能转述)。

环境

详细的环境搭建已在00-hello中介绍,以下仅做补充说明。

  • 内核:务必按照树莓派所运行的Linux内核版本到官方仓库下载,比如rpi-4.19.y.tar.gz,通常情况下我会将其放在工程根目录
  • IDE:我个人喜欢用vscode,显然本项目的.vscode目录是我自己的环境配置,仅做参考
  • 交叉编译:建议采用官方提供的cross-toolchain,由于我个人宿主机为macOS环境,交叉编译器为自行构建的arm-mac-linux-gnueabihf-10.3.0版本
  • 接线图:文章中涉及的电路图采用Fritzing绘制,即各目录下的.fzz文件

编译规则

rules.mk是一套通用的驱动模块及测试用例构建规则,在各驱动源码目录下的Makefile中指定模块并将其包含即可。例如:

# ./00-hello/Makefile
obj-m := hello.o
-include ../rules.mk

如此这般,便可获得如下方式对项目进行构建:

make            # 生成全部(内核模块、测试用例、dtbo等)
make clean      # 清理项目
make modules    # 仅编译驱动模块及设备树(若有)
make tests      # 仅编译测试用例
make install    # 安装相应驱动模块、测试用例等至目标开发板

文件类型

  • xxx_test.c会被视作测试用例,会生成对应的"xxx_test"程序
  • xxx.dts会被视作设备树,在编译模块是会同时将其编译"xxx.dtbo"

Makefile变量

可以在Makefile中配置相关环境或参数,当然它不是必须的,如果觉得麻烦也可以直接去修改rules。不过要注意,任何配置都必须放在"-include ../rules.mk"语句之前,否则不生效。

# ./00-hello/Makefile
obj-m := hello.o

# 指定交叉编译工具链前缀
CROSS_COMPILE = /usr/local/bin/arm-linux-

# 指定内核源码目录
KDIR = /home/user/linux-rpi-4.19.y

# 配置测试用例编译链接参数
LDFLAGS = -lpthread -L/home/user/mylib -lmy

# 指定安装路径(将通过scp命令远程拷贝,即scp <target>:<path>)
INSTALL_PATH = 192.168.1.100:~/modules

# 额外需要安装的文件指定(*.ko *.dtbo *_test将被自动检测并安装)
INSTALL_FILES = file1 file2 file3

-include ../rules.mk