Qt 相关 编译流程及交叉编译 部署所遇到的问题总结-持续更新

news2025/6/3 7:47:58
准备环境和工具

1、主机环境 ubuntu20
2、交叉编译器 gcc-linaro-6.3.1…arm-linux-gnuebihf
3、QT5源码包qt-5.11.3_sources
下载qt-5.11.3的包,自己想办法下载 网盘啥的 都ok,再访问下载目录就可以显示了。
Index of /archive/qt
4、依赖库安装

   sudo apt install g++ make qt3d5-dev-tools -y
   sudo apt install qml-module-qtquick-xmllistmodel -y
   sudo apt install qml-module-qtquick-virtualkeyboard qml-module-qtquick-privatewidgets qml-module-qtquick-dialogs qml -y
   sudo apt install libqt53dquickscene2d5 libqt53dquickrender5 libqt53dquickinput5 libqt53dquickextras5 libqt53dquickanimation5 libqt53dquick5 -y
   sudo apt install qtdeclarative5-dev qml-module-qtwebengine qml-module-qtwebchannel qml-module-qtmultimedia qml-module-qtaudioengine -y

5、解包交叉编译器和qt源码

tar -xvf gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf.tar

可以选择将gcc编译器,移动到opt目录下

tar -xvf qt-everywhere-src-5.11.3.tar.xz
cd qt-everywhere-src-5.11.3

5、修改qmake.conf
路径: qt-everywhere-src-5.11.3/qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf

这里需要先配置下交叉变异工具路径 本机qt程序编译也会调用

#
# qmake configuration for building with arm-linux-gnueabi-g++
#
 
MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib
 
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
 
# modifications to g++.conf
#交叉编译工具 带有-lts的会编译失败不知道为什么
#QMAKE_CC                = /opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-gcc -lts
#QMAKE_CXX               = /opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-g++ -lts
#QMAKE_LINK              = /opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-g++ -lts
#QMAKE_LINK_SHLIB        = /opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-g++ -lts

QMAKE_CC                = /opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-gcc 
QMAKE_CXX               = /opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-g++ 
QMAKE_LINK              = /opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-g++ 
QMAKE_LINK_SHLIB        = /opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-g++ 
 
# modifications to linux.conf
#交叉编译工具
QMAKE_AR                = /opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY           = /opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-objcopy
QMAKE_NM                = /opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-nm -P
QMAKE_STRIP             = /opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-strip
load(qt_config)
 
#tslib路径(交叉编译库)
QMAKE_INCDIR=/opt/tslib-1.21/include
QMAKE_LIBDIR=/opt/tslib-1.21/lib

6、configure配置脚本文件

为了防止代码污染,可以先新建一个build目录

mkdir build && cd build  (特别说明 这个build 目录 不能在qt 源代码目录下,默认编译仅支持顶级编译,可以在其他目录 脱离qt源码目录随便创建一个文件夹编译)
#!/bin/sh
../configure \
-prefix /opt/rk3288/qt-5.11.3/ \
-xplatform linux-arm-gnueabi-g++ \
-gui \
-widgets \
-release \
-opensource \
-confirm-license \
-no-openssl \
-no-opengl \
-skip qtdeclarative #这行是可选的,加上会不编译qml quick模块,需要就删掉这一行

7、特别说下 -skip qtdeclarative这一条,名字很坑完全看不出和quick有什么关系,网上很多都说编译会报错就加上这个,也可能是因为用不到quick为了缩小体积,很多配置文件都把这个给加上了,但是这个是qml quick模块,需要这部分功能的一定不要加,而且我这边编译也没报错。
8、build (-j8 8指的是cpu核心数)

make -j8 
sudo make -j8 install

9、编译报错处理
1),error1 :qt-everywhere-src-5.11.3/qtbase/src/corelib/global/qrandom.cpp:455:62: error: no matching function for call to ‘std::mersenne_twister_engine

方法:在qrandom.cpp 的219行,增加一条定义
typedef quint32 result_type;

qsizetype fillBuffer(void *, qsizetype) Q_DECL_NOTHROW
    {
        // always use the fallback
        return 0;
    }
#endif // Q_OS_WINRT
    typedef quint32 result_type;
    static SystemGenerator &self();
    void generate(quint32 *begin, quint32 *end) Q_DECL_NOEXCEPT_EXPR(FillBufferNoexcept);

