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/
相关推荐
梁洪飞5 分钟前
内核的schedule和SMP多核处理器启动协议
linux·arm开发·嵌入式硬件·arm
_运维那些事儿18 分钟前
VM环境的CI/CD
linux·运维·网络·阿里云·ci/cd·docker·云计算
云小逸22 分钟前
【nmap源码学习】 Nmap网络扫描工具深度解析:从基础参数到核心扫描逻辑
网络·数据库·学习
Y1rong1 小时前
linux之文件IO
linux
Trouvaille ~1 小时前
【Linux】UDP Socket编程实战(一):Echo Server从零到一
linux·运维·服务器·网络·c++·websocket·udp
嵌入小生0071 小时前
Shell | 命令、编程及Linux操作系统的基本概念
linux·运维·服务器
范纹杉想快点毕业2 小时前
实战级ZYNQ中断状态机FIFO设计
java·开发语言·驱动开发·设计模式·架构·mfc
一只小小的芙厨2 小时前
寒假集训笔记·树上背包
c++·笔记·算法·动态规划
-Try hard-3 小时前
Linuv软件编程 | Shell命令
linux·运维·服务器
释怀不想释怀3 小时前
Linux快捷键,软件安装启动
linux·运维·服务器