RK3568 Linux驱动学习——Linux驱动开发准备工作

前言

在正式开始学习 Linux 驱动开发之前,有一些准备工作要先处理好,比如交叉编译器安装,Linux 内核与设备树的确定,ADB 使用等

Linux 内核编译

编译 Linux 内核

正点原子出厂 SDK 包中的 Linux 内核编译方法之前已经有写过一个笔记,可以在我的主页翻来看一下。

最终烧写到开发板里面的是编译出来的 boot.img 文件,boot.img 就是将编译出来的 Image 和 rk3568-atk-evb1-ddr4-v10-linux.dtb 打包在一起,rk3568-atk-evb1-ddr4-v10-linux.dtb 就是 arch/arm/boot/dts/ rk3568-atk-evb1-ddr4-v10-linux.dts 设备树文件编译出来的。所以后面如果要修改设备树,那么修改的就是 rk3568-atk-evb1-ddr4-v10-linux.dts 这个文件。根据 MIPI 屏幕分辨率大小,修改 rk3568-screen_choose.dtsi 这个设备树文件,开启对应的宏。

关闭内核 log 时间戳

出厂系统默认是有时间戳的,如下图所示:

如需要需要关闭,可以通过配置内核将其关闭,配置路径如下:

进入 kernel,执行下面的命令配置内核。

bash 复制代码
make ARCH=arm64 rockchip_linux_defconfig

打开图形菜单,执行下面的指令。

bash 复制代码
make ARCH=arm64 menuconfig

按如下步骤取消选中内核打印。

|----------------------------------------------------------------------------------------------|
| -> Kernel hacking -> printk and dmesg options ->Show timing information on printks //取消选中 |

如下图所示:

重新编译并烧写内核即可。

根文件系统确认

创建 /lib/modules/4.19.232 目录

需要在根文件系统中创建 /lib/modules/4.19.232 目录,因为后面驱动开发都是将驱动编译成模块,然后放到/lib/modules/4.19.232 目录中。其中 4.19.232 是所使用的 Linux 内核版本号,RK3568 所使用的 linux 内核版本号为 4.19.232,所以就是 /lib/modules/4.19.232 目录。

出厂系统有/lib 这个目录,所以需要创建/lib/modules 目录。再在/lib/modules 里面创建一个名为"4.19.232"子目录就行了,若系统有/lib/modules/4.19.232 目录,则无需要创建!完成后如下图所示:

检查相关命令是否存在

需要使用 depmod、modprobe 或 insmod 这三个命令来加载驱动模块,所以根文件系统要存在这两个命令。卸载驱动模块的时候需要用到 rmmod 命令,所以需要确保 depmod、modprobe、insmod 和 rmmod 这四个命令都存在。

Ubuntu 下使用 ADB 向开发板发送文件

一般都是在 Ubuntu 下进行驱动和应用的编写与编译,最终肯定要将编译出来的应用文件或驱动文件发送到开发板中运行测试。

在驱动开发中,需要使用 adb 将开发板连接到 Ubuntu 下,然后使用如下 "adb push" 命令将文件通过 adb 发送到开发板。

  1. 开发板通过 APB 连接到 Ubuntu

首先使用 adb 命令将开发板连接到 Ubuntu,先用 "adb devices" 命令查看一下能不能找到开发板,如果能找到的话就会例举出当前 Ubuntu 下所有连接的 adb 设备,如下图所示:

可以随便创建一个 "adbtest.txt" 的空文件,然后将这个文件通过 "adb push" 发送到开发板中,输入如下命令:

bash 复制代码
adb push adbtest.txt /lib/modules/4.19.232/

从上图可以看出,adbtest.txt 文件已经 push 成功 。 到开发板查看一下 /lib/modules/4.19.232 目录下是否有 adbtest.txt 这个文件,如下图所示:

安装驱动开发所使用交叉编译器

编译驱动肯定要用到交叉编译器,虽然 SDK 包里面已经提供了交叉编译器,但是需要先编译整个 SDK 包,而且里面的交叉编译期用起来也不方便,所以正点原子专门定制了一套交叉编译器,直接安装就可以很方便的使用

输入如下命令,

bash 复制代码
./atk-dlrk3568-toolchain-arm-buildroot-linux-gnueabihf-x86_64.run

当出现 "Enter target directory for toolchain (default: /opt/atk-dlrk3568-toolchain):" 时,表示让你确认安装路径,默认安装路径是/opt/atk-dlrk356x-toolchain,不要修改这个路径,直接按下回车键使用这个默认路径即可。如下图所示:

最后确认并输入密码,即可完成安装:

安装完成以后可以进入到/opt/atk-dlrk356x-toolchain/bin/目录下,看一下安装好的交叉编译器,如下图所示:

注意,这里就不能直接通过输入"aarch64-buildroot-linux-gnu-gcc -v" 这样来使用交

叉编译器了,而是需要输入绝对路径,也就是:

bash 复制代码
/opt/atk-dlrk356x-toolchain/bin/aarch64-buildroot-linux-gnu-gcc -v

若要卸载交叉编译器,进入安装目录 /opt 下直接删除即可,命令如下:

bash 复制代码
sudo rm -f atk-dlrk356x-toolchain/
相关推荐
遇见尚硅谷18 分钟前
C语言:*p++与p++有何区别
c语言·开发语言·笔记·学习·算法
艾莉丝努力练剑1 小时前
【数据结构与算法】数据结构初阶:详解排序(二)——交换排序中的快速排序
c语言·开发语言·数据结构·学习·算法·链表·排序算法
jz_ddk1 小时前
[HarmonyOS] 鸿蒙LiteOS-A内核深度解析 —— 面向 IoT 与智能终端的“小而强大”内核
物联网·学习·华为·harmonyos
试着1 小时前
零基础学习性能测试第五章:Tomcat的性能分析与调优-Tomcat原理,核心配置项,性能瓶颈分析,调优
学习·零基础·tomcat·性能测试
老虎06272 小时前
JavaWeb(苍穹外卖)--学习笔记13(微信小程序开发,缓存菜品,Spring Cache)
笔记·学习·微信小程序
Johny_Zhao2 小时前
CentOS Stream 9上部署FTP应用服务的两种方法(传统安装和docker-compose)
linux·网络安全·信息安全·kubernetes·云计算·containerd·ftp·yum源·系统运维
守望时空332 小时前
RustDesk搭建指南
linux
C++ 老炮儿的技术栈3 小时前
在 Scintilla 中为 Squirrel 语言设置语法解析器的方法
linux·运维·c++·git·ubuntu·github·visual studio
@蓝莓果粒茶3 小时前
LeetCode第350题_两个数组的交集II
c++·python·学习·算法·leetcode·职场和发展·c#
白鹭3 小时前
基于LNMP架构的分布式个人博客搭建
linux·运维·服务器·网络·分布式·apache