2),error: ‘SIOCGSTAMP’ undeclared (first use in this function); did you mean ‘SIOCGARP’?
解决:找到socketcanbackend.cpp并打开,添加头文件
#include <linux/sockios.h>
即可解决问题
3),python: not found
解决:在终端输入命令
sudo ln -s /usr/bin/python3 /usr/bin/python 将Python和Python3 连接到一起
4),缺少 libxcb*
解决:sudo apt-get install libxcb*

备注:

ubuntu20的 系统vi编辑器过老,需要升级下
1、打开终端。
2、更新软件包列表:

sudo apt-get update  

3、安装或更新 vim:

sudo apt-get install --only-upgrade vim

或者直接升级所有软件包:

sudo apt-get upgrade vim

如果系统提示需要升级,输入 Y 确认。

admin1@admin:/opt/gcc-arm-linux-gnueabihf-8.3.0/bin$ find "$(pwd)" -maxdepth 1
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-addr2line
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/runtest
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-gcc
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-gdb
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-c++filt
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-strip
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-c++
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-elfedit
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-readelf
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-g++
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-gprof
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-strings
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-ld.gold
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-gcov
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-ld
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-gcc-6.3.1
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-size
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-gcov-tool
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-objdump
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-dwp
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-as
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-gcc-ar
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-ld.bfd
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/gdbserver
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-ar
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-ranlib
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-nm
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-objcopy
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-cpp
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-gcc-nm
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-gcc-ranlib
/opt/gcc-arm-linux-gnueabihf-8.3.0/bin/arm-linux-gnueabihf-gfortran

下方为编译qt开发工具
../configure \
-prefix /opt/qt-5.11.3/ \
-gui \
-widgets \
-release \
-opensource \
-confirm-license \
-no-openssl \
-no-opengl

之后

make -j8 
sudo make -j8 install

上述编译完成之后

sudo apt install qtcreator

问题

可能遇到的问题
ubuntu安装qt时编译出现cstddef:50:10: fatal error: ‘stddef.h’ file not found
sudo apt-get install libclang-common-8-dev
,这条命令完美解决

补充 :

设置文件权限
sudo chmod -R 777 /home/
更改用户组权限
sudo chown admin1:admin1 /home

MAC M2下

当出现 版本不匹配 这样做

QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.15

CONFIG+=sdk_no_version_check   

如果 报错 不影响运行 可以关闭插件中

ClangCodeModel

这个配置是基于 gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf
#
# qmake configuration for building with arm-linux-gnueabi-g++
#

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib

include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)

# modifications to g++.conf
QMAKE_CC                = /opt/gcc-linaro-7.5.0/bin/arm-linux-gnueabihf-gcc
QMAKE_CXX               = /opt/gcc-linaro-7.5.0/bin/arm-linux-gnueabihf-g++
QMAKE_LINK              = /opt/gcc-linaro-7.5.0/bin/arm-linux-gnueabihf-g++
QMAKE_LINK_SHLIB        = /opt/gcc-linaro-7.5.0/bin/arm-linux-gnueabihf-g++

QMAKE_CC                = /opt/gcc-linaro-7.5.0/bin/arm-linux-gnueabihf-gcc
QMAKE_CXX               = /opt/gcc-linaro-7.5.0/bin/arm-linux-gnueabihf-g++
QMAKE_LINK              = /opt/gcc-linaro-7.5.0/bin/arm-linux-gnueabihf-g++
QMAKE_LINK_SHLIB        = /opt/gcc-linaro-7.5.0/bin/arm-linux-gnueabihf-g++

# modifications to linux.conf
QMAKE_AR                = /opt/gcc-linaro-7.5.0/bin/arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY           = /opt/gcc-linaro-7.5.0/bin/arm-linux-gnueabihf-objcopy
QMAKE_NM                = /opt/gcc-linaro-7.5.0/bin/arm-linux-gnueabihf-nm -P
QMAKE_STRIP             = /opt/gcc-linaro-7.5.0/bin/arm-linux-gnueabihf-strip
load(qt_config)

推荐几个主流 Linaro 工具链版本选择参考
Linaro 工具链版本GCC 版本对应 glibc 范围使用场景
6.3.1-2017.026.3.1glibc 2.23嵌入式 Linux 4.x 常见
7.5.0-2019.127.5.0glibc 2.27~2.28ARMv7 硬浮点常见
8.3.0-2019.038.3.0glibc 2.28~2.29新平台(如 RK3399)
aarch64-linux-gnu-9.x9.xglibc 2.31+64 位 ARM(Cortex-A72)

