Qt/e体系结构概述

Qt/e体系结构概述

Qt for destop Linux 和 Qt for Embedded Linux 最大的区别就在于他们所依赖的底层显示基础的不同,这也就导致了他们在体系结构上的差异。对于Qt for desktop Linux来说,底层的显示技术构建在X Window System之上,完全依赖于X System,他们在下层完全是调用了X Lib的系统方法来把界面上的东西显示出来。

Qt for embedd linux在这方面则完全不同,它并没有构建在X Window之上,而是构建在Linux的Framebuffer之上,把在界面上需要显示的内容直接写入了framebuffer。因为在嵌入式系统上 把X System给省略了,这样会节省许多的系统开销。而直接写framebuffer,又会加快显示速度。这种区别如图所示:

qte.architecture

但就是这一个改变,导致了在Qt/e凭空多出了一个Server这么一层,这一层负责监听系统事件(尤其是键盘和鼠标事件),屏幕输出,管理 region,管理顶层窗口,管理光标和屏幕保护程序等等诸多功能。系统产生的键盘鼠标事件,首先就传给了这个server application,然后server在根据具体的情况把这些事件分发给相应的应用程序.

每一个Qt/e应用程序,都需要这样一个server存在。一个程序运行起来后,于是自己成为Server进程,因为它连接到了一 个已经存在的Server进程。所以,第一个运行起来的Qt/e应用程序就会启动这个server让自己成为这个Server进程,后续运行的程序就会连 接到这个Server来管理自己。

每一个Server实例都是由一个QWSServer类来实现的。

在Server端,每一个连接到QWSServer的client都有一个QWSClient对象与之对应,这个对象主要记录了client ID。在应用程序中每创建一个顶层窗口,那么在server端就会有创建一个QWSWindow实例来与之对应。

每当Server收到一个event 的时候,它需要判断应该发送给那一个窗口,这时候,它就会从QWSWindow列表中去找,然后根据这个窗口去找对应的client application,然后用一个QWSEvent对象来包装这个event,通过socket机制发送给具体的client application。如果当前系统安装了一个输入法,那么每一次键盘事件产生的时候,都会去调用输入法的相应方法。
如图所示(取自Qte文 档):

qt-embedded-clientservercommunication

鼠标事件的处理和键盘事件的处理也符合上面的流程。鼠标驱动由一个QWSMouseHandler对象封装,键盘驱动由一个 QWSKeyboardHandler封装。这两个驱动程序对象都会通过Qt的plugin机制加载。具体的鼠标和键盘事件发生之后,都会由各自的驱动程 序封装成为一个 QWSEvent对象并发送给Server,然后由Server发送给具体的client。如图所示(取自Qte文档):

qt-embedded-pointerhandlinglayer

qt-embedded-characterinputlayer

图形输出 Qt/e的缺省行为是每一个widget会把自己画在一块内存中,然后由Server负责把这快内存 copy到Linux的Framebuffer上去,如图所示(取自Qte文档):

qt-embedded-clientrendering

但是对于大多数嵌入式系统来说,其中的显示子系统都是确定的,这样对于client应用程序来说,就可以直接输出到Framebuffer上面去。 有两种 方法可以实现这一点,第一种是为每一个Widget都设置Qt::WA_PaintOnScreen属性,另一种是QDirectPainter来在 Framebuffer中保留一块区域,如图所示(取自Qte文档):

qt-embedded-setwindowattribute

qt-embedded-reserveregion

