准备环境和工具
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.02 | 6.3.1 | glibc 2.23 | 嵌入式 Linux 4.x 常见 |
7.5.0-2019.12 | 7.5.0 | glibc 2.27~2.28 | ARMv7 硬浮点常见 |
8.3.0-2019.03 | 8.3.0 | glibc 2.28~2.29 | 新平台(如 RK3399) |
aarch64-linux-gnu-9.x | 9.x | glibc 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:~$