当嵌入式linux内置qt版本与开发机器编译版本不一致

  • 本机编译机器运行正常,但部署远端会发生异常
    处理
    在远端嵌入式linux机器上进入
/usr/lib/arm-linux-gnueabihf/qt5/qml/QtQuick/Controls.2

嵌入式linux机器qt相关东西一般在这里
随意打开一个 例如 menu.qml vi 编辑后查看内部 import 的相关版本

  • 此相关问题 导致的原因在于本地编译qt库与远端设备不同步导致的
  • 我是这么确定版本的,那位有更好的方式,可以评论分享下

注意

qt 库编译 - 路径禁止包含中文 --卡了一段时间没想到是因为这个

当开发机器选择远端编译环境运行部署的时候如果提示

qt.qpa.screen: QXcbConnection: Could not connect to display :0
Could not connect to any X display.
  • 1、先确认远端是否有
echo $DISPLAY    # 如果有输出则说明有图形界面

若上述条件满足 则直接登陆远端设备 直接执行下方指令

  • 临时放开所有本地用户的访问权限(不安全,只用于调试):
xhost +local:   

或者执行

  • (注意:这会放开所有访问权限,不建议在公共或生产环境使用)
xhost +    

成功再次编译项目运行到远端

2025-5-29 新增

  • 补充 远端登陆设置或许会失败,我是直接在远端机器上执行了( 接上边 xhost 执行结果)

调整设备方向 - 临时生效

xrandr -o normal   # 正常显示(默认)
xrandr -o left     # 逆时针旋转 90 度
xrandr -o right    # 顺时针旋转 90 度
xrandr -o inverted # 180 度旋转(上下颠倒)
含义
0正常方向
1顺时针旋转 90°
2旋转 180°
3逆时针旋转 90°

查看屏幕旋转方向
cat /sys/class/graphics/fb0/rotate

依次设置

1 就是上边的值

echo 1 | sudo tee /sys/class/graphics/fb0/rotate  运行机器黑屏了

此方案 部分机器不兼容 设置后 屏幕黑屏 比如我这边的 因此暂时用的是临时生效方案

  • 如何让设备永久生效的方法 我还没找到 ,有那位大佬知道的 麻烦评论下

Qt串口

.pro 文件 QT+= serialport 追加上
大概长下边这个样子

QT += quick serialport
  • 新建串口管理类
    SerialManager.h
#ifndef SERIALMANAGER_H
#define SERIALMANAGER_H

#include <QObject>
#include <QSerialPort>
#include <QSerialPortInfo>

class SerialManager : public QObject {
    Q_OBJECT
    Q_PROPERTY(QString receivedData READ receivedData NOTIFY receivedDataChanged)

public:
    explicit SerialManager(QObject *parent = nullptr);
    ~SerialManager();

    Q_INVOKABLE QStringList availablePorts();
    Q_INVOKABLE bool openPort(const QString &portName, int baudRate);
    Q_INVOKABLE void sendData(const QString &data);
    Q_INVOKABLE void sendHexData(const QString &hexString);
    Q_INVOKABLE void closePort();
    QString receivedData() const;
    Q_INVOKABLE void clearReceivedData();

signals:
    void receivedDataChanged();

private slots:
    void handleReadyRead();

private:
    QSerialPort *serial;
    QString m_receivedData;
};

#endif // SERIALMANAGER_H

.cpp

#include "serialmanager.h"
#include <QDebug>
#include <QSerialPortInfo>
#include <QRegularExpression>

SerialManager::SerialManager(QObject *parent)
    : QObject(parent), serial(new QSerialPort(this)) {
    connect(serial, &QSerialPort::readyRead, this, &SerialManager::handleReadyRead);
}

SerialManager::~SerialManager() {
    closePort();
}

QStringList SerialManager::availablePorts() {
    QStringList list;
    for (const QSerialPortInfo &info : QSerialPortInfo::availablePorts()) {
        list << info.portName(); // 示例:ttyUSB0、ttyXRUSB1 等
    }
    return list;
}

