移植驱动之前,需要搭建好SDK 或者BSP开发环境的前期工作,本文是基于SDK移植自己编写的虚拟摄像头驱动。
1.找到驱动文件应该在的地方
SDK/Kernel/drivers的文件目录下有很多瑞芯微官方提供的驱动程序,可以看出官方提供可以直接移植的驱动库,但是文件分类对于新手有点混乱,驱动程序所在路径并不好找。
① 可以根据docs下的文档来获取驱动程序的路径,如:
在这个文档里,可以找到瑞芯微SDK里关于Camera软件驱动的目录
② 还可以在kernel 目录下,终端输入 make menuconfig指令
通过"/"键通过驱动名查找同文件目录下的Kconfig文件来确认驱动文件所在的位置。
2.驱动文件的编写
Linux的驱动程序一般是由C语言编写的。C语言提供了直接操作硬件、内存和系统资源的能力,同时与 Linux 内核的 API 和系统调用接口紧密结合,因此它是编写 Linux 驱动程序的主要语言。
·······················
3.内核编译配置
驱动程序直接拷贝到对应的目录,此时并不能直接编译到内核里,需要修改改 Makefile 和 Kconfig,确保内核编译的时候正确的注册要移植的驱动程序。
-
Makefile是一个自动化构建工具,用于定义和管理源代码的编译和链接过程。在 Linux 驱动开发中,
Makefile主要用于指导如何编译和生成内核模块。它帮助开发者自动化编译流程,避免手动输入多个命令,从而提高开发效率。可以在当前目录下,用VI编译器打开Makefile文件
obj-$(CONFIG_VIDEO_MIPIRX) += mipirx.o
CONFIG_VIDEO_MIPIRX是在Kconfig中定义的配置选项+= mipirx.o表示将mipirx.o内核编译后会生成.o文件 -
Kconfig 是 Linux 内核配置系统的一个核心文件格式,用于定义内核中模块(驱动、功能选项等)的配置选项。它配合
make menuconfig等工具,允许开发者选择启用或禁用特定的功能模块,从而决定哪些代码会被编译进内核或作为模块构建。这段
Kconfig文件定义了一个名为VIDEO_MIPIRX的内核配置选项。启用这个选项会编译mipirx驱动。 这样,mipirx驱动就可以出现在make menuconfig的图形界面中
[*] 表示驱动是内核编译 [M]表示驱动是作为内核模块编译
最后会生成生成 .config 文件
最后再进行内核编译,就可以把目标驱动程序编译进内核。
5.驱动程序成功载入验证
dmesg | grep + 驱动名,即可验证
- 遇到的一些问题:
make menuconfig 会把配置保存到.config 文件中,有时候内核编译没有同步.config的配置, 需要手动把.config文件里的配置手动更新到内核编译所用到的defconfig文件中
在kernel目录下:
cp .config arch/arm64/configs/rockchip_linux_defconfig