diff -Naur qtbase/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp new/qlinuxfbscreen.cpp
--- qtbase/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp	2023-09-20 19:54:05.958279390 +0800
+++ new/qlinuxfbscreen.cpp	2023-09-20 22:02:49.227578900 +0800
@@ -62,7 +62,7 @@
 #include <signal.h>
 
 #include <linux/fb.h>
-
+#define ZHANG_SUPPORT_RORATE
 QT_BEGIN_NAMESPACE
 
 static int openFramebufferDevice(const QString &dev)
@@ -287,7 +287,11 @@
 }
 
 QLinuxFbScreen::QLinuxFbScreen(const QStringList &args)
+#ifdef ZHANG_SUPPORT_RORATE
+    : mArgs(args), mFbFd(-1), mTtyFd(-1), mBlitter(0), mRotation(0)
+#else
     : mArgs(args), mFbFd(-1), mTtyFd(-1), mBlitter(0)
+#endif
 {
     mMmap.data = 0;
 }
@@ -313,6 +317,9 @@
     QRegularExpression mmSizeRx(QLatin1String("mmsize=(\\d+)x(\\d+)"));
     QRegularExpression sizeRx(QLatin1String("size=(\\d+)x(\\d+)"));
     QRegularExpression offsetRx(QLatin1String("offset=(\\d+)x(\\d+)"));
+#ifdef ZHANG_SUPPORT_RORATE
+    QRegularExpression rotationRx(QLatin1String("rotation=(0|90|180|270)"));
+#endif
 
     QString fbDevice, ttyDevice;
     QSize userMmSize;
@@ -334,6 +341,10 @@
             ttyDevice = match.captured(1);
         else if (arg.contains(fbRx, &match))
             fbDevice = match.captured(1);
+#ifdef ZHANG_SUPPORT_RORATE
+        else if (arg.contains(rotationRx, &match))
+            mRotation = match.captured(1).toInt();
+#endif
     }
 
     if (fbDevice.isEmpty()) {
@@ -372,9 +383,22 @@
     mDepth = determineDepth(vinfo);
     mBytesPerLine = finfo.line_length;
     QRect geometry = determineGeometry(vinfo, userGeometry);
+#ifdef ZHANG_SUPPORT_RORATE
+    QRect originalGeometry = geometry;
+    if( mRotation == 90 || mRotation == 270 )
+    {
+        int tmp = geometry.width();
+        geometry.setWidth(geometry.height());
+        geometry.setHeight(tmp);
+    }
+#endif
     mGeometry = QRect(QPoint(0, 0), geometry.size());
     mFormat = determineFormat(vinfo, mDepth);
+#ifdef ZHANG_SUPPORT_RORATE
+    mPhysicalSize = determinePhysicalSize(vinfo, userMmSize, originalGeometry.size());
+#else
     mPhysicalSize = determinePhysicalSize(vinfo, userMmSize, geometry.size());
+#endif
 
     // mmap the framebuffer
     mMmap.size = finfo.smem_len;
@@ -383,13 +407,19 @@
         qErrnoWarning(errno, "Failed to mmap framebuffer");
         return false;
     }
-
+#ifdef ZHANG_SUPPORT_RORATE
+    mMmap.offset = originalGeometry.y() * mBytesPerLine + originalGeometry.x() * mDepth / 8;
+#else
     mMmap.offset = geometry.y() * mBytesPerLine + geometry.x() * mDepth / 8;
+#endif
     mMmap.data = data + mMmap.offset;
 
     QFbScreen::initializeCompositor();
+#ifdef ZHANG_SUPPORT_RORATE
+    mFbScreenImage = QImage(mMmap.data, originalGeometry.width(), originalGeometry.height(), mBytesPerLine, mFormat);
+#else
     mFbScreenImage = QImage(mMmap.data, geometry.width(), geometry.height(), mBytesPerLine, mFormat);
-
+#endif
     mCursor = new QFbCursor(this);
 
     mTtyFd = openTtyDevice(ttyDevice);
@@ -414,8 +444,27 @@
 
     mBlitter->setCompositionMode(QPainter::CompositionMode_Source);
     for (const QRect &rect : touched)
+#ifdef ZHANG_SUPPORT_RORATE
+    {
+        if (mRotation == 90 || mRotation == 270)
+        {
+            mBlitter->translate(mGeometry.height() / 2, mGeometry.width() / 2);
+        }
+        else if (mRotation == 180)
+        {
+            mBlitter->translate(mGeometry.width() / 2, mGeometry.height() / 2);
+        }
+        if (mRotation != 0)
+        {
+            mBlitter->rotate(mRotation);
+            mBlitter->translate(-mGeometry.width() / 2, -mGeometry.height() / 2);
+        }
+        mBlitter->drawImage(rect, mScreenImage, rect); 
+        mBlitter->resetTransform();
+    }
+#else
         mBlitter->drawImage(rect, mScreenImage, rect);
-
+#endif
     return touched;
 }
 
diff -Naur qtbase/src/plugins/platforms/linuxfb/qlinuxfbscreen.h new/qlinuxfbscreen.h
--- qtbase/src/plugins/platforms/linuxfb/qlinuxfbscreen.h	2023-09-20 19:54:05.958279390 +0800
+++ new/qlinuxfbscreen.h	2023-09-20 22:02:49.227578900 +0800
@@ -75,6 +75,7 @@
     } mMmap;
 
     QPainter *mBlitter;
+	int mRotation;
 };
 
 QT_END_NAMESPACE
