欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > 泰山派开发板测试,仅记录

泰山派开发板测试,仅记录

2025/2/12 12:40:52 来源:https://blog.csdn.net/qq_42190402/article/details/145545485  浏览:    关键词:泰山派开发板测试,仅记录

写在前面

ubuntu交叉编译qt环境直接参考野火

5. 交叉编译Qt库(Qt6) — [野火]嵌入式Qt应用开发实战指南—基于LubanCat-RK开发板 文档

该贴仅留作失败记录。

 我用的立创官方的ubuntu20.04_hdmi_20240220_RNDIS_update.img 烧录进开发板。

Ubuntu 登录界面初始化顺序

        启动引导程序(GRUB):加载 Linux 内核

        内核启动:加载驱动程序,启动 systemd

        systemd 启动:根据配置文件启动显示管理器服务(如 GDM3)。

        显示管理器启动:启动 X Server,加载图形环境,显示登录界面。

        用户登录:用户输入用户名和密码后,启动用户会话。

        整个过程由 GRUB → 内核 → systemd → 显示管理器 → 用户会话依次完成。

        用户登录后

        用户会话管理器:启动桌面环境的核心组件。

        桌面环境:加载用户选择的桌面环境(如 GNOME、KDE 等)。

        用户配置:恢复用户的个性化设置。

        后台服务:启动用户会话所需的后台服务

        用户脚本:执行用户自定义的登录脚本

常用指令 

//查看内存大小
free -h//查看磁盘空间大小(emmc通常被识别为块设备,即磁盘空间)
df -h//基本挂载.把远程地址的data文件夹挂载到本地目录/mnt/nfs
mount -t nfs 192.168.1.10:/data /mnt/nfs//递归查找当前目录下的指定文件
find . -name "文件名"//查看软件路径
which 软件名//显示系统信息
uname -a//查看ubuntu系统版本.其实是看/etc/os-release
lsb_release -a

        vim中搜索内容,

正常模式下  /hello 就是搜索hello然后按n查找下个匹配项,N查找上个匹配项

显示屏和触摸

免驱显示屏的触摸驱动具有通用性,

主要是因为:

标准化的通信接口(如 I2C、SPI);

分层的驱动程序架构,使得硬件抽象层可以适配多种硬件;

广泛使用的通用触摸屏芯片(如 FT5426、GT9147);

操作系统的内置支持,使得常见设备可以自动识别并加载驱动程序;

硬件设计的通用性,使得不同厂商的触摸屏在功能和接口上具有相似性。

        要注意只有触屏没有按键,不会自动弹出虚拟键盘。

显示管理器

        在Linux系统中,显示管理器是负责显示登录界面并管理用户会话的软件

        常见的显示管理器包括

        LightDM、

        GDM(GNOME Display Manager)、

        SDDM(Simple Desktop Display Manager)等。

  ubuntu内置了LightDM与GDM2两种显示管理器,具体用的哪一种需要根据配置文件查看。

//查看当前运行的显示管理器
systemctl get-default

        如果输出类似于graphical.target,则表示系统处于图形界面模式。接下来,可以进一步确认显示管理器。

//查看当前系统的显示管理器服务
systemctl list-units --type=service | grep display-manager

        不行的话直接看配置文件,

cat /etc/systemd/system/display-manager.service

         我这里查配置文件,查到泰山派开发板ubuntu20.04显示管理器lightdm

显示服务器协议

        在聊显示管理器的时候,可能经常会看到waylandx11,这是两种不同的显示服务器协议。wayland新,x11传统。

        显示服务器协议用于窗口、图标、字体、颜色等东西的渲染,并负责图形相关硬件的兼容性和交互

桌面环境

        在linux的登录界面的右上角,可以手动选择桌面环境

        Ubuntu:默认桌面环境,通常是 GNOME,适合大多数用户。

        Ubuntu on Wayland:Ubuntu 桌面环境,使用 Wayland 协议。

        Xfce Session:轻量级桌面环境,适合老旧或资源有限的系统。

        Xubuntu Session:基于 Xfce,Ubuntu 官方变体,简洁且高效。

        其实就是分别基于X11桌面服务器协议或者不同的桌面环境。

        查看桌面环境的指令

