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/
相关推荐
阿巴~阿巴~26 分钟前
基于UDP协议的英汉翻译服务系统:从网络通信到字典查询的完整机制
linux·服务器·网络·网络协议·udp协议·套接字绑定·英汉翻译服务系统
阿巴~阿巴~29 分钟前
简易回声服务器实现与网络测试指南
linux·服务器·网络·udp协议·网络测试·udp套接字编程
凡间客3 小时前
Ansible安装与入门
linux·运维·ansible
君以思为故3 小时前
认识Linux -- 进程概念
linux·服务器
_OP_CHEN3 小时前
Linux网络编程:(八)GCC/G++ 编译器完全指南:从编译原理到实战优化,手把手教你玩转 C/C++ 编译
linux·运维·c++·编译和链接·gcc/g++·编译优化·静态链接与动态链接
lkbhua莱克瓦243 小时前
Java基础——方法
java·开发语言·笔记·github·学习方法
阿乐艾官4 小时前
【十一、Linux管理网络安全】
linux·运维·web安全
p66666666684 小时前
STM32-bootloader引导程序跳转机制笔记
笔记·stm32·嵌入式硬件
Fantasydg5 小时前
Servlet学习
学习·servlet
雍凉明月夜5 小时前
Ⅰ人工智能学习的核心概念概述+线性回归(1)
人工智能·学习