bool SerialManager::openPort(const QString &portName, int baudRate) {
    if (serial->isOpen())
        serial->close();

    QString fullName = portName;
    if (!portName.startsWith("/dev/"))
        fullName = "/dev/" + portName;

    serial->setPortName(fullName);

    bool okRate = serial->setBaudRate(baudRate);
    qDebug() << "[串口] 设置波特率结果:" << okRate;
    serial->setDataBits(QSerialPort::Data8);
    serial->setParity(QSerialPort::NoParity);
    serial->setStopBits(QSerialPort::OneStop);
    serial->setFlowControl(QSerialPort::NoFlowControl);

    bool success = serial->open(QIODevice::ReadWrite);
    if (success) {
        qDebug() << "[串口] 打开成功:" << fullName << "波特率:" << baudRate;
    } else {
        qWarning() << "[串口] 打开失败:" << fullName << serial->errorString();
    }
    return success;
}

void SerialManager::sendData(const QString &data) {
    if (serial->isOpen()) {
        QByteArray sendBytes = data.toUtf8();
        serial->write(sendBytes);
        qDebug() << "[串口] 发送数据:" << sendBytes.toHex(' ').toUpper();
    } else {
        qWarning() << "[串口] 发送失败,串口未打开";
    }
}
void SerialManager::sendHexData(const QString &hexString) {
    if (!serial->isOpen()) {
        qWarning() << "[串口] 串口未打开,无法发送";
        return;
    }

    QString cleaned = hexString;
    cleaned.remove(QRegularExpression("[\\s:]")); // 去掉空格、冒号等

    QByteArray bytes;
    for (int i = 0; i < cleaned.length(); i += 2) {
        QString byteStr = cleaned.mid(i, 2);
        bool ok;
        char byte = byteStr.toUInt(&ok, 16);
        if (ok) {
            bytes.append(byte);
        } else {
            qWarning() << "[串口] 无效HEX:" << byteStr;
        }
    }
    // 计算异或校验值
    char xorChecksum = 0;
    for (char b : bytes) {
        xorChecksum ^= b;
    }
    bytes.append(xorChecksum); // 添加校验值
    serial->write(bytes);
    qDebug() << "[串口] 发送HEX:" << bytes.toHex(' ').toUpper();
}

void SerialManager::closePort() {
    if (serial->isOpen()) {
        serial->close();
        qDebug() << "[串口] 已关闭";
    }
}

void SerialManager::handleReadyRead() {
//    QByteArray buffer = serial->readAll();
//    m_receivedData += QString::fromUtf8(buffer); // 累加缓存
//    qDebug() << "[串口] 收到数据:" << buffer.toHex(' ').toUpper();
//    emit receivedDataChanged();

    QByteArray raw = serial->readAll();
    m_receivedData += QString::fromUtf8(raw.toHex(' ').toUpper());
    emit receivedDataChanged();
    qDebug() << "[串口] 收到数据 HEX:" << raw.toHex(' ').toUpper();
}

QString SerialManager::receivedData() const {
    return m_receivedData;
}

void SerialManager::clearReceivedData(){
    SerialManager::m_receivedData.clear();
}

代码处理完成后
main.cpp 先导包

#include "serialmanager.h"

然后 main 方法里 - 这个位置应该是有要求的 似乎要注册在 QQmlApplicationEngine engine后,至于为啥,暂时我还不知道 看样子 跟什么引擎加载执行顺序有点关系,不大懂

SerialManager serial;
engine.rootContext()->setContextProperty("SerialManager", &serial);

查询系统版本

市面上常用的一般 rk3288 3399 3568 等 使用一些三方sdk时候对系统版本可能会有一定要求 因此

  • 注意 这个东西 其实就跟检查 android系统版本一个道理,看sdk是否兼容你手头android机器 (只是这里是linux设备)