echo $XDG_CURRENT_DESKTOP

        GNOME是常见的桌面环境。提供用户界面、窗口管理、文件管理、应用程序启动等功能。

        我测试时使用的系统查看到的桌面环境得到的是XUbuntu,是基于

        Xfce桌面环境的一个ubuntu轻量级发行版。

ubuntu自动登录(失败)

        linux出于安全性考虑,默认是必须使用密码登录的。

//查看当前运行的显示管理器
systemctl get-default

DM2显示管理器

ubuntu系统如何设置启动时不要输入开机密码_ubuntu关闭开机密码-CSDN博客

        修改/etc/gdm3/custom.conf配置文件。

LightDM显示管理器

Ubuntu跳过登录密码_ubuntu 开机不需要密码直接进去-CSDN博客

Ubuntu自动登录Xfce 设置指南:告别繁琐登录步骤 提升工作效率 - 云原生实践

如果上面集中免密登录桌面的方式不行的话,就看下一章节

关于登录权限

        在linux中,即使用相同的用户名登录,所得到的权限可能不同

        这是由Linux的权限管理机制用户组配置导致的。

//查看当前用户所属组
groups//查看权限掩码  如得到0002  每位代表 特殊/用户/组/其他 每位由二进制 读/写/执行 计算
//0002代表其他用户[不具有]写权限,即写权限被掩码掩盖
umask

         我测试时,使用管理员账号在桌面打开设置,按照前面博客的图形化设置方式来改,发现没有权限去设置自动登录。

        于是尝试直接用管理员权限打开设置,

sudo gnome-control-center  //注意这里的指令是针对gnome桌面的

        结果发现,设置自动登录是能设置了,

        重启的时候确实是不用密码了,

        但是一熄屏,还是需要登录密码。 

ARM Linux跳过login_linux 开机跳过 login-CSDN博客

Ubuntu开机自动登录(成功)

        有些文章说在设置里面改,我测试时用的系统是xubuntu,轻量版,设置里面连user栏都找不到。

        这个是不适用图形界面时的,tty界面登录

Ubuntu开机自动登录_ubuntu 自动登录-CSDN博客

        这个是使用界面时的, 

https://wenku.csdn.net/answer/7wnv1pn7om

ubuntu系统如何设置启动时不要输入开机密码_ubuntu设置开机不需要密码-CSDN博客

        稀奇古怪的,昨天明明试过上面文章的方法没成功,睡了一觉过来试了试又成功了.......

最后测试,在/etc/lightdm/lightdm.conf中添加了自动登录配置

        关于Seat的解释:

        在多【座位】环境中,系统可以支持多个独立的用户同时使用不同的硬件设备。例如,一个系统可以连接多个显示器、键盘和鼠标,每个组合形成一个【座位】。

ubuntu跳过默认桌面显示,直接启动图形应用程序

ubuntu开机跳过输入密码登录和默认桌面显示,直接启动图形应用程序,替换默认图形桌面_ubuntu20 程序替换桌面-CSDN博客

远程连接ubuntu20.04系统开发板

2025.2.11测试失败,原因未知

用mobaxterm做ssh远程连接时没过几秒就自动断开,

win10的xrdp远程连接也失败了

参考

win10系统远程登录Ubantu桌面_win10连接ubuntu远程桌面-CSDN博客

在板子上安装xrdp,(一种RDP开源服务器),并设置该服务为开机自启。 

可能存在登陆闪退问题

windows远程桌面登录ubuntu,黑屏闪退,_window 远程ubuntu闪退-CSDN博客

或者直接SSH远程连接。

2025.2.11 ,参考

立创泰山派学习04-ubuntu的VNC远程桌面 - zbl1118 - 博客园

 VNC远程连接成功

软件盘

需求

        现在需求是,开机后登录要输入密码,产品不接键盘只有个触摸屏

        如果只用软件盘,开机登录用户的时候软件盘不会自动弹出

        用统不带密码,但是软件带密码的方式

介绍

        在Linux系统中,特别是在图形用户界面(GUI)环境下,通常不直接支持在登录界面(如GDM、LightDM等桌面环境的登录屏幕)弹出软键盘(虚拟键盘)。

        这是因为登录界面通常设计为快速、安全的登录方式,不希望引入额外的输入设备(如软键盘)来降低安全性。 

