当前位置: 首页 > backend >正文

RK3568 Debian调试记录

文章目录

  • 1、环境介绍
  • 2、前言
  • 3、debian目录结构
    • 3.1、脚本调用顺序
  • 4、编译debian
    • 4.1、构建debian编译所需的环境
    • 4.2、编译debian
    • 4.3、打包
  • 5、系统启动
  • 6、debian适配
    • 6.1、新增板级配置单
    • 6.2、USB
    • 6.3、Wi-Fi / BT
    • 6.4、屏幕旋转
    • 6.5、触摸旋转
    • 6.6、时钟
  • 7、测试
  • 8、总结

1、环境介绍

硬件:飞凌ok3568-c开发板

软件:原厂rk356x sdk

2、前言

rk不仅支持buildroot,还支持debian。所以本文将记录适配debian的过程。

3、debian目录结构

在sdk里,有一个debian目录,主要存放用于构建debian系统所需的文件:

cohen@ubuntu:~/platform/rk356x-sdk/debian$ tree -L 1
.
├── mk-base-debian.sh
├── mk-image.sh
├── mk-iso-debian.sh
├── mk-rootfs-bullseye.sh
├── mk-rootfs.sh
├── overlay
├── overlay-debug
├── overlay-firmware
├── packages
├── packages-patches
├── post-build.sh
├── readme.md
├── scripts
└── ubuntu-build-service

mk-base-debian.sh:配置编译基础系统镜像,最后生成一个linaro-bullseye-alip-20250421-1.tar.gz。

mk-image.sh:用于生成最终的系统镜像文件。

mk-iso-debian.sh:用于生成 Debian 的 ISO 镜像文件。

mk-rootfs-bullseye.sh:解压linaro-bullseye-alip-20250421-1.tar.gz,完善构建rootfs。

mk-rootfs.sh:实际也是调用mk-rootfs-bullseye.sh。

overlay:包含一些覆盖文件,用于在构建过程中覆盖或添加到目标文件系统中。

overlay-debug:包含一些覆盖文件,用于在构建过程中覆盖或添加到目标文件系统中。

overlay-firmware:包含一些覆盖文件,用于在构建过程中覆盖或添加到目标文件系统中。

packages:包含预编译的 Debian 包,这些包在构建过程中会被安装到目标文件系统中。

packages-patches:包含用于修补软件包的补丁文件。

post-build.sh:在构建完成后执行的脚本,用于进行一些清理或额外的配置。

readme.md:使用说明。

scripts:包含一些辅助脚本,用于执行特定任务。

ubuntu-build-service:包含用于构建 Ubuntu 系统的配置和服务文件。

3.1、脚本调用顺序

<sdk>/common/build-hooks/30-rootfs.sh脚本的build_debian()函数作为起始来看的话,脚本的调用顺序如下:

30-rootfs.sh check-debian.sh				# 检查当前环境是否满足构建 Debian Live 镜像的依赖条件mk-base-debian.sh 		# 配置编译基础系统镜像,最后生成一个linaro-bullseye-alip-20250421-1.tar.gzmk-rootfs-bullseye.sh # 解压linaro-bullseye-alip-20250421-1.tar.gz,完善rootfsmk-image.sh 					# 生成最终的系统镜像文件./post-build.sh../device/rockchip/common/post-build.sh

4、编译debian

4.1、构建debian编译所需的环境