dmesg | grep -i rockchip
查询结果
linaro@linaro-alip:~$ dmesg | grep -i rockchip
[    0.000000] Machine model: rockchip,rk3288w
[    1.362200] rockchip-system-monitor rockchip-system-monitor: system monitor probe
[    1.432715] [drm] Rockchip DRM driver version: v1.0.1
[    1.438287] rockchip-drm display-subsystem: devfreq is not set
[    1.445867] rockchip-drm display-subsystem: bound ff930000.vop (ops 0xc0b66d80)
[    1.454484] rockchip-drm display-subsystem: bound ff940000.vop (ops 0xc0b66d80)
[    1.468904] dwhdmi-rockchip ff980000.hdmi: registered DesignWare HDMI I2C bus driver
[    1.476830] dwhdmi-rockchip ff980000.hdmi: Detected HDMI TX controller v2.01a with HDCP (DWC HDMI 2.0 TX PHY)
[    1.488432] rockchip-drm display-subsystem: bound ff980000.hdmi (ops 0xc0b5d7e0)
[    1.495929] rockchip-drm display-subsystem: failed to bind ff960000.dsi (ops 0xc0b5dc40): -517
[    1.506020] rockchip-drm display-subsystem: master bind failed: -517
[    1.831657] Rockchip WiFi SYS interface (V1.00) ... 
[    3.166007] rockchip-iodomain ff770000.syscon:io-domains: wifi supplied by 1800000 uV
[    3.174444] rockchip-iodomain ff770000.syscon:io-domains: sdcard supplied by 3300000 uV
[    3.188498] rockchip-thermal ff280000.tsadc: Missing rockchip,grf property
[    3.195872] rockchip-thermal ff280000.tsadc: tsadc is probed successfully!
[    3.282915] rockchip_cpuclk_pre_rate_change: Invalid rate : 500000000 for cpuclk
[    3.347270] dwmmc_rockchip ff0c0000.dwmmc: IDMAC supports 32-bit address mode.
[    3.354582] dwmmc_rockchip ff0c0000.dwmmc: Using internal DMA controller.
[    3.361374] dwmmc_rockchip ff0c0000.dwmmc: Version ID is 270a
[    3.367172] dwmmc_rockchip ff0c0000.dwmmc: DW MMC controller at irq 29,32 bit host data width,256 deep fifo
[    3.376928] dwmmc_rockchip ff0c0000.dwmmc: 'clock-freq-min-max' property was deprecated.
[    3.392435] dwmmc_rockchip ff0c0000.dwmmc: GPIO lookup for consumer cd
[    3.392444] dwmmc_rockchip ff0c0000.dwmmc: using device tree for GPIO lookup
[    3.392469] dwmmc_rockchip ff0c0000.dwmmc: using lookup tables for GPIO lookup
[    3.392477] dwmmc_rockchip ff0c0000.dwmmc: lookup for GPIO cd failed
[    3.392486] dwmmc_rockchip ff0c0000.dwmmc: GPIO lookup for consumer wp
[    3.392493] dwmmc_rockchip ff0c0000.dwmmc: using device tree for GPIO lookup
[    3.392515] dwmmc_rockchip ff0c0000.dwmmc: using lookup tables for GPIO lookup
[    3.392522] dwmmc_rockchip ff0c0000.dwmmc: lookup for GPIO wp failed
[    3.393713] rockchip-iodomain ff770000.syscon:io-domains: Setting to 3300000 done
[    3.401326] rockchip-iodomain ff770000.syscon:io-domains: Setting to 3300000 done
[    3.441675] dwmmc_rockchip ff0c0000.dwmmc: 1 slots initialized
[    3.447804] dwmmc_rockchip ff0d0000.dwmmc: IDMAC supports 32-bit address mode.
[    3.455056] dwmmc_rockchip ff0d0000.dwmmc: Using internal DMA controller.
[    3.461838] dwmmc_rockchip ff0d0000.dwmmc: Version ID is 270a
[    3.467619] dwmmc_rockchip ff0d0000.dwmmc: DW MMC controller at irq 30,32 bit host data width,256 deep fifo
[    3.477364] dwmmc_rockchip ff0d0000.dwmmc: 'clock-freq-min-max' property was deprecated.
[    3.485474] dwmmc_rockchip ff0d0000.dwmmc: No vmmc regulator found
[    3.491650] dwmmc_rockchip ff0d0000.dwmmc: No vqmmc regulator found
[    3.497927] dwmmc_rockchip ff0d0000.dwmmc: GPIO lookup for consumer wp
[    3.497933] dwmmc_rockchip ff0d0000.dwmmc: using device tree for GPIO lookup
[    3.497951] dwmmc_rockchip ff0d0000.dwmmc: using lookup tables for GPIO lookup
[    3.497957] dwmmc_rockchip ff0d0000.dwmmc: lookup for GPIO wp failed
[    3.498096] dwmmc_rockchip ff0d0000.dwmmc: allocated mmc-pwrseq
[    3.529250] dwmmc_rockchip ff0d0000.dwmmc: 1 slots initialized
[    3.529531] dwmmc_rockchip ff0f0000.dwmmc: IDMAC supports 32-bit address mode.
[    3.529559] dwmmc_rockchip ff0f0000.dwmmc: Using internal DMA controller.
[    3.529566] dwmmc_rockchip ff0f0000.dwmmc: Version ID is 270a
[    3.529591] dwmmc_rockchip ff0f0000.dwmmc: DW MMC controller at irq 31,32 bit host data width,256 deep fifo
[    3.529600] dwmmc_rockchip ff0f0000.dwmmc: 'clock-freq-min-max' property was deprecated.
[    3.529619] dwmmc_rockchip ff0f0000.dwmmc: No vmmc regulator found
[    3.529622] dwmmc_rockchip ff0f0000.dwmmc: No vqmmc regulator found
[    3.529628] dwmmc_rockchip ff0f0000.dwmmc: GPIO lookup for consumer wp
[    3.529630] dwmmc_rockchip ff0f0000.dwmmc: using device tree for GPIO lookup
[    3.529639] dwmmc_rockchip ff0f0000.dwmmc: using lookup tables for GPIO lookup
[    3.529642] dwmmc_rockchip ff0f0000.dwmmc: lookup for GPIO wp failed
[    3.535202] dwmmc_rockchip ff0d0000.dwmmc: card claims to support voltages below defined range
[    3.554856] dwmmc_rockchip ff0f0000.dwmmc: 1 slots initialized
[    3.556632] rockchip-dmc dmc: unable to get devfreq-event device : dfi
[    3.563689] rockchip-pinctrl pinctrl: pin gpio4-30 already requested by ff0d0000.dwmmc; cannot claim for wireless-wlan
[    3.563693] rockchip-pinctrl pinctrl: pin-150 (wireless-wlan) status -22
[    3.563697] rockchip-pinctrl pinctrl: could not request pin 150 (gpio4-30) from group wifi-wake-host  on device rockchip-pinctrl
[    3.566081] [drm] Rockchip DRM driver version: v1.0.1
[    3.566263] rockchip-drm display-subsystem: devfreq is not set
[    3.566819] rockchip-drm display-subsystem: bound ff930000.vop (ops 0xc0b66d80)
[    3.567187] rockchip-drm display-subsystem: bound ff940000.vop (ops 0xc0b66d80)
[    3.567435] dwhdmi-rockchip ff980000.hdmi: registered DesignWare HDMI I2C bus driver
[    3.567487] dwhdmi-rockchip ff980000.hdmi: Detected HDMI TX controller v2.01a with HDCP (DWC HDMI 2.0 TX PHY)
[    3.568395] rockchip-drm display-subsystem: bound ff980000.hdmi (ops 0xc0b5d7e0)
[    3.568404] rockchip-drm display-subsystem: failed to bind ff960000.dsi (ops 0xc0b5dc40): -517
[    3.569175] rockchip-drm display-subsystem: master bind failed: -517
[    3.572078] rockchip-dmc dmc: Get drm_device fail
[    3.572481] [drm] Rockchip DRM driver version: v1.0.1
[    3.572668] rockchip-drm display-subsystem: devfreq is not set
[    3.573209] rockchip-drm display-subsystem: bound ff930000.vop (ops 0xc0b66d80)
[    3.573581] rockchip-drm display-subsystem: bound ff940000.vop (ops 0xc0b66d80)
[    3.573824] dwhdmi-rockchip ff980000.hdmi: registered DesignWare HDMI I2C bus driver
[    3.573870] dwhdmi-rockchip ff980000.hdmi: Detected HDMI TX controller v2.01a with HDCP (DWC HDMI 2.0 TX PHY)
[    3.574777] rockchip-drm display-subsystem: bound ff980000.hdmi (ops 0xc0b5d7e0)
[    3.574824] rockchip-drm display-subsystem: bound ff960000.dsi (ops 0xc0b5dc40)
[    3.575000] rockchip-drm display-subsystem: connector[HDMI-A-1] can't found any modes
[    3.777747] dwmmc_rockchip ff0f0000.dwmmc: Successfully tuned phase to 191
[    4.273160] rockchip-drm display-subsystem: fb0:  frame buffer device
[    4.373526] rockchip-dmc dmc: Failed to get leakage
[    4.378641] rockchip-dmc dmc: Failed to get pvtm
[    4.383518] rockchip-dmc dmc: avs=0
[    4.387030] rockchip-dmc dmc: failed to get vop bandwidth to dmc rate
[    4.393490] rockchip-dmc dmc: failed to get vop pn to msch rl
[    4.399376] rockchip-dmc dmc: l=-2147483648 h=2147483647 hyst=0 l_limit=0 h_limit=0 h_table=0
[    4.407930] rockchip-dmc dmc: could not find power_model node
[    4.883456]   #0: rockchip,es8388-codec
[   15.444750] ==== Launching Wi-Fi driver! (Powered by Rockchip) ====
[   15.457506] Realtek 8723DS SDIO WiFi driver (Powered by Rockchip,Ver v5.13.5-15-gc1c3092fe.20210421_beta) init.
[   15.467630] [WLAN_RFKILL]: rockchip_wifi_power: 1
[ 1803.422903] rockchip-vop ff940000.vop: [drm:vop_crtc_enable] Update mode to 800x1280p0, type: 16
linaro@linaro-alip:~$ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2395137.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