步骤和结果

        ubuntu自带 onboard键盘,登陆界面右上角有个小人,点一下可以勾选开机自启动虚拟键盘

        没搞出来。

        屏幕7寸,分辨率不够,键盘没正常显示。

        导致

        可以跳过开机的登录界面,但是不能息屏,因为息屏也会进入用户登录界面

分辨率不够,键盘没正常显示

杂问题 

        sudo apt install时出现  正在等待缓存锁,无法获得锁

        通常是因为系统中另一个进程(如自动更新程序unattended-upgr)正在使用APT包管理器,导致锁文件被占用。

        查看占用锁的进程ID

ps aux | grep aptps:是“process status”的缩写,用于显示当前系统中运行的进程信息。
aux:是 ps 命令的一个选项组合,具体含义如下:a:显示所有终端上的进程,包括其他用户的进程。u:显示进程的用户(所有者)信息。x:显示没有控制终端的进程(例如后台运行的进程)grep aptgrep:是一个强大的文本搜索工具,用于在文件或输出中搜索匹配特定模式的行。apt:是 grep 的搜索模式,表示只显示包含字符串“apt”的行。
grep apt 的作用是从 ps aux 的输出中筛选出包含“apt”的行,从而找到与 apt 相关的进程

        终止进程

sudo kill -9 processnumber
//kill 是一个用于发送信号给进程的命令。
//默认情况下,kill 发送的是 SIGTERM(终止信号),允许进程优雅地关闭。
//然而,kill 也可以发送其他信号,具体取决于你使用的选项。
// -9
//作用:-9 是一个选项,表示发送 SIGKILL 信号给目标进程。
//SIGKILL 是一个强制终止信号,它不能被进程//捕获或忽略。
//这意味着进程将立即被终止,而不会有机会进行清理操作。

        或者针对 无法获得锁 /var/lib/dpkg/lock-frontend”错误时 ,尝试 sudo apt update。

——————————————————————————————

下面是废稿,仅记录

 QT6.xxx源码包的交叉编译

源码包定义

        qt-everywhere-src-xxx 是一个源码包,而不是 SDK。它提供了 Qt 6.6.3 的全部源代码,用户需要自行编译生成库文件和工具。

源码包与SDK的关系:

        源码包可以用于构建SDK:开发者可以从源码包开始,编译生成 SDK 中的库文件和工具

        SDK可以包含源码包:有些 SDK 会提供源码包作为可选组件,方便用户进行定制。

源码包交叉编译流程

        QT官网可以直接下载源码包。

        子模块支持单独下载、编译、安装。

        single是整包的,可通过配置文件对子模块进行编译、安装。

参考:

单独编译QT子模块_qt单独编译某个模块-CSDN博客

How to Build, Install and Setting Qt Application/zh - FriendlyELEC WiKi

        这里用整包举例,参考

将qt程序交叉编译到arm架构上用需要以前在arm架构上配置环境吗_香奈儿的技术博客_51CTO博客

        防止网页丢失我打印了PDF放到博客文件上。

        我在虚拟机ubuntu18.04.6版本上对源码包进行交叉编译。

解压

tar -xvf解压,-c可指定解压目录
可发现除了各组件外,有一个qtbase

        qtbase是QT的基础模块目录,

        在源码目录和qtbase目录下,都有一个configure文件。

        在Qt源码目录下执行:

./configure --help

        会打印出帮助信息,在/qtbase目录下使用上述命令同样会打印帮助信息,只是在此处打印出的信息比在源码目录下使用confiigure --help命令打印出的帮助信息少。

        当我们在Qt源码目录下执行./configure命令时,可以配置整体编译方案,我们则可以在此处设置想要编译构建的参数和模块。

        在/qtbase目录下,执行./configure命令时,配置的是该目录下的Qt基本模块

从源码目录结构,可以知道在qtbase模块下包含许多子模块

      qtbase/mkspecs目录下,存放的是跨平台时,与具体平台编译器集合的构建环境关联的目录。

qtbase/mkspecs,是与具体平台编译器集合的构建环境关联的目录

        且与架构相关联的目录中存放了两个文件:

qmake.conf:该文件是关于具体架构的qmake配置描述,
qplatformdefs.h 是一个头文件,用于描述具体模块层级包含的相关头文件依赖。

修改 qmake.conf 文件

一般来讲需要修改的就是红圈处,分别指明 [编译阶段工具]和 [链接阶段工具]

        在上述图片中,等号右边表示具体的编译构建工具名称。需要提前安装对应的编译套件且将他们添加到环境变量中(如果没有添加,可以以绝对路径来描述)。

