ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

银河麒麟V10+飞腾处理器下Qt 5.12.8编译适配与性能优化实战

银河麒麟V10+飞腾处理器下Qt 5.12.8编译适配与性能优化实战 从零构建国产化开发环境银河麒麟V10飞腾处理器Qt5.12.8的深度适配与性能调优前几天刚交付了一个国产化终端项目硬件用的是飞腾D2000系统是银河麒麟V10桌面版ARM64架构核心任务是把一套原来跑在x86 Windows上的Qt应用迁移过来。真正动手才发现ARM环境下的Qt适配和x86完全是两套玩法光“能编译”和“能跑”之间就隔着无数个坑更别提性能和显示效果了。网上关于这套组合的资料零零散散我用了一周多时间逐项踩坑、逐项解决总算把整个流程跑通了。这篇文章就把我从零开始构建这套国产化开发环境的完整过程捋一遍包括系统部署、Qt 5.12.8离线编译安装、针对飞腾处理器的深度适配、性能调优手段以及我在实操中遇到的一堆典型问题和排查方法。不管你是刚接触国产化环境的新手还是已经被这套环境折磨过的老手这篇文章应该都能让你少走不少弯路。1. 项目背景与整体设计思路1.1 为什么是银河麒麟V10 飞腾 Qt 这个组合国产化替代这几年在各个行业推进得很快从CPU到操作系统再到上层应用整条技术栈都在换。在当前最常见的国产化配置里飞腾处理器和麒麟操作系统几乎是“标配组合”之一而Qt则是因为它跨平台、C性能好、UI开发效率高成了很多政企类桌面应用的选择。飞腾处理器采用ARMv8指令集属于典型的aarch64架构和x86相比指令集、ABI、库依赖都不一样软件没法像Windows换Linux那样直接二进制迁移。银河麒麟V10桌面版虽然基于Linux生态但它的软件仓库、默认内核配置、图形栈都做过定制很多在Ubuntu上习以为常的操作到这里都得重新摸一遍。拿Qt 5.12.8来说它本身支持ARM Linux但官方在飞腾麒麟这套组合下没有现成的二进制包可用下载的在线安装器在这个环境下也基本跑不通所以最可靠的方案就是拿源码在目标机器上本地编译。而这个编译过程里藏着大量细节编译器版本、依赖库、configure参数、平台插件哪一步没搞对后面都会以各种奇怪的方式报错。1.2 方案选型本地编译还是交叉编译如果你要在飞腾设备上部署Qt应用有两条路交叉编译或者本地编译。交叉编译听起来高效——在x86的编译机上用aarch64交叉工具链编译出ARM版Qt再拷到飞腾机器上。但问题是Qt依赖的系统库比如libxcb、fontconfig、libGL也得有对应的ARM版这些库本身的依赖链非常长交叉编译时光是解决依赖就能耗掉你大量时间。而且Qt的编译脚本在交叉环境下经常要手动适配平台的默认配置也未必正确。我自己实际操作下来本地编译其实是更稳的选择。飞腾D2000是八核处理器编译Qt 5.12.8大概一个小时左右这个时间成本完全能接受。本地编译的好处是configure脚本会自动探测当前系统已有的库和特性编译出来的Qt和系统环境天然兼容后续部署应用基本不会出现“找不着库”这种问题。需要注意的一点是如果你是纯离线环境需要提前准备好源码包和所有依赖的rpm包。我最开始忽略了这一点结果编译到一半报缺libxkbcommon-x11-dev只能吭哧吭哧到处找离线包。这个事提前规划好能省很多事。1.3 我要达成的目标框架这套环境搭建完要达到以下几个标准银河麒麟V10桌面版能正常启动网络、中文显示、磁盘挂载都正常。Qt 5.12.8安装在固定目录qmake和编译环境随时可用。自带Qt应用能正常显示窗口支持中文支持常见桌面环境和触摸屏。应用在大屏和普通分辨率下显示比例正常。性能上能做到启动时间可接受、界面操作不卡顿有办法定位性能瓶颈。后面的所有内容都是围绕这几个目标展开的。2. 系统部署与环境初始化2.1 飞腾架构识别与镜像选择拿到飞腾设备后第一步是确认硬件架构避免装错镜像。lscpu uname -a cat /proc/cpuinfo正常的输出里能看到aarch64字样CPU型号一般会显示Phytium字样比如飞腾D2000或FT-2000系列。这步确认好了再去选银河麒麟V10的镜像记住一定要选ARM64版本的镜像桌面版后缀通常带aarch64字样千万别拿x86_64的镜像去装装机阶段就会报错。银河麒麟V10桌面版有两个版本容易被混淆一个是面向桌面场景的桌面版一个是面向服务器场景的高级服务器版。普通应用开发用桌面版就行服务器版默认不带图形桌面跟Qt应用完全不搭。2.2 U盘启动盘制作与系统安装制作启动盘在Windows环境下直接用balenaEtcher就行开源免费镜像写入U盘后再插到飞腾机器上开机引导。如果在Linux环境也可以直接用dd命令。sudo dd ifKylin-Desktop-V10-ARM64.iso of/dev/sdb bs4M statusprogressdd写完后如果系统没自动弹出U盘执行sync让缓存落盘再拔U盘。安装过程本身不复杂按图形界面引导一步步走。有两个细节值得注意如果你后续要单独划数据盘比如把微信文件、项目代码放到独立目录安装到分区步骤时选择“手动分区”给根分区和数据分区分别规划空间。初始用户建议用普通用户不要上来就用root日常开发在普通用户下进行需要提权时用sudo即可这样能避免很多权限导致的怪问题。2.3 安装后的基础配置网络、数据盘和软件源安装完系统先确认网络是否正常。如果设备是WiFi连接就牵扯到无线网卡驱动问题。飞腾设备上常见无线网卡型号有AX210/AX211这些在银河麒麟上有时默认没有对应固件表现出来是系统里能识别到网卡但搜不到WiFi信号。排查时先用lspci看网卡是否被系统识别lspci | grep -i network如果有设备但网络接口起不来多半是缺固件。可以从能够联网的机器上下载对应固件拷贝到 /lib/firmware 目录然后重新加载驱动模块sudo modprobe -r iwlwifi sudo modprobe iwlwifi这块确实验证了“硬件型号和系统固件库匹配”的重要性有时候比编译一个软件麻烦多了。数据盘方面如果你的机器额外挂了块硬盘但系统没自动挂载可以先分区再挂载sudo fdisk -l sudo fdisk /dev/sdb # 交互式分区 sudo mkfs.ext4 /dev/sdb1 sudo mkdir -p /data sudo mount /dev/sdb1 /data想要重启后自动挂载编辑 /etc/fstab 添加一行/dev/sdb1 /data ext4 defaults 0 0很多人想把微信文件目录改到数据盘思路一样把数据盘挂到固定目录后在微信设置里改文件保存路径到 /data/wechat_files 即可。软件源离线配置也是个高频需求。如果内网没有镜像源就把系统ISO挂载成本地源sudo mount -o loop Kylin-Desktop-V10-ARM64.iso /mnt/iso然后配置一个repo文件指向 /mnt/iso再执行 yum clean all 和 yum makecache 就能用本地源安装依赖包了。3. Qt 5.12.8 编译安装全流程3.1 离线源码准备与依赖库清单Qt官方的在线安装器在飞腾麒麟这套组合下基本用不了一是因为在线安装器本身没有适配aarch64的Linux版本二是很多国产化环境根本连不上外网。所以最稳妥的办法就是提前下载好 Qt 5.12.8 的完整源码包qt-everywhere-src-5.12.8.tar.xz在本地机器上编译安装。源码包解压tar -xvf qt-everywhere-src-5.12.8.tar.xz cd qt-everywhere-src-5.12.8编译之前先确保系统已经把编译工具链和Qt依赖的系统开发库都装齐了。这块千万别偷懒少装一个库后面编译就会在某个模块报错再回头排查很浪费时间。建议一次性装齐以下依赖包sudo yum install -y gcc gcc-c make cmake sudo yum install -y mesa-libGL-devel mesa-libEGL-devel sudo yum install -y fontconfig-devel freetype-devel sudo yum install -y libX11-devel libXext-devel libXrender-devel sudo yum install -y libxcb-devel libxkbcommon-devel libxkbcommon-x11-devel sudo yum install -y openssl-devel zlib-devel sudo yum install -y glibc-devel libstdc-devel有没有装齐全有个简单的检查方法——直接跑configure它会自动探测环境如果缺了关键依赖会在检测结果里标出来。better to提前装齐少折腾。3.2 configure参数逐项解释配好依赖后进入源码目录执行configure。这里参数的选择会直接决定编译出来的Qt能用哪些功能所以我展开讲讲每个关键参数的作用。我当时用的完整配置命令./configure -prefix /opt/Qt5.12.8 \ -opensource -confirm-license \ -release -shared \ -fontconfig -system-freetype -system-zlib \ -xcb -xkbcommon \ -no-qml-debug \ -nomake examples -nomake tests \ -skip qtwebengine逐个解释一下-prefix /opt/Qt5.12.8指定Qt安装目录。后面编译出来的库和头文件都会放到这个目录下建议统一放在 /opt 下面方便管理。-opensource -confirm-license选择开源协议并确认许可这是免不了的两步。-release -shared编译release版本不使用debug编译动态库而不是静态库。release版本的Qt性能远好于debug版动态库则方便多个应用共享减轻磁盘和内存压力。-fontconfig -system-freetype -system-zlib让Qt使用系统的字体和压缩库避免Qt自带的老版本库跟系统环境冲突。尤其在中文显示方面fontconfig的集成直接影响后续字体加载。-xcb -xkbcommon启用xcb平台插件和xkbcommon键盘输入支持。xcb是Qt在Linux桌面环境中最核心的平台插件缺少它Qt程序很可能无法正常显示窗口。-no-qml-debug关闭QML调试功能。这个功能在正式部署时用不上关闭后能减少一部分编译量和运行时开销。-nomake examples -nomake tests不编译示例和测试程序大幅节省编译时间。-skip qtwebengine跳过Qt的WebEngine模块。这个模块在ARM Linux下编译极其耗时而且依赖大量浏览器组件普通桌面应用用不到直接跳掉能省不少事。configure执行完后仔细看一下输出信息。如果某个依赖缺失它会明确提示比如The fontconfig library was not found之类的信息。有报错就及时补装依赖后重新执行configure。3.3 编译安装过程与耗时记录configure通过后执行编译make -j8-j8表示用8个线程并行编译。飞腾D2000是八核处理器这个参数刚好匹配。如果机器散热不太行适当降到 -j4 也完全可行只是慢一些。我在飞腾D2000上实测编译Qt 5.12.8大概需要50到70分钟中间如果出现某个模块编译报错先看是不是缺少对应的系统开发库装齐后重新执行make即可不用全部重来。编译结束后安装sudo make install安装完成后检查 /opt/Qt5.12.8 目录下是否有bin、lib、include、plugins等目录确认安装成功。3.4 环境变量配置与首次验证装好之后还需要把Qt的环境变量配置好否则qmake和Qt库都找不到。编辑用户级配置vim ~/.bashrc追加以下内容export PATH/opt/Qt5.12.8/bin:$PATH export LD_LIBRARY_PATH/opt/Qt5.12.8/lib:$LD_LIBRARY_PATH export QT_QPA_PLATFORM_PLUGIN_PATH/opt/Qt5.12.8/plugins/platforms export QT_QPA_FONTDIR/usr/share/fonts其中QT_QPA_PLATFORM_PLUGIN_PATH指定的是Qt平台插件路径如果不设置程序运行时可能提示找不到xcb插件。QT_QPA_FONTDIR指定了Qt加载字体的目录指向系统的字体目录能有效避免中文乱码问题。保存后执行 source ~/.bashrc 让配置生效然后验证qmake -v正常的话会输出 QMake version 3.1 和 Using Qt version 5.12.8 的字样。写一个最简单的测试程序验证实际操作环境#include QApplication #include QLabel int main(int argc, char *argv[]) { QApplication app(argc, argv); QLabel label(Hello 麒麟 飞腾 Qt 5.12.8); label.resize(480, 240); label.show(); return app.exec(); }保存为 main.cpp在旁边建一个同名的 .pro 文件QT core gui widgets SOURCES main.cpp编译运行qmake make ./hello如果一切顺利屏幕上应该能弹出一个显示“Hello 麒麟 飞腾 Qt 5.12.8”的窗口。能看到窗口说明这套环境已经通了后面就是往深了做适配优化。4. 深度适配字体、平台插件与场景优化4.1 中文字体缺失导致乱码的解决方案国产化环境下Qt应用最常遇到的一个问题就是中文显示成方块豆腐块。原因很直接——系统没有安装中文字体或者Qt没能找到匹配的字体。银河麒麟V10默认自带了一些字体但如果你的系统是精简安装可能就把中文字体给省掉了。解决方法是手动安装中文字体。最常用的有文泉驿正黑、文泉驿微米黑、Noto Sans CJK SC等。sudo yum install -y wqy-zenhei-fonts wqy-microhei-fonts如果需要安装其他字体把ttf或ttc文件放到 /usr/share/fonts 下面然后刷新字体缓存sudo fc-cache -fv另外还要确认系统locale是中文环境echo $LANG输出应该是 zh_CN.UTF-8。如果不是编辑 /etc/locale.conf 或通过系统设置修改语言。这里有个小细节Qt在启动时会读取locale信息来决定默认编码和字体匹配规则locale不对不仅影响系统也会影响Qt应用内的中文显示。4.2 xcb平台插件异常Qt启动黑屏或报错的排查Qt在Linux桌面环境正常运行依赖xcb插件。如果启动时报错Could not load the Qt platform plugin xcb in even though it was found基本可以断定是xcb插件缺少了依赖的动态库。排查方法很直接用 ldd 看插件库的依赖情况ldd /opt/Qt5.12.8/plugins/platforms/libqxcb.so输出里如果有 not found 字样说明缺对应依赖。常见的缺库有 libxcb-xinerama, libxcb-cursor, libxkbcommon-x11 等。用yum搜索包名补装即可sudo yum install -y libxcb-devel libxkbcommon-x11-devel装完再跑 ldd直到没有 not found 为止。另外在排查xcb插件问题之前先确认系统本身有没有装桌面环境。如果你把桌面版系统装成了无图形环境Qt应用从终端启动也会因为连不上X server而报错。最简单的方式是用echo $DISPLAY 检查是否有显示环境变量。如果没有要么切到图形登录界面要么在X会话里启动应用。4.3 高DPI与屏幕缩放适配国产化终端很多是23.8英寸1920x1080或者更大尺寸的屏幕有的甚至是4K。如果Qt应用不做高DPI适配字体和控件会显得特别小看得眼睛疼。Qt 5.12提供了两种缩放方案环境变量方式或代码方式。环境变量方式最简单在启动应用之前设置export QT_AUTO_SCREEN_SCALE_FACTOR1这样Qt会自动根据屏幕分辨率计算缩放比例适合大多数场景。如果自动缩放效果不理想还可以手动指定缩放倍数export QT_SCALE_FACTOR1.5代码方式是在main函数最前面主动设置#include QApplication int main(int argc, char *argv[]) { QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); QApplication app(argc, argv); // ... }AA_EnableHighDpiScaling让Qt在创建窗口时按DPI自动缩放AA_UseHighDpiPixmaps则让图标、图片在高DPI下保持清晰。需要注意的一点是高DPI缩放对程序使用像素级固定尺寸的布局会有影响。如果代码里大量直接使用 setFixedWidth(300) 这类写死的尺寸缩放后会出现控件显示不全的问题。所以在开发阶段就尽量使用布局管理器而不是硬编码坐标和尺寸这部分适配成本会更低。4.4 无GPU环境下的图形渲染策略飞腾设备的显卡性能通常不强有的终端甚至没有独立GPU用的是一体化主板上集成的精简显示核心。在这种情况下Qt默认使用的OpenGL硬件加速渲染可能失败导致程序启动黑屏。解决方法是让Qt使用软件渲染。设置以下环境变量export QT_OPENGLsoftware这个配置告诉Qt用软件方式处理OpenGL不依赖显卡驱动。实测在飞腾D2000集显平台上软件渲染的2D界面性能完全够用界面滑动、按钮点击都没有明显卡顿。如果软件渲染性能不够再检查mesa驱动是否正常安装glxinfo | grep OpenGL renderer输出里如果显示 llvmpipe 就说明当前正在用软件渲染如果显示具体的显卡型号则说明硬件加速正常。飞腾平台上通常需要安装 mesa-dri-driverssudo yum install -y mesa-dri-drivers装完重启应用看看渲染模式有没有变化。5. 性能调优实测从编译选项到运行时优化5.1 编译期性能优化O3、LTO与精简模块Qt编译完成后的性能上限很大程度上取决于你在编译应用时用了什么编译选项。默认的qmake生成的Makefile里release模式一般用-O2在飞腾上可以调整到更激进的优化级别。在应用的.pro文件里加上QMAKE_CXXFLAGS_RELEASE -O3 -marcharmv8-a-O3比-O2做更多的循环展开和向量化优化对计算密集的应用有肉眼可见的提升。-marcharmv8-a则告诉编译器可以放心使用ARMv8指令集不用为了兼容老处理器而保守。另外建议在发布应用时去掉调试符号strip ./your_appstrip后二进制体积通常能缩小20%到40%启动时间也会变短。如果应用模块很多、体积很大可以考虑在编译Qt时就裁剪掉用不到的模块。我在configure时用-skip qtwebengine跳过了WebEngineqt位置模块用不到也可以跳过-skip qtserialport -skip qtmultimedia -skip qtscript -skip qtwayland裁剪模块既能减少Qt安装体积也降低了运行时加载库的IO开销。但前提是你要清楚自己的应用确实用不到这些模块否则后面编译应用时缺少对应模块会更麻烦。5.2 运行时性能优化字体、事件循环与后台策略界面卡顿很多时候不是CPU不够而是某个环节做了很多无用功。我整理几个在飞腾麒麟上实测有效的运行时优化手段。字体渲染是很影响性能的一个点。字体文件过多、字体缓存过大会拖慢文本绘制。你可以设置Qt的字体缓存大小上限export QT_QPA_FONTDIR/usr/share/fonts export QT_FONT_DPI96QT_FONT_DPI设置统一的字体DPI避免Qt为不同显示器分别做缩放计算减少CPU开销。应用如果启动较慢可以检查是不是加载了太多插件。比如只用到xcb平台插件的应用就不需要让Qt去逐个检查其他平台插件。这个通常不是大问题但如果你用了很多QStyle可以明确只加载需要的样式避免启动时的库扫描。在业务层面如果应用中有大量定时器尽量把多个定时器合并到一个时间槽里统一处理减少事件循环被频繁唤醒的次数。举个例子状态栏刷新频率是500ms天气数据更新是5秒如果你开两个QTimer每秒会被唤醒4次如果合并成一个QTimer每500ms检查一次哪些任务需要执行事件循环唤醒次数减半。这在低功耗的飞腾平台上能直观感受到CPU占用率的下降。还有一个容易被忽略的点不要在主线程里做耗时IO。比如大文件读取、网络请求都应该丢到QtConcurrent或QThread中否则界面会明显卡白。飞腾处理器的单核性能和现代x86相比有差距线程模型设计得合理与否对用户体验影响比x86平台更大。5.3 性能分析用perf定位热点调优不能靠猜要用数据说话。Linux自带的perf工具完全可以胜任Qt应用的性能分析。安装perfsudo yum install -y perf用perf统计应用启动过程中的性能事件perf stat ./your_app这个命令会输出任务执行时间、上下文切换次数、CPU利用率、缓存未命中数等关键指标。如果上下文切换次数异常高说明线程模型可能有频繁锁竞争。定位具体热点函数用perf topsudo perf top在应用运行的同时查看实时热点。如果发现某个绘制函数占用CPU比例很高比如QPainter绘制文本可以考虑启用字体的缓存优化或者简化绘制逻辑。如果是启动时间太长用火焰图定位哪一步耗时最多。先把采样数据导出来sudo perf record -F 99 -g -p $(pgrep your_app) # 运行一段时间后按 CtrlC sudo perf script out.perf然后用FlameGraph工具生成火焰图能直观看到启动阶段的CPU时间分布。我在实际项目中用这个方法定位到应用启动时会扫描整个插件目录加载一堆无关插件通过配置文件限定只加载需要的模块后启动时间优化了约30%。这种优化方式对飞腾这种性能相对有限的平台效果非常明显。5.4 内存占用优化打印构建与指向复杂度飞腾平台内存通常为8G起步但Qt应用如果不加节制很容易吃满内存。几个控制内存的做法发布应用时尽量使用release版。debug版的Qt库本身就比release版多调试信息运行时也更耗内存。另外在Qt代码中大量使用QStringLiteral代替QString::fromUtf8可以减少启动时或频繁调用时字符串的重复构造。// 不推荐 label-setText(QString::fromUtf8(你好)); // 推荐 label-setText(QStringLiteral(你好));QStringLiteral在编译期就能构建好字符串数据运行时只做一次常量拷贝对频繁刷新文本的界面尤其友好。如果你发现应用长时间运行后内存持续增长优先检查是不是有对象没有释放或者容器没有清理。QObject的父子关系一定要理清楚父对象析构时会自动删除子对象但如果子对象是在堆上new出来却没有指定父对象就要手动管理释放时机。用QSharedPointer或QScopedPointer辅助管理这种场景会比较稳妥。6. 常见问题排查与速查手册6.1 高频报错与解决方案我在搭建这套环境时遇到了不少问题下面用表格把典型问题和解决办法整理出来方便大伙直接对照查阅。问题现象原因分析常用解决办法开机无法进入图形界面图形驱动异常或系统显示服务未启动检查 /var/log/Xorg.0.log重装 mesa-dri-drivers或从GRUB进入单用户模式修复Could not load the Qt platform plugin xcbxcb插件缺少依赖动态库ldd /opt/Qt5.12.8/plugins/platforms/libqxcb.so找到缺失库并安装中文显示为方块系统缺少中文字体或locale未设置安装wqy字体设置 LANGzh_CN.UTF-8执行 fc-cache -fvQt程序启动黑屏OpenGL硬件加速失败设置export QT_OPENGLsoftware界面显示比例异常太小或太大未启用高DPI支持设置QT_AUTO_SCREEN_SCALE_FACTOR1或在代码中启用AA_EnableHighDpiScaling编译Qt时提示找不到某个头文件对应的系统开发包未安装用yum安装对应-devel包WiFi搜索不到信号无线网卡固件缺失lspci确认网卡型号下载固件拷贝到/lib/firmware并重载驱动模块普通用户无法执行sudo用户不在sudo组用root执行 usermod -aG wheel 用户名make或qmake找不到命令PATH里没有Qt和编译工具路径确认~/.bashrc里已导出PATH并source生效6.2 系统命令速查高频使用的麒麟V10命令银河麒麟V10底层兼容Linux生态大量常用命令和CentOS系系统一致但有些命令在使用细节上略有差别。这里整理一批我在实操中高频使用的命令。系统信息查看cat /etc/os-release # 查看版本号 uname -r # 查看内核版本 hostnamectl # 查看主机信息和操作系统版本 lscpu # 查看CPU架构和核数 free -h # 查看内存使用情况 df -h # 查看磁盘空间用户与权限管理sudo passwd root # 设置或重置root密码 usermod -aG wheel 用户名 # 添加用户到wheel组以支持sudo useradd -m 用户名 # 创建新用户并创建家目录 passwd 用户名 # 设置用户密码软件包管理yum search 包名 # 搜索软件包 yum install -y 包名 # 安装软件包 yum remove 包名 # 卸载软件包 yum clean all # 清理缓存 yum makecache # 重建软件源缓存 rpm -qa | grep 关键词 # 查找已安装的包服务与进程管理systemctl status 服务名 # 查看服务状态 systemctl start 服务名 # 启动服务 systemctl enable 服务名 # 设置开机自启 ps -ef | grep 关键词 # 查看进程 kill -9 进程号 # 强制结束进程网络配置与排查nmcli device status # 查看网络设备状态 nmcli radio wifi on # 打开WiFi nmcli dev wifi list # 扫描WiFi ping -c 4 www.baidu.com # 测试网络连通性 ip a # 查看IP地址 ip route # 查看路由离线软件源配置使用ISO镜像sudo mount -o loop 镜像路径.iso /mnt/iso sudo cat /etc/yum.repos.d/local.repo EOF [local] namelocal baseurlfile:///mnt/iso enabled1 gpgcheck0 EOF sudo yum clean all sudo yum makecache6.3 一个容易忽略的点微信、浏览器等常规应用安装在实际使用中很多用户装完系统第一件事是装微信和浏览器。银河麒麟V10的应用商店里通常有微信Linux版和Firefox可以直接安装。如果需要从社区渠道获取微信安装包大概率给的是x86版或通用deb包在飞腾ARM架构下未必能直接安装。这种情况下的替代思路是选支持aarch64架构的安装包比如应用商店里的版本或者通过系统自带的“麒麟软件”工具搜索安装。Chrome在银河麒麟上通常也是通过商店或专用包安装。记住一点在ARM架构下不要随便下载一个rpm或deb就装先确认包架构是aarch64/arm64。用rpm -ivh或dpkg -i安装前可以用rpm -qpR或dpkg -I查看包信息和依赖避免装到一半报错收到一堆依赖问题。6.4 重置root密码的实用方法如果你在装系统时没有设置root账号密码或者密码忘了有一个实用的恢复方法。这个方法适用于银河麒麟V10的GRUB引导环境。重启机器在GRUB菜单出现时按e进入编辑模式找到以linux开头的那一行在末尾追加rd.break参数或者在标题为“高级选项”里选择恢复模式。按CtrlX引导后系统会进入一个临时的紧急模式。依次执行mount -o remount,rw /sysroot chroot /sysroot passwd root先挂载根目录为可写然后chroot进入真实系统环境执行passwd root设置新密码。设置完成后退出chroot重启即可正常登录。这个方法在不少场景下都能救急适用于系统还能进入GRUB引导的情况。如果系统加密了根分区还需要先处理解密步骤这里就不展开了。最后再分享几个实操心得搭建这套银河麒麟V10 飞腾 Qt 5.12.8环境我最大的体会是国产化环境的问题不是“某个软件不会装”而是整个生态和x86体系之间存在大量隐性差异很多问题在x86上是完全遇不到的。刚开始我以为Qt编译是最难的环节后来发现其实编译只要依赖库装齐、configure参数合理一次通过的几率非常高。真正耗时间的反而是编译完之后的适配中文显示、xcb插件、渲染模式、缩放比例这些细节一个一个蹦出来每个都不难解决但串起来就特别考验耐心。另一个心得是在飞腾这类ARM平台上做开发和调优心态要调整一下。不要指望它有和高端x86平台一样的流畅度但也不要因为一次卡顿就断定“国产化不行”。实际上把线程模型设计合理、把绘制逻辑调优、把不需要的功能裁剪干净之后飞腾D2000跑Qt应用在普通的政企办公场景下是完全不虚的。我的项目上线后用户的使用反馈是“主流操作响应都能接受”这就够了。如果你正在做类似的项目我的建议是先花时间把基础环境一次搭到位包括系统、源、依赖、Qt别再一块一块补丁式地搞然后多用perf、火焰图这类工具量化分析不要靠猜定位性能问题最后也是最重要的编译和部署的过程中每个步骤都做个简单的记录很多问题看似随机出现其实是某个前置条件没满足。这套经验放在这个国产化组合上也一样适用。
返回列表