​​知识图谱:重构认知的智能革命​

在数字经济的浪潮中&#xff0c;知识图谱正悄然掀起一场认知革命。它不仅是技术的迭代&#xff0c;更是人类从“数据依赖”迈向“知识驱动”的里程碑。当谷歌用知识图谱优化搜索引擎、银行用它穿透复杂的金融欺诈网络、医院用它辅助癌症诊疗时&#xff0c;这项技术已悄然渗透到…

【计算机网络】4网络层①

这篇笔记讲IPv4和IPv6。 为了解决“IP地址耗尽”问题,有三种措施: ①CIDR(延长IPv4使用寿命) ②NAT(延长IPv4使用寿命) ③IPv6(从根本上解决IP地址耗尽问题) IPv6 在考研中考查频率较低,但需掌握基础概念以防冷门考点,重点结合数据报格式和与 IPv4 的对比记忆。…

MATLAB中的table数据类型:高效数据管理的利器

MATLAB中的table数据类型&#xff1a;高效数据管理的利器 什么是table数据类型&#xff1f; MATLAB中的table是一种用于存储列向数据的数据类型&#xff0c;它将不同类型的数据组织在一个表格结构中&#xff0c;类似于电子表格或数据库表。自R2013b版本引入以来&#xff0c;t…

Dropout 在大语言模型中的应用:以 GPT 和 BERT 为例