编译构建qtbase

        将终端切换到qtbase目录下。

         按照上小节,修改qmake.conf文件中的编译器链名称与自己所用的相符。

        在终端使用下列命令:

ninja版本

#!/bin/bash
# 指定使用的 shell 解释器为 bash# 定义安装前缀路径,确保是绝对路径
PREFIX=/home/a123/woniu/qt-everywhere-src-6.8.2/qtbase/install
# 设置软件安装的目录路径# 定义交叉编译平台
CROSS_PLATFORM="linux-aarch64-gnu-g++"
# 设置交叉编译的目标平台# 创建一个新的构建目录
mkdir -p build
cd build# 检查并安装 Ninja
if ! command -v ninja &> /dev/null; thensudo apt updatesudo apt install ninja-build
fi# 运行 configure 脚本
/opt/cmake-3.31.0-rc2-linux-x86_64/bin/cmake \-DQT_INTERNAL_CALLED_FROM_CONFIGURE:BOOL=TRUE \-DBUILD_SHARED_LIBS=ON \-DCMAKE_INSTALL_PREFIX="$PREFIX" \-DQT_QMAKE_TARGET_MKSPEC="$CROSS_PLATFORM" \-DCMAKE_BUILD_TYPE=Release \-DINPUT_opengl=no \-DINPUT_strip=yes \-DFEATURE_system_sqlite=OFF \-DQT_NO_X86_INTRINSICS=ON \-DCMAKE_CXX_COMPILER=/usr/bin/aarch64-linux-gnu-g++-8 \-DCMAKE_C_COMPILER=/usr/bin/aarch64-linux-gnu-gcc-8 \-DCMAKE_ASM_COMPILER=/usr/bin/aarch64-linux-gnu-gcc-8 \
#-G 'Ninja' \ /home/a123/woniu/qt-everywhere-src-6.8.2/qtbase# 检查 configure 命令是否成功执行
if [ $? -eq 0 ]; thenecho "Configure successful."
elseecho "Configure failed."exit 1
fi# 编译项目(如果需要)
# ninja# 安装项目(如果需要)
# ninja install

unix makefiles版本

#!/bin/bash
# 指定使用的 shell 解释器为 bash# 定义安装前缀路径,确保是绝对路径
PREFIX=/home/a123/woniu/qt-everywhere-src-6.8.2/qtbase/install
# 设置软件安装的目录路径# 定义交叉编译平台
CROSS_PLATFORM="linux-aarch64-gnu-g++"
# 设置交叉编译的目标平台# 删除旧的构建目录
rm -rf build# 创建一个新的构建目录
mkdir -p build
cd build# 检查并安装 make(如果需要)
if ! command -v make &> /dev/null; thensudo apt updatesudo apt install make
fi# 运行 configure 脚本
/opt/cmake-3.31.0-rc2-linux-x86_64/bin/cmake \-DQT_INTERNAL_CALLED_FROM_CONFIGURE:BOOL=TRUE \-DBUILD_SHARED_LIBS=ON \-DCMAKE_INSTALL_PREFIX="$PREFIX" \-DQT_QMAKE_TARGET_MKSPEC="$CROSS_PLATFORM" \-DCMAKE_BUILD_TYPE=Release \-DINPUT_opengl=no \-DINPUT_strip=yes \-DFEATURE_system_sqlite=OFF \-DQT_NO_X86_INTRINSICS=ON \-DCMAKE_CXX_COMPILER=/usr/bin/aarch64-linux-gnu-g++-8 \-DCMAKE_C_COMPILER=/usr/bin/aarch64-linux-gnu-gcc-8 \-DCMAKE_ASM_COMPILER=/usr/bin/aarch64-linux-gnu-gcc-8 \-G 'Unix Makefiles' \..# 检查 configure 命令是否成功执行
if [ $? -eq 0 ]; thenecho "Configure successful."
elseecho "Configure failed."exit 1
fi# 编译项目(如果需要)
# make -j12# 安装项目(如果需要)
# sudo make install

        清理之前构建时导致的缓存

rm -rf CMakeCache.txt CMakeFiles/

        还不行就删除build文件夹 

        这些命令其实是通过在源码目录中,运行 ./configure 脚本(将以上命令做成configure.sh脚本,先执行该脚本),并传递所需的参数,实现对qt库的编译和安装过程的配置的。