cohen@ubuntu:~/platform/rk356x-sdk/$ sudo dpkg -i debian/ubuntu-build-service/packages/*
cohen@ubuntu:~/platform/rk356x-sdk/$ sudo apt-get install -f

4.2、编译debian

cohen@ubuntu:~/platform/rk356x-sdk/$ ./build.sh debian

4.3、打包

编译成功后,执行如下命令打包成烧录镜像:

cohen@ubuntu:~/platform/rk356x-sdk/$ ./build.sh firmware

5、系统启动

将新的镜像烧录到板卡,可以看到系统正常启动:

6、debian适配

以下只是列出在适配过程中需要完善的项。对于片上外设来说,之前buildroot适配的大部分东西是可以直接用的。对于芯片自带的硬件,rk提供的debian也早已做好了适配。

6.1、新增板级配置单

RK SDK 提供了多种版本的 Debian 系统,适用于不同的硬件平台和需求。这些版本可以根据功能和架构分为以下几类:

功能版本:

  • base:基础版本(也带桌面了)。
  • gnome:桌面版本,使用 GNOME 桌面环境。
  • xfce:桌面版本,使用 XFCE 桌面环境。
  • lxde:桌面版本,使用 LXDE 桌面环境。

架构版本:

  • arm64:适用于 64 位 ARM 架构的处理器,如 RK3568、RK3588 等。
  • armhf:适用于 32 位 ARM 架构的处理器,支持硬件浮点运算。

所以这里为这四种不同功能版本的debian系统分别创建一个配置单,结果如下图:

其实也没做什么,这4个不同的配置单只是用来选择配置编译哪一个debian基础系统镜像,以forlinx_rk3568_c_debian_desktop_defconfigforlinx_rk3568_c_debian_base_defconfig为例:

这几个宏变量来自sdk menuconfig,需自行在/common/configs/下定义。如:

然后根据自己的需求修改debian相关的构建脚本即可。这里列出我的修改:

mk-rootfs:

mk-base-debian.sh:

mk-rootfs-bullseye.sh:

6.2、USB

鼠标键盘正常。

插入U盘后,可以正常识别,但没有自动挂载。这里添加一个udev规则文件来实现自动挂载和卸载u盘。这里折腾了两个晚上,udev规则文件调用的挂载脚本中的挂载命令要使用systemd-mount,不能使用mount。

最终的udev规则文件/etc/udev/rules.d/99-usb-mount.rules如下:

ACTION=="add",KERNEL=="sd*",SUBSYSTEM=="block",ENV{ID_FS_TYPE}!="",ENV{label_uuid_name}="%k", RUN+="/usr/local/bin/auto-mount.sh add /dev/%k %E{label_uuid_name}"
ACTION=="remove",KERNEL=="sd*",SUBSYSTEM=="block",ENV{ID_FS_TYPE}!="",ENV{label_uuid_name}="%k", RUN+="/usr/local/bin/auto-mount.sh remove /dev/%k %E{label_uuid_name}

挂载卸载脚本/usr/local/bin/auto-mount.sh如下:

#!/bin/sh
{
echo "=======$(date)======="
echo "Action: $1 | Device: $2 | MINOR: $3"if [ $# -ne 3 ]; thenexit 1
fiexport XDG_RUNTIME_DIR=/run/user/0MAJOR_PATH=/media
MINOR_PATH=$3if [[ ! -b "$2" && "$1" == "add" ]]; thenecho "ERROR: Device $2 not found after checks!"exit 2
fi
if [ "$1" = "add" ]; thenmkdir -p $MAJOR_PATH/$MINOR_PATH/usr/bin/systemd-mount -o relatime,sync --no-block --collect $2 $MAJOR_PATH/$MINOR_PATH 2>&1if [ $? -ne 0 ]; thenrmdir $MAJOR_PATH/$MINOR_PATHfi
#	udisksctl mount -b "$2" --no-user-interaction 2>&1
elif [ "$1" = "remove" ]; thenif [ -d $MAJOR_PATH/$MINOR_PATH ]; then/usr/bin/systemd-mount --umount $MAJOR_PATH/$MINOR_PATHrmdir $MAJOR_PATH/$MINOR_PATHfi
#	udisksctl unmount -b "$2" 2>&1
fi
echo "Exit Code: $?"
} >> /tmp/mount.log 2>&1

参考文章:https://blog.csdn.net/m0_69014205/article/details/147076378?spm=1001.2014.3001.5502

6.3、Wi-Fi / BT

无线wifi/bt模块用的海华awcm358sm。实测debian系统启动后没有自动加载驱动。这里需要把内核模块安装到debian rootfs,然后设置开启自动加载驱动。

  1. 将内核模块安装到debian rootfs:
run_command $KMAKE modules_install INSTALL_MOD_PATH=$RK_SDK_DIR/debian/overlay/usr

  1. 在debian系统中,/etc/modules-load.d/是一个用于配置内核模块在启动时自动加载的目录。在该目录下创建一个modules.conf,并填写开机启动时要加载的驱动。:

/lib/systemd/systemd-modules-load.service服务在系统启动时会读取modules-load.d下的所有配置文件,并根据文件中的列表加载指定的内核模块。

这里可以稍微介绍一下,是如何找到moal.ko的。实际就像平时执行modprobe xx.ko命令时,会先在/lib/modules/$(uname -r)/目录下找到modules.alias.bin和module.dep.bin。里面记录驱动的依赖关系和存储位置。如下是module.dep的内容(module.dep.bin是module.dep的二进制文件):

6.4、屏幕旋转

目前适配所使用debian的桌面环境为xfce,使用的是X11显示架构。对于屏幕旋转,修改/etc/X11/xorg.conf.d/20-modesetting.conf

可选值:normal、left、right、inverted

6.5、触摸旋转

屏幕旋转后,鼠标是可以正常使用的。但触摸的旋转还需要修改:

sudo cp /usr/share/X11/xorg.conf.d/40-libinput.conf /etc/X11/xorg.conf.d/
sudo vi /etc/X11/xorg.conf.d/40-libinput.conf
Option "CalibrationMatrix" "-1 0 1 0 -1 1 0 0 1"	# 180度旋转

6.6、时钟

现在的时间比北京时间少8小时。需要设置时区。直接修改配置脚本:

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

关于适配先到此为止,后续有其它内容再补充。

7、测试

进入系统时的桌面:

网络:

小破站播放视频:

蓝牙:

目前使用笔记本电脑配对测试不成功。到时候使用安卓手机再试试。

8、总结

嵌入式Linux学习交流群:424571391
本人也是第一次接触发行版linux。可能对于一些测试指标有所忽略,欢迎指点。另一方面是rk对debian的支持已经很完善了,规避了很多问题。后面会继续移植ubuntu,更全面的体验发行版linux的移植过程。

http://www.xdnf.cn/news/2316.html

相关文章:

  • PROFINE转EtherCAT网关模块实现西门子PLC与欧姆龙NJ系列PLC协议转换实战
  • 用Xshell8配置密钥登陆
  • 正则表达式三剑客之——grep和sed
  • 04-谷粒商城笔记
  • 05_BootStrap
  • [MySQL数据库] 事务与锁
  • DIY 3D打印机 原理及步骤概况
  • Java----super 关键字
  • 《ATPL地面培训教材13:飞行原理》——第13章:高速飞行
  • Linux进程解析
  • 信息系统项目管理师备考计划
  • 摸鱼屏保神器工具软件下载及使用教程
  • C#里使用libxl来加载网络传送过来的EXCEL文件
  • 计算机二级MS Office第一套演示文稿
  • 图解 Redis 事务 ACID特性 |源码解析|EXEC、WATCH、QUEUE
  • 【数据湖】Time Travel时间旅行
  • 每日学习Java之一万个为什么?
  • 3.1 掌握RDD的创建
  • 英语学习4.26
  • 进行物联网安全PoC时的注意事项
  • 【Java-Day 1】开启编程之旅:详解Java JDK安装、环境配置与运行HelloWorld
  • 用c语言实现——一个动态顺序存储的串结构
  • 山东大学软件学院项目实训-基于大模型的模拟面试系统-前端美化滚动条问题
  • 2025年4月25日第一轮
  • Vue Composition API 与 Options API:全面对比与使用指南
  • HTML快速入门-4:HTML <meta> 标签属性详解
  • 【漫话机器学习系列】224.双曲正切激活函数(Hyperbolic Tangent Activation Function)
  • 现在流行的linux面板管理工具
  • 三款实用工具推荐:图片无损放大+音乐格式转换+音视频格式转换!
  • TCGA 数据下载与生存分析 //todo