引言 大型语言模型&#xff08;LLMs&#xff09;如 GPT&#xff08;生成式预训练 Transformer&#xff09;和 BERT&#xff08;双向编码器表示 Transformer&#xff09;通过其强大的语言理解和生成能力&#xff0c;彻底改变了自然语言处理&#xff08;NLP&#xff09;领域。然…

gitLab 切换中文模式

点击【头像】--选择settings 选择【language】,选择中文&#xff0c;点击【保存】即可。

133.在 Vue3 中使用 OpenLayers 实现画多边形、任意编辑、遮罩与剪切处理功能

&#x1f3ac; 效果演示截图&#xff08;先睹为快&#xff09; ✨ 功能概览&#xff1a; ✅ 鼠标画任意形状多边形&#xff1b; ✏️ 点击“修改边界”可拖动顶点&#xff1b; &#x1f7e5; 点击“遮罩”后地图除多边形区域外变红&#xff1b; ✂️ 点击“剪切”后仅显示选…

4.8.4 利用Spark SQL实现分组排行榜

在本次实战中&#xff0c;我们的目标是利用Spark SQL实现分组排行榜&#xff0c;特别是计算每个学生分数最高的前3个成绩。任务的原始数据由一组学生成绩组成&#xff0c;每个学生可能有多个成绩记录。我们首先将这些数据读入Spark DataFrame&#xff0c;然后按学生姓名分组&am…

【五子棋在线对战】一.前置知识的了解