上面那些指令其实就是修改了这个configure脚本

        我这里出现了两个错误

        一个是Cmake版本过低,

        Qt 6 需要CMake 3.16 或更高版本来支持其构建过程。

        解决

sudo apt update
sudo apt install cmake

        不行的话就:

参考:

cmake --version//卸载旧版cmake
sudo apt remove cmake//下载源码包,注意不要使用受限制的网络,例如各种内部网络,可能会下载失败
//wget下载的文件默认保存到当前工作目录
wget https://cmake.org/files/v3.31///解压安装包
tar -zxvf cmake-3.24.0.tar.gz//进入目录
cd cmake-3.24.0//执行编译安装
./bootstrap && make && sudo make install

        由于官网下要连github,这里下好放资源了 。

        下载好后参考下面的文章安装好cmake,

Ubuntu 18.04 更新 cmake 到最新版本 3.31.2_cmake最新版本-CSDN博客‘

        错误

        一个是无法读取位于 qtbase/config.opt 的配置文件。

        config.opt通常是configure脚本生成的。

        解决

        cmake更新后,文件正常生成,自动解决。

        注意我上面用的是ninja生成器,而不是Make生成器

        使用的是 CMake 直接配置,可以指定 -G 'Ninja' 参数,,来生成 Ninja 构建文件。(CMake和Ninja配合使用)

        当你使用 CMake 并指定 -G 'Ninja' 作为生成器时,CMake 会在指定的构建目录中生成一个名为 build.ninja 的文件。这个文件包含了构建项目所需的所有规则和依赖关系,由 Ninja 构建系统使用。

ninja相关配置文件在Build文件夹下

注意我这里使用的是ninja,和参考博客略有区别

        cd build,到build目录下,然后 ninja make -j8

(.........好吧,我用ninja报错了,说ninja有个日志组件有问题要改版本,结果github连不上。又灰溜溜用回了 

  -G 'Unix Makefiles' \

..........配置文件已经改了备注,大家可以自行测试...')

构建成功

        修改CMakeList.txt,使用c++17标准,GCC 9 及以上版本完全支持 <filesystem>,无需手动链接stdc++fs库。因此编译器改成GCC9。(qmake.conf记得改)

# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause# Need an explicit call at the top level. This is the absolute minimum version
# needed to configure the project with any combination of enabled features.
# The call to qt_build_repo_begin() will upgrade policies further.
#
# The absolute minimum version for building Qt is 3.16 because for metatype.json generation, we
# depend on being able to find the location of json files created by AUTOMOC/moc.
cmake_minimum_required(VERSION 3.16)# Get the repo version and CMake policy details
include(.cmake.conf)include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/QtBaseHelpers.cmake)qt_internal_check_if_path_has_symlinks("${CMAKE_BINARY_DIR}")# This needs to be called before the first project() call.
qt_internal_qtbase_run_autodetect()# This call will load any provided cmake toolchain file.
project(QtBaseVERSION "${QT_REPO_MODULE_VERSION}"DESCRIPTION "Qt Base Libraries"HOMEPAGE_URL "https://qt.io/"LANGUAGES CXX C ASM
)set(QT_BUILD_EXTRA_IDE_FILE_PATTERNS bin/* libexec/*)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)qt_internal_qtbase_build_repo()

安装arrch版本的GCC9和G++9 

参考

https://zhuanlan.zhihu.com/p/690582548

ubuntu18.04的仓库默认不含GCC9版本,参考

在Ubuntu 18.04上安装gcc-9? ppa repository - Dev59

太慢了,直接手动装。网上教程多不赘述。

linaro官网

Downloads | GNU-A Downloads – Arm Developer

带be的是大端字节序,不带be的是小端字节序

  • 如果配置成功,进入构建目录并运行 make

    bash复制

    cd /home/a123/woniu/qt-everywhere-src-6.8.2/qtbase/build
    make -j12
qtbase交叉编译中

./configure \-prefix /home/a123/woniu/qt-everywhere-src-6.8.2/qtbase/install \-xplatform linux-aarch64-gnu-g++ \-no-opengl \-opensource \-confirm-license \-release \-strip \-shared \-c++std c++11 \-sqlite qt \-recheck-all

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com