RK3588 驱动程序编译进内核

138 阅读3分钟

移植驱动之前,需要搭建好SDK 或者BSP开发环境的前期工作,本文是基于SDK移植自己编写的虚拟摄像头驱动。

1.找到驱动文件应该在的地方

SDK/Kernel/drivers的文件目录下有很多瑞芯微官方提供的驱动程序,可以看出官方提供可以直接移植的驱动库,但是文件分类对于新手有点混乱,驱动程序所在路径并不好找。

① 可以根据docs下的文档来获取驱动程序的路径,如:

doc.png

在这个文档里,可以找到瑞芯微SDK里关于Camera软件驱动的目录

② 还可以在kernel 目录下,终端输入 make menuconfig指令

menuconfig查找.png 通过"/"键通过驱动名查找同文件目录下的Kconfig文件来确认驱动文件所在的位置。

2.驱动文件的编写

Linux的驱动程序一般是由C语言编写的。C语言提供了直接操作硬件、内存和系统资源的能力,同时与 Linux 内核的 API 和系统调用接口紧密结合,因此它是编写 Linux 驱动程序的主要语言。

·······················

3.内核编译配置

驱动程序直接拷贝到对应的目录,此时并不能直接编译到内核里,需要修改改 Makefile 和 Kconfig,确保内核编译的时候正确的注册要移植的驱动程序。

  • Makefile是一个自动化构建工具,用于定义和管理源代码的编译和链接过程。在 Linux 驱动开发中,Makefile 主要用于指导如何编译和生成内核模块。它帮助开发者自动化编译流程,避免手动输入多个命令,从而提高开发效率。

    可以在当前目录下,用VI编译器打开Makefile文件

    Makefile.png

    obj-$(CONFIG_VIDEO_MIPIRX) += mipirx.o

    CONFIG_VIDEO_MIPIRX是在Kconfig 中定义的配置选项

    += mipirx.o 表示将 mipirx.o 内核编译后会生成.o文件

  • Kconfig 是 Linux 内核配置系统的一个核心文件格式,用于定义内核中模块(驱动、功能选项等)的配置选项。它配合 make menuconfig 等工具,允许开发者选择启用或禁用特定的功能模块,从而决定哪些代码会被编译进内核或作为模块构建。

    image.png

    这段 Kconfig 文件定义了一个名为 VIDEO_MIPIRX 的内核配置选项。启用这个选项会编译 mipirx 驱动。 这样,mipirx 驱动就可以出现在 make menuconfig 的图形界面中

menuconfig配置.png

[*] 表示驱动是内核编译 [M]表示驱动是作为内核模块编译 最后会生成生成 .config 文件

最后再进行内核编译,就可以把目标驱动程序编译进内核。

5.驱动程序成功载入验证

dmesg | grep + 驱动名,即可验证

  • 遇到的一些问题:

make menuconfig 会把配置保存到.config 文件中,有时候内核编译没有同步.config的配置, 需要手动把.config文件里的配置手动更新到内核编译所用到的defconfig文件中

N~JQR{S%W1RMCAA5FW288.png

在kernel目录下:

cp .config arch/arm64/configs/rockchip_linux_defconfig