tag 标签: arm

相关帖子
相关博文
  • 热度 1
    2024-3-15 11:22
    166 次阅读|
    0 个评论
    SPI(Serial Peripheral Interface)通信总线以其高速、全双工、同步的特性而被广泛应用,它只需要四根线就能实现数据传输,有效地节约了芯片管脚的数量,同时为PCB布局带来了空间上的优化和便捷。正因为它简单易用的特点,现在越来越多的芯片选择集成SPI通信协议。 作为TI Sitara™产品线新一代MPU产品,TI AM62x处理器特别配备了多达4路的SPI接口以及1路OSPI接口(有时也称为QSPI),丰富的SPI接口配置使得该处理器能够同时与多个设备进行通信连接,大大提高了系统的扩展性和灵活性。 在飞凌嵌入式推出的搭载了AM62x处理器的OK6254-C开发板上,NOR Flash存储器正是通过连接到处理器的OSPI总线上进行工作的。这样的设计充分利用了SPI通信协议的高速传输和全双工特性,保证了开发板在数据处理和存储方面的效率。本文就通过OK6254-C开发板为大家介绍一下AM62x的SPI。 1、SPI的工作流程和时序 我们首先需要了解一下SPI是如何工作的——通常SPI通过4个引脚与外部器件相连: (1) MISO:主设备输入/从设备输出引脚 该引脚在从模式下发送数据,在主模式下接收数据; (2) MOSI:主设备输出/从设备输入引脚 该引脚在主模式下发送数据,在从模式下接收数据; (3) CLK:串口时钟 作为主设备的输出,从设备的输入; (4) NSS:从设备选择 这是一个可选的引脚,用来选择从设备。 SPI的工作流程是这样的: (1) 主机先将NSS信号拉低,这样保证开始接收数据; (2) 当接收端检测到时钟的边沿信号时,将立即读取数据线上的信号,这样就得到了一位数据; (3) 由于时钟是随数据一起发送的,因此指定数据的传输速度并不重要,尽管设备将具有可以运行的最高速度; (4) 主机发送到从机时,主机产生相应的时钟信号,然后数据一位一位地将从MOSI信号线上进行发送到从机; (5) 主机接收从机数据时,如果从机需要将数据发送回主机,则主机将继续生成预定数量的时钟信号,并且从机会将数据通过MISO信号线发送。 SPI工作时序图如下: 2、AM62x处理器中SPI总线的特点 在AM62x这款芯片中,TI将SPI的MISO与MOSI设计为d0和d1,具体哪一个作为输入,哪一个作为输出,是由设备树中的 ti,pindir-d0-out-d1-in= 来设置的。 默认属性值为0,即d0是输入,d1是输出; 当属性值为1时,d0为输出,d1为输入。 3、AM62x的SPI应用 (1)menuconfig配置: 将该项选中,SPI驱动将编译进内核中。 makemenuconfi Usermode SPI device driver support (注:在飞凌嵌入式OK6254-C开发板中,SPI驱动编译已进去。) (2)设备树配置: 1) 选择需要使用的spi,这里我们用spi0,节点为&main_spi0; 2) 将该节点所用的引脚复用为相应的功能。 spi0_pins_default: spi0-pins-default { pinctrl-single,pins = < AM62X_IOPAD(0x1B4, PIN_OUTPUT, 0) /* (A13) SPI0_CS0 */ AM62X_IOPAD(0x1B8, PIN_OUTPUT, 0) /* (C13) SPI0_CS1 */ AM62X_IOPAD(0x1C0, PIN_INPUT, 0) /* (B13) SPI0_D0 */ AM62X_IOPAD(0x1BC, PIN_OUTPUT, 0) /* (A14) SPI0_CLK */ AM62X_IOPAD(0x1C4, PIN_INPUT, 0) /* (B14) SPI0_D1 */ ; }; 3) 描述节点的属性,具体配置项的功能见注释。 &main_spi0 { status = "okay"; pinctrl-names = "default"; pinctrl-0 = ; /* 描述引脚复用节点 */ ti,spi-num-cs = ; /* 描述片选的数量 */ ti,pindir-d0-out-d1-in = ; /* 描述输入输出分别是哪个 */ /* 描述子节点spidev0设备 */ spidev@0 { spi-max-frequency = ; /* 描述spidev0设备的最大频率 */ reg = ; /* 描述spidev0设备所用的片选,这里是第0个 */ spi-cs-high; /* 描述spidev0设备高有效 */ compatible = "rohm,dh2228fv"; /* 描述spidev0设备所用驱动 */ }; /* 描述子节点spidev1设备 */ spidev@1 { spi-max-frequency = ; reg = ; compatible = "rohm,dh2228fv"; }; }; (3)编译烧录: 在源码路径下输入以下命令: . build.sh sudo ./build.sh kernel 没有报错即为编译成功。 将源码路径下的image中的OK6254-C.dtb文件放到开发板的/boot目录中,重启开发板即可。 (4)SPI测试: 将spi0_D0和spi0_D1短接 重启开发板后,在/dev目录下看到多出两个spidev设备。 使用我们的测试程序 fltest_spidev_test -D /dev/spidev3.0 -s 42000 有如下打印信息即为成功: spimode: 0 bitsper word: 8 maxspeed: 42000 Hz (42 KHz) FFFF FF FF FF FF 4000 00 00 00 95 FFFF FF FF FF FF FFFF FF FF FF FF FFFF FF FF FF FF DEAD BE EF BA AD F00D 4、总结 TI AM62x处理器有着丰富的SPI资源,而SPI又可以作为许多设备的总线,这使得AM62x能够接入许多SPI接口的设备,因此在那些对SPI有着比较多需求的应用场景下,TI AM62x无疑是一个非常好的主控选择。
  • 热度 1
    2024-3-15 09:40
    139 次阅读|
    0 个评论
    完美落幕 | 回顾飞凌嵌入式的CIES之行
    2024年3月13日,备受瞩目的第十四届中国国际储能大会暨展览会(简称CIES)完美落幕。本次大会以“共建储能生态链,共创储能新发展”为主题,汇聚了业内众多的杰出企业共同探讨和分享储能领域可持续发展项目的应用案例、创新产品以及解决方案的深化应用。 飞凌嵌入式携多款广泛应用于储能与电力行业的嵌入式智能主控产品亮相本次大会。 飞凌嵌入式深耕储能与电力行业,推出的产品在能耗监测、储能网关、EMS、通讯管理机、局放、网闸、充电桩、巡检机器人、电能质量分析仪等众多设备上有着广泛应用。 飞凌嵌入式的展位上整齐地摆放着多款智能主控产品,如FET3568-C、FET113i-S、FETMX6ULL-C和FET6254-C等热门的嵌入式核心板以及FCU2601和FCU1104等储能EMS网关,这些产品都是飞凌嵌入式近年来在储能与电力行业得到广泛应用的主控产品,吸引了众多参观者的目光。 此外,飞凌嵌入式还与多家储能与电力行业的伙伴进行了交流和学习,彼此分享最新的市场趋势前沿、技术研发动态以及未来发展方向。通过交流,飞凌嵌入式不仅了解了行业的最新动态,还找到了更多的合作机会。 CIES 2024已经落下帷幕,展望未来,飞凌嵌入式将继续深耕储能与电力行业的技术研发和产品创新,与更多行业伙伴携手面对机遇和挑战,赢得更多发展新机会,把握新未来。
  • 热度 2
    2024-3-8 11:37
    299 次阅读|
    1 个评论
    B y Toradex 胡珊逢 简介 Verdin iMX8M Plus 具有四个串口,其中 UART3 是用于 A53 核心上的系统如 Linux 的默认调试串口,出于设计需要可能需要将调试口换到其他串口,文章将介绍如何使用 UART1 作调试串口。 硬件介绍 Verdin iMX8M Plus 的四个串口 UART1 ~ UART4 中, UART3 为默认的 A53 调试串口, UART4 为 M7 调试串口,其余两个作为通用 UART 使用。 Verdin 系列的模块均使用 1.8V TTL 电平,在连接外部设备时请先检查电压。本次测试使用的是 Dahlia 底板,在 X20 扩展接口 Pin12 和 Pin13 分别将模块的 UART1_RXD 和 UART1_TXD 引出。四个串口的物理地址如下: UART 起始地址 结束地址 UART1 0x3086_0000 0x3086_FFFF UART2 0x3089_0000 0x3089_FFFF UART3 0x3088_0000 0x3088_FFFF UART4 0x30A6_0000 0x30A6_FFFF 软件修改 调试串口更改的软件涉及到三个部分, ATF 、 U-Boot 和 Linux 。 ATF 会和 U-Boot 等其他文件如 DDR 固件一起打包成用于 NXP i.MX 8M Plus 处理器的启动文件。这些文件的下载和编译请参考 该网页 。文章使用到的完整补丁请从 这里下载 。 ATF ATF 代码的 imx8mp_bl31_setup.c 中,把 RDC_PDAP_UART1 划分到 A53 所在的 D0 域。 --------------------------- --- a/plat/imx/imx8m/imx8mp/imx8mp_bl31_setup.c +++ b/plat/imx/imx8m/imx8mp/imx8mp_bl31_setup.c @@ -53,7 +53,7 @@ static const struct imx_rdc_cfg rdc = { - MX8MP_PAD_UART3_RXD__UART3_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL), - MX8MP_PAD_UART3_TXD__UART3_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL), + MX8MP_PAD_UART1_RXD__UART1_DCE_RX | MUX_PAD_CTRL(UART_PAD_CTRL), + MX8MP_PAD_UART1_TXD__UART1_DCE_TX | MUX_PAD_CTRL(UART_PAD_CTRL), }; imx_iomux_v3_setup_multiple_pads(uart_pads, ARRAY_SIZE(uart_pads)); - init_uart_clk(2); + init_uart_clk(0); return 0; } --------------------------- 在 include/configs/verdin-imx8mp.h 将 CONFIG_MXC_UART_BASE 的地址也设置为 UART1 。同时修改 console 。 --------------------------- --- a/include/configs/verdin-imx8mp.h +++ b/include/configs/verdin-imx8mp.h "boot_script_dhcp=" BOOT_SCRIPT "\0" \ - "console=ttymxc2\0" \ + "console=ttymxc0\0" \ "fdt_board=dev\0" \ @@ -111,7 +111,7 @@ #define PHYS_SDRAM_2_SIZE (SZ_4G + SZ_1G) /* UART */ -#define CONFIG_MXC_UART_BASE UART3_BASE_ADDR +#define CONFIG_MXC_UART_BASE UART1_BASE_ADDR /* Monitor Command Prompt */ #define CONFIG_SYS_CBSIZE SZ_2K --------------------------- Linux Linux 的 device tree 同样也需要做修改。在 freescale/imx8mp-verdin-dev.dtsi 中取消 UART1 默认配置下的 RS485 功能。 --------------------------- --- a/arch/arm64/boot/dts/freescale/imx8mp-verdin-dev.dtsi +++ b/arch/arm64/boot/dts/freescale/imx8mp-verdin-dev.dtsi /* Verdin UART_1, connector X50 through RS485 transceiver */ &uart1 { + /* linux,rs485-enabled-at-boot-time; rs485-rts-active-low; rs485-rx-during-tx; + */ status = "okay"; }; --------------------------- imx8mp-verdin.dtsi 中更改 stdout-path 调试串口输出至 UART1 ,并删除 RTS 和 CTS 功能引脚。 --------------------------- --- a/arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi +++ b/arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi @@ -8,7 +8,7 @@ / { chosen { - stdout-path = &uart3; + stdout-path = &uart1; }; aliases { @@ -891,7 +891,7 @@ &snvs_pwrkey { &uart1 { pinctrl-names = "default"; pinctrl-0 = ; - uart-has-rtscts; + /* uart-has-rtscts; */ }; /* Verdin UART_2 */ @@ -1331,8 +1331,8 @@ pinctrl_sai3: sai3grp { pinctrl_uart1: uart1grp { fsl,pins = - , /* SODIMM 135 */ - , /* SODIMM 133 */ + /* , SODIMM 135 */ + /* , SODIMM 133 */ --------------------------- 修改完毕上述文件后重新编译 flash.bin ( imx-boot )和 device tree 文件,并将其放入支持 Toradex Easy Installer 烧录的镜像文件中。同时也需要修改镜像文件中的 u-boot-initial-env-sd ,将 console 改为 console=ttymxc0 。该文件会在烧录系统时配置 U-Boot 环境变量。安装完镜像后,在 UART1 即可看到启动日志。 总结 通过上述几个文件的修改,可以切换 A53 调试串口。对于 Linux 系统通常建议保留一个调试串口,这将有利于调试和后期其他问题排查。
  • 2024-3-1 11:46
    154 次阅读|
    0 个评论
    两轮自平衡PID小车是一种利用PID(比例-积分-微分)控制算法来实现自动平衡和移动的机器人。这种小车通常包含电机驱动、传感器、电源、微控制器等部分。其中,微控制器是小车的核心,负责处理传感器数据、执行PID算法,以及控制小车的电机。 在这个场景中,32-bit Arm® Cortex®-M4F内核的微控制器是一个理想的选择,因为它具有高性能、低功耗和丰富的外设接口。Cortex-M4F还支持浮点运算和DSP指令,这对于执行PID算法是非常有利的。 对于两轮自平衡PID小车,I2C接口通常用于连接一些传感器,比如加速度计、陀螺仪等。这些传感器能够提供小车的姿态信息,比如倾斜角度、加速度等,这些信息是PID算法的重要输入。 在电控方面,两轮自平衡PID小车需要一套稳定的电源系统来供电,同时还需要一套电机驱动系统来控制小车的运动。电机驱动系统通常会接收微控制器发出的PWM(脉宽调制)信号,通过改变电机的转速来实现小车的平衡和移动。 关于程序代码,编写两轮自平衡PID小车的程序通常涉及以下几个步骤: 初始化微控制器和外设接口,包括I2C、PWM等。 配置传感器,比如加速度计和陀螺仪,读取它们的数据。 实现PID算法,根据传感器数据计算控制量。 将控制量转换为PWM信号,发送给电机驱动系统。 循环执行以上步骤,实现小车的自动平衡和移动。 由于程序代码涉及到底层硬件操作和算法实现,通常需要根据具体的硬件平台和传感器型号进行编写。因此,这里无法提供一个通用的程序代码示例。如果您需要具体的程序代码帮助,建议您查阅相关的开发文档和教程,或者向专业的嵌入式开发人员寻求帮助。
  • 2024-1-19 14:39
    717 次阅读|
    0 个评论
    B y Toradex 胡珊逢 简介 在嵌入式Linux设备上常使用Qt作为开发图形界面应用的框架,随着web和移动端图形框架技术快速发展,嵌入式Linux也可以从这些技术中受益。由Google开发的Flutter最初用于Android和iOS应用开发,后期加入web、Windwos桌面和Linux桌面的支持。配合适当的渲染引擎,Flutter也可以运行在嵌入式Linux设备上。文章将介绍如何在使用Linux BSP的Verdin iMX8M Plus上运行Flutter应用。 硬件介绍 本次演示使用基于NXP iMX8M Plus SoC 的计算机模块 Verdin iMX8M Plus 。底板为 Dahlia ,该底板可以直接使用Verdin iMX8M Plus 的 HDMI 显示输出。屏幕则使用支持电容屏的 HDMI 显示器,用于测试 Flutter 应用的交互性。 Flutter介绍 Flutter使用Dart语言开发,可以跨平台运行,支持AOT(Ahead of time)预编译,使应用在设备上更高效地运行。对于Flutter应用,用户通常只需要开发apps代码,Framework、Engine和Embedder都油Flutter SDK提供。使用不同的embedder,Flutter app可以运行在不同的平台上。目前官方支持embedder包括Android,iOS,MacOS、Windwos桌面、Linux桌面、Web浏览器 Linux桌面需要依赖GTK和X11,现在的嵌入式Linux系统已经普遍使用Wayland,例如NXP的iMX处理器在新的BSP已经不再支持X11。对于嵌入式Linux系统,可以使用下面两个非官方的embedder。 Flutter-elinux ,这是由Sony 维护的项目,支持 Arm64 和 X64 处理器。可以使用 Wayland 或者 X11 后台,或者直接基于 DRM。 Flutter-pi 是针对树莓派开发和优化的embbeder,其不依赖于 X11 和 GTK 的任何组件。支持 KMS 和 DRI,3D 硬件加速。可以运行在 ARMv7、ARMv8、x86 处理器上。Flutter-pi 拥有更活跃的社区和开发者。结合 flutterpi_tool 工具可以非常容易地开发flutter 应用。 Verdin iMX8M Plus 的 Linux BSP 支持 KMS,其 CPU 也是 Armv8 架构。因此,我们本次选用 Flutter-pi 作为 embedder。关于 Flutter-elinux 在 Toradex 模块上的应用,可以参考 该文章 。 添加meta-flutter meta-flutter 提供了编译flutter-pi 以及 flutter demo 的文件。meta-flutter 依赖 meta-clang layer。Toradex Linux BSP v6 基于 Yocto Project 的 kirkstone 分支。首先,参考 这里 创建Yocto Project 编译环境。然后进入 layers 文件夹,下载 meta-flutter 和 meta-clang。 $ git clone --branch kirkstone https://github.com/meta-flutter/meta-flutter.git $ git clone --branch kirkstone https://github.com/kraj/meta-clang.git 然后在build/conf/bblayers.conf 文件的 BBLAYERS 中添加 meta-flutter 和 meta-clang 的路径。 BBLAYERS ?= " \ ${BBLAYERS_NXP} \ ... ${TOPDIR}/../layers/meta-clang \ ${TOPDIR}/../layerss/meta-flutter \ " 在build/conf/local.conf 文件的结尾添加以下内容。 DEFAULT_TIMEZONE = "Asia/Shanghai" ENABLE_BINARY_LOCALE_GENERATION = "1" IMAGE_LINGUAS:append = " en-us en-gb es-us zh-cn" GLIBC_GENERATE_LOCALES:append = " en_US.UTF-8 es_US.UTF-8 en_GB.UTF-8 zh_CN.UTF-8" IMAGE_INSTALL:append = " tzdata-core tzdata-asia" DISTRO_FEATURES:append = " opengl wayland pam" PACKAGECONFIG:append:pn-weston = " remoting" PACKAGECONFIG:append:pn-flutter-engine = " profile debug" IMAGE_INSTALL:append = " flutter-auto packagegroup-flutter-test-apps \ flutter-pi flutter-gallery" IMAGE_INSTALL:remove = " packagegroup-tdx-qt5" 删除meta-flutter/recipes-platform/packagegroups/ packagegroup-flutter-test-apps.bb 中的 flutter-test-texture-egl。最后编译 tdx-reference-multimedia-image 镜像文件。 $ bitbake tdx-reference-multimedia-image 测试Flutter 应用 禁用自启动的weston 服务。 root@verdin-imx8mp:~# systemctl stop weston.service root@verdin-imx8mp:~# systemctl disable weston.service 镜像中的/usr/share/flutter/gallery/3.16.5/release 中已经包含一个 flutter gallery 应用,现在可以使用 flutter-pi 直接运行。 root@verdin-imx8mp:# cd /usr/share/flutter/gallery/3.16.5/release root@verdin-imx8mp:# flutter-pi --release ./ 在HDMI 显示器上可以看到 gallery 应用的界面。 安装Flutter SDK 和 flutterpi_tool 在Linux 电脑(例如 Ubuntu 23.04)上,首先安装 Flutter SDK。由于 Flutter 和 flutter-pi 两个项目更新都比较活跃,在安装前需求确认 Flutter 版本。在 这里 查看flutter-pi 目前使用的 Flutter 版本。例如撰写文章时其为 3.16.7。在 Flutter SDK 手动安装页面 选择对应的版本进行安装,如flutter_linux_3.16.7-stable.tar.xz。 $ sudo apt-get install clang cmake git ninja-build \ pkg-config libgtk-3-dev liblzma-dev libstdc++-12-dev $ cd FLUTTER_SDK_INSTALL_PATH $ tar vxf flutter_linux_3.16.7-stable.tar.xz $ export PATH="$PATH:`pwd`/flutter/bin" $ flutter doctor -v 上面的flutter 环境诊断工具如果提示缺少 chrome 浏览器,可以安装后再运行。 $ sudo dpkg -i google-chrome-stable_current_amd64.deb $ flutter doctor -v 检查flutter 和 dart 命令是否都来自同一个的 SDK 安装目录。 $ which flutter dart /home/ben/flutter-sdk/flutter/bin/flutter /home/ben/flutter-sdk/flutter/bin/dart 安装完Flutter SDK 后使用下面命令安装 flutterpi_tool $ flutter pub global activate flutterpi_tool $ export PATH="$PATH":"$HOME/.pub-cache/bin" 使用下面命令测试 $ flutterpi_tool --help 如果已经安装好Flutter SDK 和 flutterpi_tool,需要编译其他 flutter 应用时,只需要进入之前 Flutter SDK 的安装目录后执行下面命令,重新配置编译环境即可。 $ cd FLUTTER_SDK_INSTALL_PATH $ export PATH="$PATH:`pwd`/flutter/bin" $ export PATH="$PATH":"$HOME/.pub-cache/bin" 使用flutterpi_tool 编译应用 借助flutterpi_tool 可以非常简单的编译 flutter 应用,例如针对 64 位 Arm CPU 的编译命令 flutterpi_tool build --arch=arm64 --cpu=pi4 --release ,参数说明如下: 参数 说明 Runtime mode --debug Build for debug mode. --profile Build for profile mode. --release Build for release mode. --debug-unoptimized Build for debug mode and use unoptimized engine. (For stepping throughengine code) Target,--arch= arm Build for 32-bit ARM. (armv7-linux-gnueabihf) arm64 Build for 64-bit ARM. (aarch64-linux-gnu) x64 Build for x86-64. (x86_64-linux-gnu) Target,--cpu= generic (default) Don’t use a tuned engine. The generic engine will work on all CPUs of the specified architecture. pi3 Use a Raspberry Pi 3 tuned engine. Compatible with arm and arm64. (-mcpu=cortex-a53+nocrypto -mtune=cortex-a53) pi4 Use a Raspberry Pi 4 tuned engine. Compatible with arm and arm64. (-mcpu=cortex-a72+nocrypto -mtune=cortex-a72) 下面是在Linux电脑上编译flutter gallery应用。由于Verdin iMX8M Plus是基于arm64的Cortex-A53 CPU,因此选择--arch=arm64和--cpu=pi3两个参数。 $ git clone https://github.com/flutter/gallery.git flutter_gallery $ cd flutter_gallery/ $ git checkout 6a8d738c94d0710e229d726729c09fdb5ccaf7ed $ flutter pub get $ flutterpi_tool build --arch=arm64 --cpu=pi3 --release 编译结束后,在build/flutter_assets 目录下可以看到如下文件。 build/flutter_assets/ ├── app.so ├── AssetManifest.bin ├── AssetManifest.json ├── FontManifest.json ├── fonts ├── icudtl.dat ├── libflutter_engine.so ├── NOTICES.Z ├── packages └── shaders flutteri_tool 目前使用新的编译方法生成的文件结构尚不能直接使用 flutter_pi 在设备上直接运行,需要重新调整文件位置,参考 Verdin iMX8M Plus 上的 /usr/share/flutter/gallery/3.16.5/release 的内容。 release/ ├── data │ ├── flutter_assets │ └── icudtl.dat └── lib ├── libapp.so └── libflutter_engine.so 在flutter_gallery/build/flutter_assets/ 目录创建 data 和 lib 两个文件夹,app.so 重命名为 libapp.so 后和 libflutter_engine.so 一起移动到 lib 目录。icudtl.dat 移动到 data 目录下。在 data 目录下创建 flutter_assets 文件夹后,将 build/flutter_assets/ 中剩余的 AssetManifest.bin,AssetManifest.json,FontManifest.json,fonts,NOTICES.Z,packages 和 shaders 均移动到 data/flutter_assets 中。完场后将 data 和 lib 两个目录复制到 Verdin iMX8M Plus 上的 /home/root/flutter_gallery 目录中,例如使用 scp 命令。 $ scp -r build/flutter_assets/ root@imx8mp_ip:/home/root/flutter_gallery 复制好文件后可以在Verdin iMX8M Plus 上的 /home/root/flutter_gallery 看到以下内容。 root@verdin-imx8mp-07320826:~/flutter_gallery# ls * data: flutter_assets icudtl.dat lib: libapp.so libflutter_engine.so 运行下面命令即可启动在电脑上编译的flutter 应用。 root@verdin-imx8mp:~# flutter-pi --release /home/root/flutter_gallery/ 总结 使用Flutter 可以开发跨平台应用,并获得流畅的本地运行体验,在移动端和 Web 端都有广泛的应用。但是针对嵌入式 Linux 的 embedder 目前是第三方维护的,所以在实际应用时需要做详尽的测试。 ​
相关资源