前置知识的了解 前言1.Websocketpp1.1 使用Websocketpp的原因1.2 Websocket常用接口1.3 Websocket搭建服务器流程 2.JsonCpp2.1 Json 数据对象类的表示2.2序列化和反序列化的接口2.3 演示代码 3.Mysql![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/93305f423b544fc1…

历年中国科学技术大学计算机保研上机真题

2025中国科学技术大学计算机保研上机真题 2024中国科学技术大学计算机保研上机真题 2023中国科学技术大学计算机保研上机真题 在线测评链接&#xff1a;https://pgcode.cn/school?classification1 拆分数字 题目描述 给定一个数字&#xff0c;拆分成若干个数字之和&#xff…

HackMyVM-Art

信息搜集 主机发现 ┌──(kali㉿kali)-[~] └─$ nmap -sn 192.168.43.0/24 Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-31 03:00 EDT Nmap scan report for 192.168.43.1 Host is up (0.0047s latency). MAC Address: C6:45:66:05:91:88 (Unknown) Nmap scan rep…

网页前端开发(基础进阶1)

颜色表示方法3种&#xff1a; 1.关键字&#xff1a; color&#xff1a;green&#xff1b; gray red yellow 2.rgb表示法&#xff1a;红&#xff0c;绿&#xff0c;蓝三原色。rgb&#xff08;r&#xff0c;g&#xff0c;b&#xff09;&#xff0c;r表示红色&#xff0c;g表示绿…

如何找到一条适合自己企业的发展之路?

一个创业型的企业&#xff0c;开始就需要面向市场&#xff0c;通过自己的服务或产品&#xff0c;帮助用户解决问题&#xff0c;为客户创造价值&#xff0c;通过为客户创造的价值&#xff0c;出创造一定的的现金流&#xff0c;让企业存活下来&#xff01; 企业的运营过程中&…

Vue-数据监听

数据监听 基础信息 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>数据监听</title><!-- 引入Vue --><script type"text/javascript" src"../js/vue.js&qu…

当前用户的Git全局配置情况:git config --global --list

通过config命令可以查询当前用户的全局配置情况。这些配置项定义了 Git 在全局范围内的行为&#xff0c;包括如何处理大文件、SSL 证书验证以及提交时的用户信息。 git config --global --list http.sslVerifyfalse 这个配置项禁用了 SSL 证书验证。这在与自签名证书的 Git 服…

AI生态警报:MCP协议风险与应对指南(中)——MCP Server运行时安全​​

作为连接AI模型与外部工具的“USB-C接口”&#xff0c;MCP协议成为AI生态的核心枢纽&#xff0c;其安全风险已从理论威胁转化为实际攻击目标。 AI生态警报&#xff1a;MCP协议风险与应对指南&#xff08;上&#xff09;——架构与供应链风险https://blog.csdn.net/WangsuSecur…

day15 leetcode-hot100-29(链表8)

19. 删除链表的倒数第 N 个结点 - 力扣&#xff08;LeetCode&#xff09; 1.暴力法 思路 &#xff08;1&#xff09;先获取链表的长度L &#xff08;2&#xff09;然后再次遍历链表到L-n的位置&#xff0c;直接让该指针的节点指向下下一个即可。 2.哈希表 思路 &#xff0…

MonitorSDK_性能监控(从Web Vital性能指标、PerformanceObserver API和具体代码实现)

性能监控 性能指标 在实现性能监控前&#xff0c;先了解Web Vitals涉及的常见的性能指标 Web Vitals 是由 Google 推出的网页用户体验衡量指标体系&#xff0c;旨在帮助开发者量化和优化网页在实际用户终端上的性能体验。Web Vitals 强调“以用户为中心”的度量&#xff0c;而不…

LeeCode 98. 验证二叉搜索树

给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 提示&#xff1a; 树中节…

JVM类加载高阶实战:从双亲委派到弹性架构的设计进化

前言 作为Java开发者&#xff0c;我们都知道JVM的类加载机制遵循"双亲委派"原则。但在实际开发中&#xff0c;特别是在金融支付、插件化架构等场景下&#xff0c;严格遵循这个原则反而会成为系统扩展的桎梏。本文将带你深入理解双亲委派机制的本质&#xff0c;并分享…

threejsPBR材质与纹理贴图

1. PBR材质简介 本节课没有具体的代码&#xff0c;就是给大家科普一下PBR材质&#xff0c;所谓PBR就是&#xff0c;基于物理的渲染(physically-based rendering)。 Three.js提供了两个PBR材质相关的APIMeshStandardMaterial和MeshPhysicalMaterial,MeshPhysicalMaterial是Mes…