### FT2000/4 处理器在银河麒麟 V4 操作系统上的安装教程 #### 环境概述 银河麒麟 V4 是一款基于 Linux 的国产操作系统,主要支持飞腾系列处理器。对于 FT2000/4 处理器的支持,通常需要特定的硬件配置和软件环境调整。以下是针对该平台的操作指南。 --- #### 一、准备工作 1. **获取镜像文件** 下载适合 FT2000/4 平台的银河麒麟 V4 ISO 文件。可以通过官方渠道或者授权站点下载对应的版本。 2. **制作启动 U 盘** 使用 UltraISO 或其他类似工具将 ISO 文件写入到 U 盘中。操作步骤可参考已有文档中的相关内容[^2],注意选择合适的写入模式(如 USB-HDD+)以及 Syslinux 引导扇区设置。 3. **检查 BIOS 设置** 将目标主机的 BIOS 启动项更改为优先从 U 盘启动,并确保启用了 Legacy Boot 支持。 --- #### 二、系统安装过程 1. **启动安装界面** 插入已准备好的 U 盘并重启计算机,通过 BIOS 菜单选择从 U 盘启动。进入银河麒麟 V4 的图形化安装向导。 2. **分区与格式化** 在安装过程中,需手动或自动分配磁盘空间。建议为根目录 `/` 和交换分区 `swap` 创建独立的空间划分。如果计划长期运行开发环境或其他复杂应用,可以额外预留一些存储区域用于数据保存。 3. **网络连接配置** 若联网功能可用,则可以在安装阶段同步更新最新的补丁程序;否则后续可能需要单独处理离线升级事宜。 4. **完成初始化设定** 输入用户名密码等基本信息后等待整个部署流程结束即可获得基础版的工作桌面环境。 --- #### 三、常见依赖库及工具链构建 由于部分开源项目可能存在兼容性差异,因此有必要预先搭建好必要的编译环境: ```bash yum groupinstall "Development Tools" yum install gcc-c++ make automake autoconf libtool pkgconfig cmake perl wget bzip2 tar gzip unzip pcre-devel zlib-devel openssl-devel readline-devel sqlite-devel ncurses-devel glibc-static libstdc++-static expat-devel curl-devel git python-setuptools rpm-build redhat-rpm-config ``` 以上命令列出了大多数情况下所需的通用组件清单[^1],实际执行时应视具体情况增减条目。 --- #### 四、典型应用程序移植实例——以 MySQL 数据库为例 假设要源码形式安装旧版本数据库引擎 (e.g., MySQL 5.1.x),则按照如下顺序逐步推进: 1. 解压压缩包至指定位置; ```bash tar zxvf mysql-5.1.73.tar.gz -C /usr/src/ cd /usr/src/mysql-5.1.73/ ``` 2. 执行 configure 脚本检测当前机器特性参数; ```bash ./configure --prefix=/usr/local/mysql \ --with-extra-charsets=all \ --enable-thread-safe-client \ --disable-shared \ --without-debug ``` 3. 编译加链接生成最终产物; ```bash make && make install ``` 4. 初始化管理账户体系结构; ```bash scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/var/lib/mysql cp support-files/my-large.cnf /etc/my.cnf chown -R root:mysql /usr/local/mysql chmod +x /etc/init.d/mysql.server chkconfig --add mysqld service mysqld start ``` 至此已完成基本服务端口监听状态激活工作流描述[^1]。 --- #### 五、高级定制选项举例说明 —— Qt 开发框架适配案例分析 当涉及到 GUI 应用场景下的跨平台迁移改造任务时,往往离不开第三方图形渲染类库的帮助。这里选取了较为流行的 C++ 绑定解决方案之一即 Qt 工具集作为示范对象来阐述具体实现方法论要点所在之处: 调用其自带脚本传参定义交叉编译路径规则从而满足不同 CPU 架构间无缝切换需求条件限制前提下达成预期效果表现形式呈现出来给读者朋友们分享学习参考资料借鉴价值意义非凡重要程度不言而喻[^3]: ```bash ./configure -prefix /opt/qt-everywhere-src-5.9.8/arm64 \ -device linux-aarch64-gnu-g++ \ -sysroot $(pwd)/aarch64-sysroot \ -opensource -confirm-license \ -release -reduce-relocations \ -no-pch -opengl es2 -eglfs \ -skip webengine -nomake examples -nomake tests make -j$(nproc) make install ``` --- #### 总结陈词 综上所述,围绕着如何顺利开展基于飞腾 FT2000/4 微架构之上所搭载之银河麒麟 OS 版本号等于四这一特殊组合情形之下展开论述探讨研究方向思路清晰明了易懂便于理解掌握运用实践操作性强效率高成果显著值得推广普及开来让更多同行受益匪浅收获满满!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值