tag 标签: arm

相关帖子
相关博文
  • 热度 1
    2021-6-10 14:45
    332 次阅读|
    0 个评论
    疫情爆发,“缺芯潮”来袭,ZYNQ系列出货量剧增如何满足供求,看这里!
    1、疫情爆发,加剧“缺芯潮”! 据中国台湾《经济日报》6月5日消息,中国台湾半导体封测大厂京元电子(King Yuan Electronics)竹南厂发生聚集性感染事件,6月3日,京元电子就有45人确诊,4日又新增32例,5日又增加54人,截至目前,京元电子厂共有210人确诊。 同样作为全球芯片封测中心,占据了13%的封测市场份额的马来西亚,于6月1日开始进入第二次全国性“全面”封锁,封锁将持续到14日。 疫情的爆发,必然会导致众多半导体工厂产线运作能力下降,甚至是停工停产,从而造成处理器的产能下降,进一步加剧“缺芯潮”。 图 1 芯片封测 2、异构多核成为主流,ZYNQ系列出货量剧增! 伴随着产品性能的提升,对处理器的性能要求也越来越高,单一核心处理器已无法满足,异构多核处理器逐渐成为工业市场新宠。随着异构多核逐步成为行业主流架构,Xilinx ZYNQ系列处理器出货量剧增。以Zynq-7010/7020核心板为例,创龙科技2021年上半年的出货量,已超过2020全年出货量的200%! SOM-TLZ7x核心板(Xilinx Zynq-7010/7020) 创龙科技SOM-TLZ7x是一款基于Xilinx Zynq-7000系列XC7Z010/XC7Z020高性能低功耗处理器设计的异构多核SoC工业级核心板,处理器集成PS端双核ARM Cortex-A9 + PL端Artix-7架构28nm可编程逻辑资源,通过工业级B2B连接器引出千兆网口、USB、CAN、UART等通信接口,可通过PS端加载PL端程序,且PS端和PL端可独立开发。核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。 图 2 核心板正面图 图 3 核心板背面图 面对日益剧增的缺芯潮,创龙科技作为Xilinx官方合作伙伴,将持续与Xilinx保持紧密沟通,以保证我司Zynq-7010/7020系列产品的正常供应。经与我司供应链进行了解,7月、9月、11月均有芯片不断到货,欢迎大家选用创龙科技Zynq-7010/7020工业核心板。 同时,为进一步满足部分客户降成本需求,我司已推出邮票孔版本的Zynq-7010/7020核心板,欢迎咨询! 图 4 核心板正面图(邮票孔) 图 5 核心板背面图 3、低成本ARM+FPGA方案推荐,现货,现货! 创龙科技专注于DSP、ARM、FPGA多核异构技术开发,下面为您推荐两款低成本的ARM+FPGA核心板,助您项目快速选型。同时,在缺芯潮下,此两款工业核心板相关芯片有大量库存,核心板库存充足,可确保您的项目顺利量产以及大批量供应。 SOM-TL437xF核心板(TI AM437x + Xilinx Spartan-6) 创龙科技SOM-TL437xF是一款基于TI Sitara系列AM4376/AM4379 ARM Cortex-A9 + Xilinx Spartan-6 FPGA处理器设计的异构多核工业级核心板。核心板内部AM437x与Spartan-6通过GPMC、I2C通信总线连接。通过工业级B2B连接器引出LCD、CAMERA、GPMC、CAN等接口。核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。 图 6 核心板正面图 ​SOM-TL138F核心板(TI OMAP-L138 + Xilinx Spartan-6) 创龙科技SOM-TL138F是一款基于TI OMAP-L138(定点/浮点DSP C674x + ARM9) + Xilinx Spartan-6 FPGA处理器设计的工业级核心板。核心板内部OMAP-L138与Spartan-6通过uPP、EMIFA、I2C通信总线连接,并通过工业级B2B连接器引出网口、EMIFA、SATA、USB、LCD等接口。核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。 图 7 核心板正面图 图 8 核心板背面图 划重点!以上产品供货稳定,芯片库存充足,欢迎留言。 ​
  • 2021-4-27 09:15
    13 次阅读|
    0 个评论
    2021/04/23 “创龙首款NXP工业评估板,全新i.MX 8惊艳登场” 重磅!创龙科技(Tronlong)今日首次推出NXP工业评估板及核心板—— i.MX 8M Mini ,让大家久等了!! 图1| TLIMX8-EVM评估板正面 图2 | TLIMX8-EVM评估板侧面 (带壳) 图3 | SOM-TLIMX8核心板正面 图4 | SOM-TLIMX8核心板背面 1、 高性能 创龙科技i.MX 8系列产品基于 NXP i.MX 8M Mini 的 4核ARM Cortex-A53 + 单核ARM Cortex-M4多核 处理器设计,主频高达 1.6GHz 。 图5 |i.MX 8M Mini处理器功能框图 2、 工 业级核心板 SOM-TLIMX8是一款高端工业级核心板,通过邮票孔连接方式引出千兆网口、PCIe、USB 2.0、MIPI CSI、MIPI DSI等接口。支持1080P60 H.264视频硬件编解码、1080P60 H.265视频硬件解码。核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。 用户使用核心板进行二次开发时,仅需专注上层运用,降低了开发难度和时间成本,可快速进行产品方案评估与技术预研。 图6 |核心板硬件框图 3、 接口资源丰富 TLIMX8-EVM评估板接口资源丰富,引出 MIPI CAMERA、MIPI/LVDS LCD、HDMI OUT、LINE IN/OUT、PCIe、FlexSPI、USB、RS485、RS232、千兆网口、百兆网口 等接口,板载WIFI模块,支持Mini-PCIe 4G模块,选配外壳直接应用于工业现场,方便用户快速进行产品方案评估与技术预研。 图7 |评估板硬件框图 图8 |评估板硬件资源图解1 图9 |评估板硬件资源图解2 4、 多媒体应用领域 i .MX 8系列以其出色的 视频编解码能力 ,广泛应用于 医疗设备、机器视觉、工业HMI 等领域。 图10 5、 开发资料齐全 创龙科技秉承“因我们的存在,让嵌入式应用更简单”的愿景,i.MX 8系列产品为用户提供丰富的软、硬件开发资料,包括: ( 1 )提供核心板引脚定义、可编辑底板原理图、可编辑底板 PCB 、芯片 Datasheet ,缩短硬件设计周期; ( 2 )提供系统固化镜像、内核驱动源码、文件系统源码,以及丰富的 Demo 程序; ( 3 )提供完整的平台开发包、入门教程,节省软件整理时间,上手容易; (4)提供详细的 ARM + FPGA 架构通信教程,完美解决异构多核开发瓶颈。 开发案例主要包括: •基于Linux 的应用开发案例 •基于ARM Cortex-M4 的裸机/FreeRTOS 开发案例 •基于ARM Cortex-A53 与 Cortex-M4 的核间 OpenAMP 通信开发案例 •基于FlexSPI 的 ARM 与 FPGA 通信开发案例 •基于PCIe 的 ARM 与 FPGA 通信开发案例 •基于H.264 的视频硬件编解码开发案例 •基于H.265 的视频硬件解码开发案例 •基于OpenCV 的图像处理开发案例 •Qt 开发案例
  • 热度 3
    2020-12-11 17:21
    1326 次阅读|
    0 个评论
    By Toradex 秦海 1). 简介 随着嵌入式设备的发展,网络通信在应用中越来越广泛,而在客户端,就需要可以方便访问网络服务的浏览器配置,本文就基于 NXP iMX8 平台演示如何在嵌入式 Linux BSP 中集成网络浏览器,包括 Chromium 浏览器和基于 Qtwebenine 的示例浏览器 quicknanobrowser 。 本文所演示的平台来自于 Toradex Apalis iMX8 ARM 嵌入式平台,这是一个基于 NXP iMX8QM ARM 处理器,支持 Cortex-A72+A53 和 Coretex-M4 架构的计算机模块平台。 2. 准备 a).Apalis iMX8QM4GB WB IT ARM 核心版配合 Ioxra 载板 ,连接调试串口 UART1 (载板 X22 )到开发主机方便调试。 b). 载板连接 HDMI 显示器和网络用于显示和联网, USB 鼠标键盘用于操作浏览器。 3). Apalis iMX8 Ycoto Linux 编译部署以及配置 a). Apalis iMX8 Ycoto Linux 通过 Ycoto/Openembedded 框架编译,具体的配置方法请参考 这里 ,参考如下修改后编译 Reference-Multimedia image 镜像 ./ iMX8 Ycoto layer 中默认没有包含浏览器的相关 layer ,因此首先需要通过下面修改添加相关 layer ------------------------------- ### add mata-browser $ git clone https://github.com/OSSystems/meta-browser.git ### add meta-clang $ git clone -b dunfell https://github.com/kraj/meta-clang.git ### add meta-python2 $ git clone -b dunfell https://github.com/YoeDistro/meta-python2.git ### modify build/conf/bblayer.conf to add above extra layers --- a/build/conf/bblayers.conf +++ b/build/conf/bblayers.conf @@ -24,6 +24,9 @@ ${TOPDIR}/../layers/meta-openembedded/meta-python \ ${TOPDIR}/../layers/meta-freescale-distro \ ${TOPDIR}/../layers/meta-toradex-demos \ + ${TOPDIR}/../layers/meta-python2 \ + ${TOPDIR}/../layers/meta-clang \ + ${TOPDIR}/../layers/meta-browser \ ${TOPDIR}/../layers/meta-qt5 \ \ \ ------------------------------- ./ 修改 local.conf ,增加 chromium 和 qtwebengine 支持 ------------------------------- +IMAGE_INSTALL_append = " chromium-ozone-wayland qtwebengine qtwebengine-dev" +ACCEPT_FSL_EULA = "1" ------------------------------- ./ 修改 image 和 Qt5 SDK 文件 ------------------------------- // tdx-reference-multimedia-image.bb 文件,增加 Qt5 SDK 和中文字体支持 --- a/layers/meta-toradex-demos/recipes-images/images/tdx-reference-multimedia-image.bb +++ b/layers/meta-toradex-demos/recipes-images/images/tdx-reference-multimedia-image.bb @@ -3,6 +3,8 @@ SUMMARY = "Toradex Embedded Linux Reference Multimedia Image" DESCRIPTION = "Image for BSP verification with QT and multimedia features" +inherit populate_sdk_qt5 + #Prefix to the resulting deployable tarball name export IMAGE_BASENAME = "Reference-Multimedia-Image" @@ -14,6 +16,9 @@ '', d), d)} \ " +# add chinese fonts +FONT_CHINESE = "ttf-droid-sans ttf-droid-sans-fallback ttf-droid-sans-mono ttf-droid-serif freetype" + APP_LAUNCH_WAYLAND ?= "wayland-qtdemo-launch-cinematicexperience" APP_LAUNCH_X11 ?= "x-window-qtcinematicexperience" @@ -33,6 +38,8 @@ packagegroup-tdx-graphical \ packagegroup-tdx-qt5 \ \ + ${FONT_CHINESE} \ + \ bash \ coreutils \ less \ // tdx-reference-minimal-image.bb 文件,增加中文语言支持 ### modify layers/meta-toradex-demos/recipes-images/images/tdx-reference-minimal-image.bb #IMAGE_LINGUAS = "en-us" # add chinese font support IMAGE_LINGUAS = "en-us zh-cn" // packagegroup-qt5-toolchain-target.bb 文件,增加 Qt5 SDK qtwebengine 支持 --- a/layers/meta-qt5/recipes-qt/packagegroups/packagegroup-qt5-toolchain-target.bb +++ b/layers/meta-qt5/recipes-qt/packagegroups/packagegroup-qt5-toolchain-target.bb @@ -93,6 +93,9 @@ qtwebchannel-dev \ qtwebchannel-mkspecs \ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'qtwebchannel-qmlplugins', '', d)} \ + qtwebengine-dev \ + qtwebengine-mkspecs \ + ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'qtwebengine-qmlplugins', '', d)} \ qtxmlpatterns-dev \ qtxmlpatterns-mkspecs \ qttranslations-qtxmlpatterns \ ------------------------------- ./ 编译 image 和 SDK ------------------------------- # compile Reference-Multimedia image $ bitbake bitbake tdx-reference-multimedia-image # compile SDK bitbake tdx-reference-multimedia-image -c populate_sdk ------------------------------- b). Ycoto Linux image 部署 参考 这里 通过 Toradex Easy installer 将上面编译好的 image 更新部署到模块,版本为目前最新的 Ycoto Linux V5.1 c). 显示配置 ./ HDMI 默认即可正常显示,如果有显示器 EDID 读取问题不能成功显示,可以通过下面方法通过软件 firmware 方式手动加载 EDID ,更多关于显示的配置请参考 这里 ------------------------------- # cp EDID binary file to rootfs $ mkdir /lib/firmware/edid $ cp 1920x1080.bin /lib/firmware/edid # set uboot kernel command line # setenv defargs ‘pci=nomsi drm.edid_firmware=HDMI-A-1:edid/1920x1080.bin’ # saveenv && reset ------------------------------- d). Qt5 SDK 安装配置 请参考 这里 的说明安装上面编译好的 SDK ,以及配置 Qtcreator 交叉编译环境 4). Chromium 浏览器应用测试 a). 通过下面命令启动 chromium 应用,添加 ”--in-process-gpu” 参数使应用可以在 wayland 环境下正常运行 ------------------------------- root@apalis-imx8:~# chromium --no-sandbox --in-process-gpu ------------------------------- b). 运行效果如下图,可见中文也可以正常显示 c). 当 chromium 运行时查看了下 CPU 占用率,大概是在 40% - 180% 这个区间动态变化, iMX8 包含 6 个 Cortex-A CPU 核心,因此最多可以到 600% 的使用率。 5). QT Webengine 示例浏览器 quicknanobrowser 测试 Quick Nano Brower 示例程序是 Qt5 自带的 Webengine 示例程序,这是一个基于 Qt Quick 和 Webengine 开发的精简浏览器示例,本文使用版本为和 Qt library 匹配的 5.14.2 版本。 a). 使用上面配置好交叉编译环境进行编译,将编译生成的可执行文件 quicknanobrower 复制到 Apalis iMX8 模块 “/home/root” 目录下 b). 配置简单测试启动脚本 ./ test.sh ,程序启动脚本文件 --------------------------------------------------- !/bin/sh export QT_QPA_PLATFORM=wayland-egl /home/root/quicknanobrowser --no-sandbox & --------------------------------------------------- c). 运行 quicknanobrowser 应用 --------------------------------------------------- $ /home/root/test.sh --------------------------------------------------- d). 运行效果如下图,中文也可以正常显示 c). 当 chromium 运行时查看了下 CPU 占用率,大概是在 50% - 200% 这个区间动态变化。 6). 总结 本文基于 NXP iMX8 嵌入式平台在嵌入式 linux 系统下测试网络浏览器部署。
  • 热度 7
    2020-11-17 10:46
    410 次阅读|
    0 个评论
    By Toradex 胡珊逢 在使用嵌入式 Linux 系统的时,会出现由于设备意外断电引起文件系统损坏而最终使该设备无法启动的现象。为了应对这种情况,通常会从硬件设计如采用备用电源,无论是锂电池还是超级电容等,或者从系统软件设上加以规避。本文接下来将介绍如何使用 squashfs 只读文件系统制作 Linux 系统文件,并采用 overlayfs 为用户目录增加可写权限。演示采用 Colibri iMX6 计算机模块,该方法同样也适用于 Toradex 其他产品,如 iMX8 计算机模块。 Squashfs 是一种只读压缩文件系统,通常被用于数据备份或者系统资源受限的计算机系统上使用,如 Linux 发行版的 LiveCD , OpenWRT 系统也采用 squashfs 。 OverlayFS 一个结合其他文件系统的联合挂载,将多个挂载点叠加为一个目录。常见的应用是在一个只读的分区上叠加可读写的另一个分区。嵌入式 Linux 设备通常的功能都是被设计好的,极少需要在后期安装其他软件或更改 Linux 系统软件,更多的是更新设备应用程序和相关数据。因此基于 squashfs 的只读文件系统,结合 overlayfs 为用户应用和数据提供读写操作,能够提高嵌入式 Linux 文件系统可靠性。 在 Colibri iMX6 的 eMMC 上我们将使用以下分区规划。 BootFS 为 FAT32 格式,该分区上包含 Linux 内核文件, device tree 等启动文件,如果是 iMX8 ,则还包含一些其他固件文件。该分区通常只在文件系统烧写阶段被写入。 RootFS 分区是 Linux 运行的文件系统, usr, bin, lib, etc, home 等目录都在上面。一般该分区是 EXT3 , EXT4 格式,支持文件的写入和删除。而文件系统的损坏也常发生于此,最终导致设备启动失败。因此我们这里会采用只读格式的 squashfs 。 UserData 是能够读写的 EXT4 分区。该分区通过 overlayfs 会被挂载到原本位于只读 squashfs 中的 /home/root 目录。用户应用可以毫无察觉得使用该目录,在上面写入和删除文件,但不破坏只读 squashfs 文件系统,所有的操作都会被转移到 UserData 分区上。用户的应用也会存在 UserData 分区上,启动的时候从这里加载应用程序。该分区是可写的,所有这上面的文件是可以被更新。 ​ 下面我们会具体说明如何在 Yocto 环境生成符合上面规划的 BSP ,并通过 Toradex Easy Installer 工具实现这些分区和写入文件。 首先需要在 Yocto 环境中生成 squashfs 格式的系统文件 rootfs 。修改 build/conf/local.conf ,结尾添加以下内容。 ------------------------------------ IMAGE_FSTYPES_append = " squashfs" ------------------------------------ 默认 Linux 内核配置下 squahfs 是通过加载内核驱动模块实现对其支持,而模块驱动文件位于 rootfs 中,为了保证 Linux 内核在启动时能够正确处理该格式,需要将 squahfs 内核驱动模块配置为静态驱动,直接编译进内核中。为内核配置的文件系统支持添加 squahfs 和 overlay 格式。 ------------------------------------ $ MACHINE=colibri-imx6 bitbake -c menuconfig virtual/kernel → File systems Overlay filesystem support → File systems → Miscellaneous filesystems SquashFS 4.0 - Squashed file system support ------------------------------------ EXT4 格式的 UserData 分区会通过 overlay 机制挂载到只读的 rootfs 上的 /home/root ,但这之前需要通过 fstab 将该分区挂载到系统中, /home/root 。在 Yocto 中, layers/meta-toradex-demos/recipes-core/base-files/base-files/fstab 会被编译到 Colibri IMX6 BSP 中,在该文件中添加: ------------------------------------ /dev/mmcblk0p3 /media/data auto defaults,sync,noauto 0 0 ------------------------------------ 然后再添加一个开机自启动脚本,将 /media/data 使用 overlay 挂载到 /home/root 。 在 layers/meta-toradex-bsp-common/recipes-core 目录中添加 mount-overlayfs 文件夹,里面包含编译需要的 bb 文件和 systemd service 。 mount-overlayfs.bb 中 install -d ${D}/media/data 会在 /media 目录中创建 data 文件夹, FILES_${PN} = "/media/data" 将该空文件夹添加到 BSP 中。 mount-overlayfs.service 通过 RequiresMountsFor 保证 /media/data 目录通过 fstab 挂载后才运行。 Overlay 的目录结构如下, lowerdir 为 /home/root upperdir 为 /media/data/home/root/upper , workdir 为 /media/data/home/root/work 。这样应用可以在 /home/root 下直接读写文件, overlayfs 对应用和用户都是透明的。 ------------------------------------ Type=simple ExecStart=/bin/sh -c 'mount -t overlay -o lowerdir=/home/root,upperdir=/media/data/home/root/upper,workdir=/media/data/home/root/work overlay /home/root' ------------------------------------ 在 build/conf/local.conf 中将 mount-overlayfs 添加到 BSP 中。 ------------------------------------ IMAGE_INSTALL_append = " mount-overlayfs" ------------------------------------ 由于 rootfs 是只读格式,无法像之前一样直接在开发板上运行 systemctl 命令添加开机自启动脚本。我们需要像上面一样,在 Yocto 中增加一个 test-app 来开机自动运行位于 UserData 分区(该分区通过 overlay 会被最终挂载到 /home/root 目录)上的测试程序 test 。在 layers/meta-toradex-bsp-common/recipes-core 目录中添加 test-app 文件夹,里面包含编译需要的 bb 文件和 systemd service 。 在 build/conf/local.conf 中将 test-app 添加到 BSP 中。 ------------------------------------ IMAGE_INSTALL_append = " mount-overlayfs test-app" ------------------------------------ 至此我们已经通过修改 Yocto 能够生成所需结构的 BSP ,执行下面命令完成编译任务。 ------------------------------------ $ MACHINE=colibri-imx6 bitbake tdx-reference-minimal-image ------------------------------------ 在 build/deploy/images/colibri-imx6 有相关文件生成,我们需要下面两个文件,文件名字中的时间戳对应具体编译的日期。 Colibri-iMX6_Reference-Minimal-Image-Tezi_5.1.0-devel-20201112022057+build.0.tar Colibri-iMX6_Reference-Minimal-Image.rootfs.squashfs 解压 Colibri-iMX6_Reference-Minimal-Image-Tezi_5.1.0-devel-20201112022057+build.0.tar 。因为 rootfs 是 squahfs 格式,需要使用定制的 boot.src 来启动。 ------------------------------------ $ cd ~/ $ tar vxf Colibri-iMX6_Reference-Minimal-Image-Tezi_5.1.0-devel-20201112022057+build.0.tar $ cd Colibri-iMX6_Reference-Minimal-Image-Tezi_5.1.0-devel-20201112022057+build.0 $ tar vxf Reference-Minimal-Image-colibri-imx6.bootfs.tar.xz ------------------------------------ 修改其中的 emmcargs_set 参数。 ------------------------------------ env set emmcargs_set 'env set rootfsargs root=/dev/mmcblk0p2 rootfstype=squashfs ro rootwait' ------------------------------------ 可以使用该 boot.cmd 直接生成对应的 boot.src, 替换解压目录中同名文件 , 重新打包 Reference-Minimal-Image-colibri-imx6.bootfs.tar.xz ------------------------------------ $ cd Reference-Minimal-Image-colibri-imx6.bootfs $ rm boot.src $ mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "Distro boot script" -d boot.cmd boot.scr $ cd .. $ tar cJf Reference-Minimal-Image-colibri-imx6.bootfs.tar.xz -C Reference-Minimal-Image-colibri-imx6.bootfs . ------------------------------------ 将 squashfs 的 rootfs 文件系统复制到 Colibri-iMX6_Reference-Minimal-Image-Tezi_5.1.0-devel-20201112022057+build.0 目录中。 ------------------------------------ $ cp Colibri-iMX6_Reference-Minimal-Image.rootfs.squashfs Colibri-iMX6_Reference-Minimal-Image-Tezi_5.1.0-devel-20201112022057+build.0 ------------------------------------ 接下来创建需要复制到 UserData 分区中的文件。如上面提到的 overlay 挂载需要有对应目录结构,依次创建以下目录,并将测试程序 test 复制到 upper 目录中。这里的测试程序 test 是一个非常简单的 C 应用,它会输出“ Hello Toradex! ”到系统日志中。 ------------------------------------ $ cd ~/Colibri-iMX6_Reference-Minimal-Image-Tezi_5.1.0-devel-20201112022057+build.0 $ mkdir rootfs $ cd rootfs $ mkdir -p home/root/upper $ mkdir -p home/root/work $ cp ~/test home/root/upper $ tree ------------------------------------ 打包为 rootfs.tar.xz 。 ------------------------------------ $ cd .. $ sudo tar cJf rootfs.tar.xz -C rootfs . ------------------------------------ 修改 image.json 文件,在 blockdevs 中增加 RAW 格式分区用于直接写入 squashfs 系统文件,以及 EXT4 格式的 DATA 分区用于写入上面生成的 rootfs.tar.xz 。 Colibri-iMX6_Reference-Minimal-Image-Tezi_5.1.0-devel-20201112022057+build.0 目录下最终包含以下文件。 将上面的 BSP 通过 Toradex Easy Installer 重新安装到 Colibri iMX6 上,安装的时候注意需要点击 Erase 擦除 eMMC 上的内容。 烧写后重启模块。可以通过 mount 命令查看挂载分区的情况。 ------------------------------------ root@colibri-imx6:~# mount /dev/mmcblk0p2 on / type squashfs (ro,noatime) …… /dev/mmcblk0p3 on /media/data type ext4 (rw,relatime,sync) overlay on /home/root type overlay (rw,relatime,lowerdir=/home/root,upperdir=/media/data/home/root/upper,workdir=/media/data/home/root/work) ------------------------------------ mmcblk0p2 为写入 squashfs 只读文件系统的分区,例如在 /etc 目录无法创建文件。 ------------------------------------ root@colibri-imx6:/etc# mkdir test-folder mkdir: can't create directory 'test-folder': Read-only file system ------------------------------------ EXT4 格式的 /dev/mmcblk0p3 分区上是用户文件,被挂载到 /media/data 。而 /home/root 会通过 overlay 具有可读写权限。 ------------------------------------ root@colibri-imx6:~# cd ~/ root@colibri-imx6:~# pwd /home/root root@colibri-imx6:~# mkdir test-folder root@colibri-imx6:~# ls test test-folder root@colibri-imx6:~# ls -lh -rwxrwxr-x 1 1000 1000 11.3K Nov 11 2020 test drwxr-xr-x 2 root root 4.0K Feb 7 16:25 test-folder ------------------------------------ 位于 UserData 上的测试程序 test 也在开机的时候自动运行。 ------------------------------------ root@colibri-imx6:~# journalctl -u test-app -- Logs begin at Fri 2020-02-07 15:50:53 UTC, end at Fri 2020-02-07 16:11:49 UTC. -- Feb 07 15:50:57 colibri-imx6 systemd : Started start a demo on overlay mount folder. Feb 07 15:50:57 colibri-imx6 test : Hello Toradex! Feb 07 15:50:57 colibri-imx6 systemd : test-app.service: Succeeded. ------------------------------------ 总结 上面我们演示结合使用 squashfs 和 overlay ,将系统文件放在一个只读分区,把读写操作在单独的分区上进行。降低系统文件因意外断电受损从而导致无法启动的风险。在使用只读 squashfs 只读文件系统时需要保证 rootfs 尽量精简,建议在 Reference-Minimal-Image 基础上构建用户自己的 BSP ,甚至对其进行裁剪。
  • 热度 10
    2020-9-30 15:13
    2277 次阅读|
    1 个评论
    By Toradex 胡珊逢 1). 简介 通常当编译 Linux 、 U-Boot 相关源代码时,由于编译工具或者文件系统限制,这些任务需要在 Linux 发行版中完成,如常见的 Ubuntu 、 Fedora 、 Linux Mint 、 Arch Linux 等。在电脑安装双系统,或者虚拟机,是使用 Linux 发行版的主要方式。 Windows 推出的 WSL ( Windows Subsystem for Linux )则提供了另外一种方式来使用 Linux 系统。本文接下来将介绍如何在 Windows 10 电脑上使用 WSL 来编译使用 NXP iMX8 ARM 平台的 Linux 、 U-Boot 和 Device tree overlays 。 本文所演示的 ARM 平台来自于 Toradex 基于 NXP iMX8QM ARM 处理器的 Apalis iMX8QM ARM 嵌入式平台。 2). 编译流程 WSL 有两个版本,这里我们将使用 WSL 2 。在开始安装 WSL 之前,推荐先安装 Windows Terminal 。这是微软新推出的终端工具,可以很好的兼容 WSL 。并且还直接集成了一些 Linux 的命令工具,如 ssh 、 scp 。 WSL 具体的安装方法请参考微软官方的适用于 Linux 的 Windows 子系统安装指南 (Windows 10) 。安装完毕后我们将使用 Ubuntu-20.04 为例进行编译演示。 打开 Windows Terminal 点击标签页旁边的 + ,可以看到刚才安装的 Ubuntu-20.04 WSL 已经自动出现在其中。点击后即可启动 Ubuntu 。目前的 WSL 还不支持图形,所以接下来的操作会在 Windows Terminal 以命令行的形式完成。 进入 Ubuntu-20.04 WSL 后,命令操作的形式和通常的 Ubuntu 没有区别。首先安装一些编译所需的软件。 sudo apt update sudo apt install make bison flex sudo apt install build-essential sudo apt install libncurses-dev sudo apt install libssl-dev 交叉编译工具 gcc 的安装可以通过两种形式。在 Ubuntu-20.04 WSL 中通过 wget 等命令直接下载。另外还可以在 Windows 电脑上通过浏览器下载,然后使用 Windows 的文件浏览器直接访问 Ubuntu-20.04 WSL 的文件系统,将编译工具复制进去。交叉编译工具的选择可以参考 这里 。 在文件浏览器中输入 \\wsl$\ ,其会显示电脑上可以用的 WSL 实例文件系统。例如将适用于 Apalis iMX8QM Linux BSP 5.0 的 gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz 复制到 Ubuntu-20.04/home/ben 目录下。 重新回到 Windows Terminal 命令行终端,解压该工具,并设置环境变量。 tar vxf gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz export ARCH=arm64 export DTC_FLAGS="-@" export PATH=/home/ben/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/:$PATH export CROSS_COMPILE=aarch64-none-linux-gnu- 使用 git 工具下载 Linux 、 U-Boot 源码。 git config --global user.name "XXX" git config --global user.email your_email git clone -b toradex_imx_v2020.04_5.4.24_2.1.0 git://git.toradex.cn/u-boot-toradex.git git clone -b toradex_5.4-2.1.x-imx git://git.toradex.cn/linux-toradex.git git clone -b toradex_5.4-2.1.x-imx git://git.toradex.cn/device-tree-overlays.git 详细的编译步骤和说明可以参考我们开发者中心的相关 网页说明 。 例如编译 U-boot make apalis-imx8_defconfig &1 | tee build.log 例如编译 Linux 和 device tree make defconfig &1 | tee build.log make DTC_FLAGS="-@" freescale/fsl-imx8qm-apalis-ixora-v1.1.dtb 编译 Device tree overlays cpp -nostdinc -I ../../linux-toradex/arch/arm64/boot/dts/freescale -I ../../linux-toradex/include -undef -x assembler-with-cpp apalis-imx8_atmel-mxt_overlay.dts apalis-imx8_atmel-mxt_overlay.dts.preprocessed dtc -@ -Hepapr -I dts -O dtb -i ../../linux-toradex/arch/arm64/boot/dts/freescale -o apalis-imx8_atmel-mxt_overlay.dtbo apalis-imx8_atmel-mxt_overlay.dts.preprocessed 当这些都编译好以后,生成的文件都可以通过文件浏览器将其复制出来。 在完成编译工作后, Windows Terminal 命令行终端输入 exit 命令即可退出 WSL ,但其仍在后台运行。通过以下命令来查看仍在运行的 WSL 实例,并将其关闭。 wsl --list --running 适用于 Linux 的 Windows 子系统分发版 : Ubuntu-20.04 ( 默认 ) wsl --terminate Ubuntu-20.04 3). 总结 借助 WSL 运行 Linux 发行版,为 Linux 开发人员提供一种简便的方式,免去双系统的切换,或者安装庞大的虚拟机系统。 WSL 是直接运行在 CPU 上,避免了虚拟化技术的开销。目前该技术也有限制,如 WSL 还无法使用图形界面,从而使得一些需要借助图形化界面 IDE 如 Eclipse 完成的 C/C++ 应用开发还不是很适合。当然网络上也有关于如何在 WSL 安装 X11 并通过远程桌面的方式来开启图形界面的说明,但这会影响到 WSL 的性能。 WSL 的方式比较适合不需要借助图形界面的编译任务,如 make 、 cmake 编译,甚至是 Yocto 编译等。 ​
相关资源
广告