是否可以在非常受限制的系统上使用Qt进行嵌入式项目,该系统运行一个8MB Falsh和32MB ram OpenWRT(典型的路由器配置)。
目标不是使用GUI,而是使用所有非gui类和信号/插槽概念以实现生产力目的。
到目前为止,有两个解决方案需要探索,最小化构建,但这似乎仍需要几MB。
静态构建,但很难评估最终大小。
任何经验丰富的反馈都会受到欢迎,要知道是否值得花时间尝试这一点,或者它是否是一个失败的原因,在哪种情况下哪种选择会有好处?
干杯
答案 0 :(得分:1)
从自定义Qt构建开始,并禁用您不会使用的所有功能。请参阅this configure doc page和qfeatures.txt - the list of configurable features。
用于Windows的静态构建的32位Qt 5可执行文件,除了系统dll之外没有依赖项,包括核心,gui,小部件和网络模块,没有禁用任何功能,而小型应用程序大约需要6MB。因此,如果压缩可执行文件并删除不需要的功能,则应占用<4MB。
似乎可以在你的系统上,只要你也可以在那里挤压内核。最有可能的是,您将把必要的内核模块,启动脚本,busybox和静态可执行文件放在作为根文件系统挂载的squashfs上。 squashfs需要编译到内核中,而不是作为单独的模块。
闪存将包含引导加载程序,内核,一个squashfs,可能还有一个兆字节的备用。
答案 1 :(得分:1)
以下是Embedded Linux Projects Using Yocto Project Cookbook
优化内核和rootfs的示例。
默认情况下,压缩的Linux内核映像(zImage)为 wandboard-quad就在附近 5.2 MB。这个方法将展示我们如何减少它。
Wandboard的最小内核配置示例 能够从microSD卡启动根文件系统是 arch / arm / configs / wandboard-quad_minimal_ defconfig文件如下:
CONFIG_KERNEL_XZ=y CONFIG_NO_HZ=y CONFIG_HIGH_RES_TIMERS=y CONFIG_BLK_DEV_INITRD=y CONFIG_CC_OPTIMIZE_FOR_SIZE=y CONFIG_EMBEDDED=y CONFIG_SLOB=y CONFIG_ARCH_MXC=y CONFIG_SOC_IMX6Q=y CONFIG_SOC_IMX6SL=y CONFIG_SMP=y CONFIG_VMSPLIT_2G=y CONFIG_AEABI=y CONFIG_CPU_FREQ=y CONFIG_ARM_IMX6_CPUFREQ=y CONFIG_CPU_IDLE=y CONFIG_VFP=y CONFIG_NEON=y CONFIG_DEVTMPFS=y CONFIG_DEVTMPFS_MOUNT=y CONFIG_PROC_DEVICETREE=y CONFIG_SERIAL_IMX=y CONFIG_SERIAL_IMX_CONSOLE=y CONFIG_REGULATOR=y CONFIG_REGULATOR_ANATOP=y CONFIG_MMC=y CONFIG_MMC_SDHCI=y CONFIG_MMC_SDHCI_PLTFM=y CONFIG_MMC_SDHCI_ESDHC_IMX=y CONFIG_DMADEVICES=y CONFIG_IMX_SDMA=y CONFIG_EXT3_FS=y
此配置构建了一个886 K压缩的Linux内核映像 (zImage的)。
小图像的示例,核心图像小,不包括 packagegroup- core-boot配方,可以作为a的基础 根文件系统映像缩小, recipes-core / images / core-image-small.bb,如下所示:
DESCRIPTION = "Minimal console image." IMAGE_INSTALL= "\ base-files \ base-passwd \ busybox \ sysvinit \ initscripts \ ${ROOTFS_PKGMANAGE_BOOTSTRAP} \ ${CORE_IMAGE_EXTRA_INSTALL} \ " IMAGE_LINGUAS = " " LICENSE = "MIT" inherit core-image IMAGE_ROOTFS_SIZE ?= "8192" DISTRO = "poky-tiny" INSANE_SKIP_glibc-locale = "installed-vs-shipped"
随着poky-tiny,图像的大小进一步减小到4左右 MB。
剩下的就是如何配置Qt以满足要求。