User’s Manual FET1043A-C、OK1043A-C3 Embedded Development Platform Ubuntu Manual Rev.1.0 2021/04/19 Forlinx Embedded Technology Co. Ltd.www.forlinx.com Ubuntu_UM FET1043A-C、OK1043A-C3 注意事项与维护 1、注意事项 请勿带电插拔核心板及外围模块! 请遵循所有标注在产品上的警示和指引信息。 请保持本产品干燥。如果不慎被任何液体泼溅或浸润,请立刻断电并充分晾干。 - 使用中注意本产品的通风散热,避免温度过高造成元器件损坏。 - 请勿在多尘、脏乱的环境中使用或存放本产品。 - 请勿将本产品应用在冷热交替环境中,避免结露损坏元器件。 - 请勿粗暴对待本产品,跌落、敲打或剧烈晃动都可能损坏线路及元器件。 - 请勿使用有机溶剂或腐蚀性液体清洗本产品。 - 请勿自行修理、拆卸本公司产品,如产品出现故障请及时联系本公司进行维修。 - 擅自修改或使用未经授权的配件可能损坏本产品,由此造成的损坏将不予以保修。 2、售后维修 如产品使用过程中出现硬件故障可根据售后服务政策进行维修; 服务政策:参见官方网站 www.forlinx.com 售后服务说明; 地 址:河北省保定市高开区向阳北大街 2699 号保定飞凌嵌入式新楼 5 层售后维修部 联 系 人:售后维修部 电 话:0312-3102650-952/953 邮编:071000 邮寄须知:建议使用顺丰、圆通或韵达,且不接收任何到付。 技术支持与定制 1、技术支持范围 1.1 1.2 1.3 1.4 本公司产品的软、硬件资源提供情况咨询; 本公司产品的软、硬件手册使用过程中遇到的问题; 本公司提供的 OEM、ODM 售后技术支持; 本公司产品的故障判断及售后维修服务。 2、技术讨论范围 2.1 源码的修改以及理解; 2.2 操作系统如何移植; 2.3 用户在自行修改以及开发中遇到的软硬件问题; 注:以上三点虽不属于技术支持范围,但我公司会尽力为用户提供帮助,如仍然没能解决您的问题, 敬请谅解。 - 2 - Ubuntu_UM FET1043A-C、OK1043A-C3 3、技术支持方式 3.1 电话:0312-3119192 3.2 论坛:bbs.witech.com.cn 3.3 邮箱: Linux 技术支持: linux@forlinx.com Android 技术支持: android@forlinx.com 硬件技术支持: hardware@forlinx.com 3.4 知识库:bbs.witech.com.cn/kb 4、技术支持时间 周一至周五: 上午 9:00—11:30,下午 13:30—17:00; 公司按照国家法定节假日安排休息,在此期间无法提供技术支持,请将问题发送至邮箱或论坛技术支 持区,我们会在工作日尽快给您回复。 5、定制开发服务 我公司提供嵌入式操作系统底层驱动、硬件板卡的有偿定制开发服务,以缩短您的产品开发周期。 了解定制流程:http://www.forlinx.com/OEM.htm 填写需求文档:http://www.forlinx.com/docs/PR.docx 发至项目邮箱:project@forlinx.com - 3 - Ubuntu_UM FET1043A-C、OK1043A-C3 资料更新与获取 1、资料的更新 产品相关资料会不断的完善更新,本手册内容亦然如此;当您在使用这些内容时,请确保其为最新状 态。 2、更新后如何通知 飞凌嵌入式产品资料更新通知采用微信公众号推送,敬请关注! 服务号 3、资料如何获取 3.1 网络下载: 请注册并登陆“bbs.witech.com.cn”找到“开发板资料下载”选择对应平台下载; 下载前请阅读《资料下载说明》:http://bbs.witech.com.cn/thread-67932-1-1.html。 3.2 光盘: 请联系我公司销售人员购买。 版权声明 本手册版权归保定飞凌嵌入式技术有限公司所有。未经本公司的书面许可,任何单位和个人无权以任何形 式复制、传播、转载本手册的任何部分,违者将被追究法律责任。 - 4 - Ubuntu_UM FET1043A-C、OK1043A-C3 更新记录 日期 手册版本 硬件版本 2021.04.19 V1.0 适用于 V1.0 及其以上版本底板; 适用于 V1.1 及其以上版本核心板 - 5 - 更新内容 用户手册第一版 Ubuntu_UM FET1043A-C、OK1043A-C3 目录 注意事项与维护 ............................................................ - 2 技术支持与定制 ............................................................ - 2 资料更新与获取 ............................................................ - 4 版权声明 .................................................................. - 4 更新记录 .................................................................. - 5 目录 ...................................................................... - 6 第一章 OK1043A-C3 软件资源介绍 .......................................... - 8 1.1 Linux 4.14.47 系统软件资源介绍 ..................................... - 8 1.2 Flash 存储器分区表 ................................................ - 8 1.3 拨码开关功能介绍 .................................................. - 9 1.4 网络配置以及接口对应关系 .......................................... - 9 第二章 使用前的准备 ..................................................... - 10 2.1 设置串口工具 ..................................................... - 10 2.2 常用网络工具 ..................................................... - 12 2.2.1 SSH ......................................................... - 12 2.2.2 FTP ......................................................... - 14 第三章 OK1043A-C3 硬件资源测试 .......................................... - 18 3.1 A53 调频测试 ..................................................... - 18 3.2 A53 CoreMark 测试 ............................................... - 19 3.3 A53 Dhrystone 测试 ............................................... - 19 3.4 TMU 测试 ........................................................ - 20 3.5 Memory 测试 ..................................................... - 20 3.6 QSPI 读写测试.................................................... - 22 3.7 EMMC 读写测试 .................................................. - 22 3.8 USB3.0 测试 ..................................................... - 23 3.9 m.2 Type 2280 接口测试 ........................................... - 24 3.10 m.2 Type 2230 接口测试 .......................................... - 25 3.11 网络测试 ........................................................ - 25 3.11.1 SFP+网络测试(P30)........................................ - 25 3.11.2 RGMII 接口网络测试(P13 下) .................................. - 26 3.11.3 QSGMII 接口网络测试(P3 上) ............................... - 26 3.12 RTC 测试 ....................................................... - 27 3.13 看门狗测试 ...................................................... - 28 3.14 UART 测试 ...................................................... - 28 3.15 WIFI 测试 ....................................................... - 29 3.16 4G/5G 模块上网测试 ............................................. - 36 3.16.1 4G/5G 识别判断.............................................. - 36 3.16.2 4G/5G 上网测试.............................................. - 37 3.17 USER_LED 和 USER 按键测试 .................................... - 42 第四章 OK1043A-C3 软件资源测试 .......................................... - 43 4.1 动态/静态 IP 配置测试 ............................................. - 43 4.2 时区配置测试 ..................................................... - 44 - 6 - - Ubuntu_UM FET1043A-C、OK1043A-C3 Samba 测试 ...................................................... Lighttpd 测试 ..................................................... 虚拟化测试 ....................................................... 4.5.1 Docker 基本环境测试 .......................................... 4.5.2 LXC 基本环境测试 ............................................. 4.5.3 QEMU 基本环境测试 ........................................... 4.6 OP-TEE 基本环境测试 ............................................. 4.7 OpenSSL 基本环境测试 ............................................ 4.8 IPSEC 基本环境测试 .............................................. 4.9 DPDK 基本环境测试 ............................................... 4.9.1 二层转发测试 ................................................. 4.9.2 三层转发测试 ................................................. 4.10 OVS-DPDK 基本环境测试 ......................................... 第五章 FlexBuild 使用 ..................................................... 5.1 版本说明 ......................................................... 5.2 编译环境搭建 ..................................................... 5.2.1 编译环境说明 ................................................. 5.2.2 编译环境搭建 ................................................. 5.3 全部编译 ......................................................... 5.4 单独编译 Firmware ................................................ 5.5 单独编译内核及模块 ............................................... 5.6 单独编译 app 程序 ................................................ 第六章 系统固化 .......................................................... 6.1 TFTP 烧写 QSPI ................................................... 6.1.1 TFTP 环境搭建 ................................................ 6.1.2 TFTP 烧写 QSPI .............................................. 6.2 制作烧写 TF 卡 .................................................... 6.3 U 盘烧写 eMMC 和 QSPI ............................................ 附录 ..................................................................... 附录 1 设置默认 CPU 调频策略 .......................................... 附录 2 环境变量配置文件 uEnv.txt 使用方法 ............................... 4.3 4.4 4.5 - 7 - - 46 48 52 52 55 60 68 71 72 74 75 76 77 80 80 80 80 80 81 81 82 83 85 85 85 86 89 91 93 93 93 - Ubuntu_UM FET1043A-C、OK1043A-C3 第一章 OK1043A-C3 软件资源介绍 1.1 Linux 4.14.47 系统软件资源介绍 设备 驱动程序源代码在内核中的位置 设备名 USB3.0 drivers/usb/dwc3/core.c RTC 实时时钟驱动 drivers/rtc/rtc-rx8010.c /dev/rtc0 QSPI drivers/mtd/spi-nor/fsl-quadspi.c /dev/mtd* ESDHC drivers/mmc/host/sdhci-of-esdhc.c /dev/mmcblk* TMU drivers/thermal/qoriq_thermal.c /sys/class/thermal/th ermal_zone* SPI drivers/spi/spi-fsl-dspi.c I2C drivers/i2c/busses/i2c-imx.c DUART drivers/tty/serial/8250/8250_of.c /dev/ttyS* LPUART drivers/tty/serial/fsl_lpuart.c /dev/ttySX FlexTimer drivers/soc/fsl/layerscape/ftm_alarm.c 看门狗 drivers/watchdog/imx2_wdt.c /dev/watchdog SATA drivers/ata/ahci_qoriq.c /dev/sda* PCIE drivers/pci/dwc/pci-layerscape.c UCC_HDLC drivers/net/wan/fsl_ucc_hdlc.c IFC drivers/memory/fsl_ifc.c FMAN drivers/net/ethernet/freescale/* GPIO drivers/gpio/gpio-mpc8xxx.c CRYPTO drivers/crypto/caam/* DPAA1 drivers/staging/fsl_qbman/fsl_usdpaa.c 1.2 Flash 存储器分区表 OK1043A-C3 平台板载一颗 16M 的 QSPI Flash 和一颗 8GB 的 EMMC,OK1043A-C3 平台支持 QSPI 启动和 SD/EMMC 启动,QSPI Flash 或 SD/EMMC 中需要烧入 16M Firmware 镜像,Firmware 各部分在 Flash 中的偏移地址如下表所示: - 8 - File Maximum size QSPI flash offset SD/eMMC start block(512byte) RCW+PBI 1 MB 0x00000000 0x00008 Boot firmware (U-Boot, UEFI, PPA) 2 MB 0x00100000 0x00800 Boot firmware environment 1 MB 0x00300000 0x01800 PPA firmware 2 MB 0x00400000 0x02000 Secure boot headers 3 MB 0x00600000 0x03000 DPAA1 FMan microcode 256 KB 0x00900000 0x04800 QE/microQE firmware 256 KB 0x00940000 0x04A00 Ethernet PHY firmware 256 KB 0x00980000 0x04C00 Scripts 256 KB 0x009C0000 0x04E00 DPAA2 MC / PFE firmware 3 MB 0x00A00000 0x05000 Ubuntu_UM FET1043A-C、OK1043A-C3 DPAA2 DPL 1 MB 0x00D00000 0x06800 DPAA2 DPC 1 MB 0x00E00000 0x07000 EMMC 中文件系统的偏移地址入下表所示: 文件系统类型 eMMC offset block(512 byte) Size FAT32 2048 20M FAT32 43008 100M EXT4 247808 ≈7G 1.3 拨码开关功能介绍 编号 ON OFF 默认 A TF 卡启动 QSPI 启动 off B SerDes PLL1 时钟 100MHz SerDes PLL1 时钟 156.25MHz off 注意:OK1043-C3 软件配置上 SerDes PLL1 给 XFI 提供时钟,必须为 156.25MHz,拨码 B 请勿修 改。 1.4 网络配置以及接口对应关系 OK1043A-C3 软件上网络部分存在一种配置,配置 1455 支持的网络资源有 SFP+、RGMIIx2、QSGMII 共计 7 个网口。 下表是 Linux 系统中 fm1-macN 与 RJ45 的对应关系。 Serdes 配置 1455 - 9 - mac1 mac2 mac3 mac4 P27 下 P27 上 P13 上 P13 下 mac5 P3 下 mac6 P3 上 mac9 P30 mac10 Ubuntu_UM FET1043A-C、OK1043A-C3 第二章 使用前的准备 2.1 设置串口工具 1、OK1043A-C3 平台默认使用 UART0(天线座子旁边的 RS232 接口)作为调试串口,使用 USB 串口线连接到 PC 机的 USB 口。连接好之后检查拨码开关是否是全部为 off,打开电源开关,windows 系 统将自动安装串口驱动程序。 2、等待驱动程序安装完毕,打开 windows 的设备管理器查看新增加的 COM 口。 3、打开串口工具以 Putty 为例(您可以在用户资料“工具”目录找到它): 根据的 Serial line 您的设备管理器中的实际信息选择。 - 10 - Ubuntu_UM FET1043A-C、OK1043A-C3 设置完成后, 以后每次重新打开 putty 时只需要先点击“OK10XX”在点击“open”就可以打开调试串口了。 由于之前我们已经给开发板上电了,打开 putty 敲击回车将输出登录信息。 默认的用户名及密码均为 root。 - 11 - Ubuntu_UM FET1043A-C、OK1043A-C3 2.2 常用网络工具 OK1043A-C3 除了使用调试串口登录以外,支持 SSH 网络方式登录开发板,同时支持 SSH、FTP 文件传输。首先使用网线连接 OK1043A-C3 的默认网口(J29 上)至路由器,查看 OK1043A-C3 自动获 取到的 IP 地址。 在 Putty 中输入:root@localhost:~# ifconfig 注意:本节以开发板 IP 为 192.168.1.104 为例介绍网络工具的使用,实际测试时请以您具体的环境 为准。 2.2.1 SSH OK1043 开发板支持 SSH 服务并启动时已自动开启,设置好 IP 地址后就可以作为一台 SSH 服务 器。可以利用SSH登录开发板进行开发调试,也可用scp进行文件传输。在使用SSH之前请确保您的 ubuntu - 12 - Ubuntu_UM FET1043A-C、OK1043A-C3 虚拟机中安装了SSH软件,可以输入ssh -V 进行确认。 如果出现了上图所示的帮助信息代表您的ubuntu虚拟机中已经安装了SSH软件,如果您的ubuntu中没 有安装ssh,请输入如下命令进行安装:sudo apt-get install openssh-server 在 linux 系统上,输入 # ssh root@192.168.1.104 - 13 - Ubuntu_UM FET1043A-C、OK1043A-C3 首次登录时根据提示输入#yes 确认连接,并输入密码 root。退出时输入#exit 退出 以拷贝当前目录 zImage 到开发板根目录为例: 输入# scp ./zImage root@192.168.1.104:/ 2.2.2 FTP OK1043A-C3 开发板支持 FTP 服务并启动时已自动开启,设置好 IP 地址后就可以作为一台 FTP 服务器。下面介绍如何利用 FTP 工具进行文件传输。 路径:OK10XX-C(LINUX)用户资料\工具\FileZilla* 在 windows 上安装好 filezilla 工具,并按照下图所示步骤进行设置。 登录成功后便可以进行上传下载操作。 - 14 - Ubuntu_UM FET1043A-C、OK1043A-C3 上传测试,在本地站点中选择将要上传的文件右键点击“上传”。 - 15 - Ubuntu_UM FET1043A-C、OK1043A-C3 下载测试,在远程站点中选择将要下载的文件,右键点击“下载”。 - 16 - Ubuntu_UM FET1043A-C、OK1043A-C3 如果本地站点中已经存在同名文件,默认会“覆盖”本地文件,点击确定开始下载。 - 17 - Ubuntu_UM FET1043A-C、OK1043A-C3 第三章 OK1043A-C3 硬件资源测试 OK1043A-C3 平台概况: 3.1 Board OK1043A-C3 Kernel/User space Linux 4.14.47 64bit / 64bit user space Core 4xARMv8-a53@ 1600MHz Operations frequency Core/Bus/DDR: 1600MHz/400MHz/1600MT/s Memory Single DDR controller with 2GB DDR at 1600 MT/s U-Boot U-boot 2018.03 SEC Sec5.4 SerDes 1455:xfi.m9+qs.m1,2,5,6+mini-pcie+pcie(x1) FileSystem Ubuntu Compiler Ubuntu/Linaro7.3.0-16ubuntu3~18.04,glibc-2.27,binutils-2.300, gdb-8.1 A53 调频测试 列出 cpu 支持的频率 root@localhost:~# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies 1600000 1000000 800000 500000 列出所有的管理模式 root@localhost:~# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors conservative ondemand userspace powersave performance 列出当前的管理模式 root@localhost:~# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor ondemand 列出 cpu 当前的频率 root@localhost:~# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq 500000 改变管理模式 root@localhost:~# echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor root@localhost:~# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor performance 列出 cpu 当前的频率 root@localhost:~# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq 1600000 注意:此过程以 cpu0 为例操作。 - 18 - Ubuntu_UM FET1043A-C、OK1043A-C3 3.2 A53 CoreMark 测试 在嵌入式处理器领域最为知名和常见的 Benchmarks 为 Dhrystone 和 CoreMark,CoreMark 是一个 综合基准,用于测量嵌入式系统中使用的中央处理器(CPU)的性能。它是在 2009 由 eembc 的 shay gal-on 开发的,旨在成为一个行业标准,取代过时的 dehrystone 基准。 OK1043A-C3 平台默认已经移植好了 CoreMark 测试程序,您可以使用以下命令进行测试: 1、将 CPU 设置为高性能模式 root@localhost:~# echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 2、CoreMark 测试 root@localhost:~# coremark.exe CoreMark 测试结果: Core/Bus/DDR Coremark Thread # Coremark/MHz Coremark 1 4.11 6588 OK1043A-C3 (Core/Bus/DDR:1600MHz/4 00MHz/1600MT/s) 3.3 A53 Dhrystone 测试 Dhrystone 是于 1984 年由 Reinhold P. Weicker 设计的一套综合的基准程序,该程序用来测试 CPU (整数)计算性能。Dhrystone 并不包括浮点运算,其输出结果为每秒钟运行 Dhrystone 的次数,即每秒 钟迭代主循环的次数。 OK1043A-C3 平台已经移植好了 Dhrystone 测试程序,您可以使用以下命令进行测试: 1、将 CPU 设置为高性能模式 root@localhost:~# echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 2、Dhrystone 测试 root@localhost:~# echo 50000000 | dhrystone - 19 - Ubuntu_UM FET1043A-C、OK1043A-C3 Dhrystone 测试结果: 3.4 Core/Bus/DDR Dhrystone Process # DMIPS/MHz DMIPS OK1043A-C3 (Core/Bus/DDR:1600MHz/40 0MHz/1600MT/s) 1 3.02 4766 TMU 测试 OK1043A-C3 平台 SOC 内部带有 5 颗温度传感器, 软件上使用 sensor3 作为 Thermal 的温度传感器。 Temperature sensor ID Placement 0 Near DDR controller 1 Near SerDes 2 Near Frame manager 3 Near ARM A53 core 4 SEC 读取 sensor 3 的温度: root@localhost:~# cat /sys/class/thermal/thermal_zone0/temp 58000(58 摄氏度) 3.5 Memory 测试 Lmbench 是一套简易可移植的,符合 ANSI/C 标准为 UNIX/POSIX 而制定的微型测评工具。一般来 说,它衡量两个关键特征:反应时间和带宽。我们使用 LmBench 来测试 OK1043A-C3 平台 cache 以及 DDR 的带宽。 OK1043A-C3 平台已经移植好了 Lmbench,您可以使用以下命令进行测试: 1、将 CPU 设置为高性能模式 root@localhost:~# echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 2、Lmbench 测试 root@localhost:~# memory_bandwidth.sh - 20 - Ubuntu_UM FET1043A-C、OK1043A-C3 Lmbench 测试结果: Cache/Memory rd wr rdwr cp frd fwr fcp bzero bcopy L1(MB/s) 12228 19533 8274 12151 3161 6282 3171 5944 8373 L2(MB/s) 10001 11280 7370 4756 3139 5873 3139 5683 7330 DDR(MB/s) 2843 1379 1347 858 2741 4809 1787 4908 1808 - 21 - Ubuntu_UM FET1043A-C、OK1043A-C3 3.6 QSPI 读写测试 OK1043A-C3 平台板载一颗 16MB 的 QSPI Flash,默认情况下 QSPI Flash 中存放启动 Firmware, 本节仅用来测试 QSPI 接口的速度, 并不建议您在 QSPI Flash 中存放数据(会导致无法使用 QSPI 启动)。 测试方法: 读: root@localhost:~# time dd if=/dev/mtdblock0 of=/dev/null bs=1024K count=16 测试结果: 模式 文件系统 文件大小 耗时 速度 读 RAW 16MB 1.4s 12MB/s 3.7 EMMC 读写测试 OK1043A-C3 平台板载一颗 8GB 的 eMMC,运行在 HS200 高速模式。 测试方法: 写: root@localhost:~# time dd if=/dev/zero of=/test.bin bs=1M count=512 conv=fsync 读: root@localhost:~# time dd if=/test.bin of=/dev/null bs=1M - 22 - Ubuntu_UM FET1043A-C、OK1043A-C3 测试结果: 模式 文件系统 文件大小 耗时 速度 写 EXT4 512M 28.9s 18.6MB/s 读 EXT4 512M 5.8s 92MB/s 注意:带文件系统的测试结果在不同的环境下测试结果略有不同,您可以直接 dd eMMC 的设备节点 进行测试,但是这样会导致文件系统的数据被破坏,需要重新烧写文件系统。 3.8 USB3.0 测试 OK1043A-C3 平台板载两个 USB3.0 接口,可以接移动硬盘等含有 USB3.0 的高速设备,当然 USB1.0 USB2.0 的设备也可以正常使用。本节采用一个 mSATA 转 USB3.0 接口的固态硬盘进行测试。 测试方法: 插入 USB3.0 固态硬盘,查看默认的挂载目录 如果您的硬盘没有分区,请使用 fdisk 命令进行分区。这里我们读写 ext4 分区的文件来测试 USB3.0 接口。 写: root@localhost:~# time dd if=/dev/zero of=/run/media/sda2/test.bin \ bs=1024K count=4096 conv=fsync 读: root@localhost:~# time dd if=/run/media/sda2/test.bin of=/dev/null bs=1024K 测试结果: 模式 文件系统 文件大小 耗时 速度 写 EXT4 4G 23.89s 180MB/s 读 EXT4 4G 11.53s 372MB/s 注意:测试结果会受 USB3.0 设备实际速度影响 - 23 - Ubuntu_UM FET1043A-C、OK1043A-C3 3.9 m.2 Type 2280 接口测试 OK1043A-C3 平台支持一个 m.2 硬盘接口 NVME 协议的 PCIE 硬盘,系统上电前将 INTEL 760P 固 态硬盘插入底板 m.2 硬盘卡槽,上电后启动 linux,通过 lspci 可以看到对应设备枚举成功。 root@localhost:~# lspci 0000:00:00.0 PCI bridge: Freescale Semiconductor Inc Device 81c0 (rev 10) 0001:00:00.0 PCI bridge: Freescale Semiconductor Inc Device 81c0 (rev 10) 0001:01:00.0 Non-Volatile memory controller: Intel Corporation Device f1a6 (rev 03) 0002:00:00.0 PCI bridge: Freescale Semiconductor Inc Device 81c0 (rev 10) 查看硬盘的默认挂载位置。 root@localhost:~# df -Th Filesystem Type Size Used Avail Use% Mounted on /dev/root ext4 6.8G 2.5G 4.3G 37% / devtmpfs devtmpfs 928M 0 928M 0% /dev tmpfs tmpfs 937M 4.0K 937M 1% /dev/shm tmpfs tmpfs 937M 2.3M 935M 1% /run tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs tmpfs 937M 0 937M 0% /sys/fs/cgroup /dev/nvme0n1p1 ext4 239G 8.1G 231G 4% /run/media/nvme0n1p1 /dev/mmcblk0p2 vfat 99M 21M 78M 22% /run/media/mmcblk0p2 tmpfs tmpfs 188M 0 188M 0% /run/user/0 可以看到INTEL 760P固态硬盘挂载位置为/run/media/nvme0n1p1。 读写速度测试: 写测试: root@localhost:~# dd if=/dev/zero of=/run/media/nvme0n1p1/test.img bs=1024K count=4096 conv=fsync 4096+0 records in 4096+0 records out 4294967296 bytes (4.3 GB, 4.0 GiB) copied, 27.2451 s, 158 MB/s 读测试: root@localhost:~# dd if=/run/media/nvme0n1p1/test.img of=/dev/null bs=1024K count=4096 4096+0 records in 4096+0 records out 4294967296 bytes (4.3 GB, 4.0 GiB) copied, 10.0899 s, 426 MB/s 测试结果: - 24 - 模式 文件系统 文件大小 耗时 速度 写 EXT4 4G 27.2451 s 158 MB/s 读 EXT4 4G 10.0899 s 426 MB/s Ubuntu_UM FET1043A-C、OK1043A-C3 3.10 m.2 Type 2230 接口测试 OK1043A-C3 平台默认支持 INTEL 3168NGW 双频 WiFi 模块和 INTEL 9260NGW 双频 WiFi 模块, 系统上电前将模块插入底板 m.2 Type 2230 卡槽(TTL 串口旁边的卡槽)。上电后启动 linux 后,通过 lspci 可以看到对应设备枚举成功。 INTEL 3168NGW 模块: 双频 WiFi 模块的网络节点为:wlP1p1s0 双频 WiFi 模块的测试方法请参考 WIFI 测试章节。 3.11 网络测试 OK1043A-C3 平台网络部分支持一种配置,具体的配置信息请参考 1.4 节。 测试之前,首先使用 fmc 配置 ls1043 的 frame manager 以获得更好的网络性能。 注:开机默认已经自动配置完成,用户无需再次配置 1455: fmc -c /etc/fmc/config/private/ls1043ardb/RR_FQPP_1455/config.xml \ -p /etc/fmc/config/private/ls1043ardb/RR_FQPP_1455/policy_ipv4.xml -a 3.11.1 SFP+网络测试(P30) 本节采用 SFP+电口模块测试 SFP+接口,测试环境对端为安装有万兆网卡的 linux 主机(本测试中的 主机 eth1 为万兆网卡,其 IP 地址为 192.168.2.181) 若要测试 fm1-mac9,上电前将 SFP+电口模块插入 P30 接口,启动开发板连接网线至 linux 主机,观 察 OK1043A-C3 底板的 D5 D6 指示灯,D6 亮表示 CPU 信号输出正常,D5 亮表示 SFP+电口模块与 linux 主机连接正常。 测试环境参数如下: Linux Host 192.168.2.181 OK1043A-C3 192.168.2.182 使用 iperf 进行打流测试,由于 OK1043A-C3 主控为 4 核 A53 因此,我们开 4 个进程同时打流测试, 在同一局域网内的 Linux 主机上输入: # ifconfig eth1 192.168.2.181 # iperf3 -s -p 1111 & # iperf3 -s -p 2222 & # iperf3 -s -p 3333 & # iperf3 -s -p 4444 & 在 OK1043A-C3 终端上输入以下命令: root@localhost:~# ifconfig fm1-mac4 down - 25 - Ubuntu_UM FET1043A-C、OK1043A-C3 root@localhost:~# ifconfig fm1-mac9 up root@localhost:~# ifconfig fm1-mac9 192.168.2.182 root@localhost:~# echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 为了方便查看测试结果, 我们可以将 fm1-mac6 接入其它主机,开 4 个终端通过 ssh 登录 OK1043A-C3 分别输入以下命令启动测试 : 终端 1:root@localhost:~# iperf3 -c 192.168.2.181 -i 5 -t 60 -p 1111 终端 2:root@localhost:~# iperf3 -c 192.168.2.181 -i 5 -t 60 -p 2222 终端 3:root@localhost:~# iperf3 -c 192.168.2.181 -i 5 -t 60 -p 3333 终端 4:root@localhost:~# iperf3 -c 192.168.2.181 -i 5 -t 60 -p 4444 3.11.2 RGMII 接口网络测试(P13 下) 测试环境参数如下: Linux Host 192.168.1.181 OK1043A-C3 192.168.1.106 在同一局域网内的 Linux 主机上输入: # ifconfig eth0 192.168.1.181 # iperf3 -s 将网线插入 fm1-mac4(J26 上)口,输入以下命令进行测试: root@localhost:~# ifconfig fm1-mac6 down root@localhost:~# ifconfig fm1-mac4 up root@localhost:~# ifconfig fm1-mac4 192.168.1.106 root@localhost:~# echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor root@localhost:~# iperf3 -c 192.168.1.181 -i 5 -t 60 注意:根据 Linux 主机实际 ip 更改此处 192.168.1.181 3.11.3 QSGMII 接口网络测试(P3 上) - 26 - Ubuntu_UM FET1043A-C、OK1043A-C3 测试环境参数如下: Linux Host 192.168.1.181 OK1043A-C3 192.168.1.106 默认情况下,QSGMII(fm1-mac6)配置为自动获取 IP,将网线插入 fm1-mac6 接口(P3 上)。 输入 ifconfig fm1-mac6 查看获取到的 IP。 在同一局域网内的 Linux 主机上输入: # ifconfig eth0 192.168.1.181 # iperf3 -s 在开发板上输入: root@localhost:~# echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor root@localhost:~# iperf3 -c 192.168.1.181 -i 5 -t 60 3.12 RTC 测试 OK1043A-C3平台默认使用 RTC 时钟。本节测试主要通过使用 date 和 hwclock 工具设置软、硬 件时间,测试当开发板断电再上电的时候,软件时钟读取 RTC 时钟是否同步(注意:确保板子上已经安 装了纽扣电池)。 设置时间如下命令: root@localhost:~# date -s "2018-02-11 11:11:00" 串口信息: Sun Feb 11 11:11:00 UTC 2018 - 27 - Ubuntu_UM FET1043A-C、OK1043A-C3 说明:date 设置的格式:MMDDhhmm[[YY]YY][.ss], MM 是月份,DD 是日期,hh 是小时,mm 是 分钟,年份可以写 2 位的 YY 或 4 位 YYYY, 秒可以用.ss 表示。 读取当前时间: root@localhost:~# date 串口信息: Sun Feb 11 11:11:01 UTC 2018 将时间写入 RTC 硬件: root@localhost:~# hwclock -l root@localhost:~# hwclock -w 然后给板子断电再上电,进入系统后读取系统时间,可以看到时间已经同步。 root@localhost:~# date 串口信息: Sun Feb 11 11:14:19 2018 0.000000 seconds 注意:默认 RTC 中没有保存时间信息,启动时 hwclock.service 会失败,请手动按照上述流程设置 RTC 时间。如果需要使用网络对时,请执行命令:root@localhost:~# systemctl enable systemd-timesyncd.service 3.13 看门狗测试 看门狗是嵌入式系统中经常用到的功能,OK1043A-C3中看门狗的设备结点为dev/watchdog 设备文 件,启动watchdog后,如果不喂狗,10秒后系统复位。 1.启动 watchdog root@localhost:~# watchdog 此命令会打开看门狗并执行喂狗操作,因此系统不会重启。 注意:使用ctrl+c结束测试程序时,10s后系统会复位,如不想复位请在ctrl+c之后10s内输入#watchdog -d 关闭看门狗。 2.执行命令 watchdogrestart root@localhost:~# watchdogrestart 此命令会打开看门狗,但不执行喂狗操作,系统会在10s后重启。 3.14 UART 测试 在进行串口回环测试前,请先将需要测试的串口短接。OK1043A-C3 平台底板原理图中标示引出的 UART1、UART2、UART3、UART4 共 4 路串口,其中 UART1 为调试串口,在开发板中的默认设备名称 分别为 ttyS0、ttyS1、ttyS2、ttyS3,在此以测试 UART2 串口为例,按照开发板原理图短接 UART2 的收 发引脚(8、3)。 - 28 - Ubuntu_UM FET1043A-C、OK1043A-C3 在开发板终端执行如下命令: # uarttest -d /dev/ttyS1 若执行后串口打印如下内容,则说明串口通信基本正常: 3.15 WIFI 测试 将 INTEL 3168NGW 双频 WiFi 模块或者 INTEL 9260NGW 双频 WiFi 模块连接到开发板并启动,输 入 ifconfig -a Ubuntu18 中 wifi 的名称不再是 wlan0 类似的命名方式,而是采用固件版本的形式,如上所示 WLE900VX 的名称为 wlP1p1s0。 STA 模式测试: 使用 wifi.sh 脚本生成 wpa_supplicant 配置文件,首先查看 wifi.sh 的使用说明 wifi.sh 参数说明: 参数 说明 -s 准备连接的 WIFI 的名称 -p 准备连接的 WIFI 的密码,如果没有加密请使用-p NONE 例: root@localhost:~# /root/Net_Tools/wifi_wpa.sh -s bjfl -p 123456785. 生成的配置文件为:/etc/wpa_supplicant.conf - 29 - Ubuntu_UM FET1043A-C、OK1043A-C3 连接测试: root@localhost:~# wpa_supplicant -B -c /etc/wpa_supplicant.conf -i wlP1p1s0 & 查看连接状态: root@localhost:~# wpa_cli status -i wlP1p1s0 获取 IP: root@localhost:~# dhclient -i wlP1p1s0 root@localhost:~# ifconfig wlP1p1s0 PING 测试: root@localhost:~# ping www.forlinx.com - 30 - Ubuntu_UM FET1043A-C、OK1043A-C3 设置启动自动连接 WIFI 热点并获取 IP: 首先 vi /lib/systemd/system/wpa_supplicant.service 根据实际情况修改 WIFI 名称这里以 wlP1p1s0 为例。 使能 wpa_supplicant.service: root@localhost:~# systemctl enable wpa_supplicant.service 设置自动获取 IP: root@localhost:~# cp /etc/systemd/network/eth0.network /etc/systemd/network/wlan0.network 修改 WIFI 名称: root@localhost:~# vi /etc/systemd/network/wlan0.network - 31 - Ubuntu_UM FET1043A-C、OK1043A-C3 重新启动开发板稍等几秒钟: root@localhost:~# ifconfig wlP1p1s0 关闭 WIFI 自动连接的方法如下: root@localhost:~# systemctl stop wpa_supplicant.service root@localhost:~# systemctl disable wpa_supplicant.service root@localhost:~# rm /etc/systemd/network/wlan0.network - 32 - Ubuntu_UM FET1043A-C、OK1043A-C3 AP 模式测试: 测试环境说明,使用网线将开发板的 P3 上网络接口接入路由器的 LAN 口,路由位于 192.168.1.0/24 网段,使用 WIFI 建立热点,WIFI 使用 192.168.2.0/24 网段,两网段之间采用 NAT 转发上网。 root@localhost:~# vi /etc/hostapd/hostapd.conf 注意:interface 为 WIFI 网卡的名称,以实际为准。 将 hostapd 设置为开机启动: root@localhost:~# systemctl enable hostapd.service 设置自动 dhcpd:root@localhost:~# vi /etc/dhcp/dhcpd.conf root@localhost:~# ifconfig wlP1p1s0 192.168.2.1 root@localhost:~# systemctl enable isc-dhcp-server.service 设置静态 IP: root@localhost:~# vi /etc/systemd/network/wlan0.network - 33 - Ubuntu_UM FET1043A-C、OK1043A-C3 设置 NAT 打开转发: root@localhost:~# vi /etc/sysctl.conf 将网线插入 fm1-mac6 接口,确保其能正常上网。 - 34 - Ubuntu_UM FET1043A-C、OK1043A-C3 设置转发: root@localhost:~# iptables -t nat -A POSTROUTING -o fm1-mac6 -j MASQUERADE root@localhost:~# netfilter-persistent save root@localhost:~# netfilter-persistent reload 重启发开发板,使用手机搜索 wifi 信号“wifi_test”并连接,密码“12345678” 可以使用浏览器打开网页测试,手机此时可以正常的访问互联网。 关闭 AP 模式: root@localhost:~# rm /etc/iptables/* root@localhost:~# rm /etc/systemd/network/wlan0.network root@localhost:~# systemctl disable isc-dhcp-server.service root@localhost:~# systemctl disable hostapd.service root@localhost:~# reboot - 35 - Ubuntu_UM FET1043A-C、OK1043A-C3 3.16 4G/5G 模块上网测试 OK1043A-C3 支持两种 4G 模块,分别为华为 ME909s 模块和移远 EC20 模块;支持两种 5G 模块, 分别为华为 MH5000-31 模块和移远 RM500Q-GL 模块,默认支持移远 RM500Q-GL 模块,请客户根据自 己选配的 4G/5G 模块型号进行测试。 4G、5G 模块对应设备节点如下: 设备型号 节点名称 ME909s 模块 wwan0 EC20 模块 wwan0 华为 MH5000-31 模块 enx001e101f0000 移远 RM500Q-GL 模块 usb0 注意:因为不同通信模块对供电电平和 USB 协议的需求有区别,所以注意在使用的时候需要通过跳 线帽在 PCB 板子上接不同的插针来选择电平,还需要将拨码开关拨到对应的位置选择使用的 4G/5G 模块, 跳线和拨码开关的形状如下图所示: 3.16.1 4G/5G 识别判断 华为 ME909s 模块 可以在 OK1043A-C3 的控制台输入以下命令看华为 ME909s 4G 模块是否识别成功。 root@localhost:~# lsusb Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 002: ID 12d1:15c1 Huawei Technologies Co., Ltd. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub 使用 ifconfig 命令可以看到华为 ME909s 4G 模块产生的节点名称为 wwan0。 - 36 - Ubuntu_UM FET1043A-C、OK1043A-C3 移远 EC20 模块 可以在 OK1043A-C3 的控制台输入以下命令看移远 EC20 4G 模块是否识别成功。 root@localhost:~# lsusb Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 002: ID 2c7c:0125 Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub 使用 ifconfig 命令可以看到移远 EC20 4G 模块模块产生的节点名称为 wwan0。 华为 MH5000-31 模块 可以在 OK1043A-C3 的控制台输入一下命令看华为 MH5000-31 5G 模块是否识别成功。 root@localhost:~# lsusb Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 002: ID 12d1:15c3 Huawei Technologies Co., Ltd. Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub 使用 ifconfig 命令可以看到华为 MH5000-31 5G 模块产生的节点名称为 enx001e101f0000。 移远 RM500Q-GL 模块 可以在 OK1043A-C3 的控制台输入一下命令看移远 RM500Q-GL 5G 模块是否识别成功。 root@localhost:~# lsusb Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 002: ID 2c7c:0800 Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub 使用 ifconfig 命令可以看到移远 RM500Q-GL 5G 模块模块产生的节点名称为 usb0。 如果识别成功之后,接下来就进行拨号上网。 3.16.2 4G/5G 上网测试 华为 ME909s 模块 以插入联通 SIM 卡测试 4G 上网为例,测试是否连接外网: root@localhost:~# /root/Net_Tools/ok104x_me909s.sh [ 68.200415] cdc_ether 1-1:2.0 wwan0: kevent 12 may have been dropped [ 68.203672] cdc_ether 1-1:2.0 wwan0: kevent 11 may have been dropped - 37 - Ubuntu_UM FET1043A-C、OK1043A-C3 [ 68.207654] cdc_ether 1-1:2.0 wwan0: kevent 11 may have been dropped ME909s module dhcp Complite !!! root@localhost:~# ping www.baidu.com -I wwan0 -c 5 PING www.a.shifen.com (61.135.169.121) from 10.148.39.252 wwan0: 56(84) bytes of data. 64 bytes from 61.135.169.121: icmp_seq=1 ttl=55 time=48.1 ms 64 bytes from 61.135.169.121: icmp_seq=2 ttl=55 time=27.6 ms 64 bytes from 61.135.169.121: icmp_seq=3 ttl=55 time=46.0 ms 64 bytes from 61.135.169.121: icmp_seq=4 ttl=55 time=52.9 ms 64 bytes from 61.135.169.121: icmp_seq=5 ttl=55 time=43.9 ms --- www.a.shifen.com ping statistics --5 packets transmitted, 5 received, 0% packet loss, time 4003ms rtt min/avg/max/mdev = 27.611/43.730/52.931/8.596 ms 测试 ping 百度,发送接收 5 包数据,丢包率为 0,4G 可上外网。如果 4G 模块不能连接外网,请检查 4G 拨号设置或 SIM 卡是否欠费。 查看 4G 拨号脚本为: root@localhost:~# cat /root/Net_Tools/ok104x_me909s.sh #!/bin/sh while true do if [ -c /dev/ttyUSB2 ] then sleep 4 echo "ATE0" > /dev/ttyUSB2 echo "AT^NDISDUP=1,1,\"cmnet\""> /dev/ttyUSB2 ifconfig wwan0 up dhclient wwan0 echo "ME909s module dhcp Complite !!!" exit 0 fi sleep 1 echo "waiting ttyUSB2 device ..." done 如需测试其他网络环境,可以修改此脚本进行 4G 模块的拨号上网设置。 注:echo "AT^NDISDUP=1,1,\"cmnet\""> /dev/ttyUSB2 为移动APN; echo "AT^NDISDUP=1,1,\"3gnet\""> /dev/ttyUSB2 为联通; echo "AT^NDISDUP=1,1,\"ctnet\""> /dev/ttyUSB2 为电信。 移远 EC20 模块 以插入联通 SIM 卡测试 4G 上网为例,测试是否连接外网: - 38 - Ubuntu_UM FET1043A-C、OK1043A-C3 root@localhost:~# /root/Net_Tools/quectel-CM & [01-29_00:06:00:745] WCDMA&LTE_QConnectManager_Linux&Android_V1.1.34 [01-29_00:06:00:746] ./quectel-CM profile[1] = (null)/(null)/(null)/0, pincode = (null) [01-29_00:06:00:747] Find /sys/bus/usb/devices/1-1 idVendor=2c7c idProduct=0125 [01-29_00:06:00:747] Find /sys/bus/usb/devices/1-1:1.4/net/wwan0 [01-29_00:06:00:747] Find usbnet_adapter = wwan0 [01-29_00:06:00:747] Find /sys/bus/usb/devices/1-1:1.4/usbmisc/cdc-wdm0 [01-29_00:06:00:747] Find qmichannel = /dev/cdc-wdm0 [01-29_00:06:00:757] cdc_wdm_fd = 7 [01-29_00:06:00:851] Get clientWDS = 2 [01-29_00:06:00:884] Get clientDMS = 1 [01-29_00:06:00:916] Get clientNAS = 3 [01-29_00:06:00:947] Get clientUIM = 1 [01-29_00:06:00:981] Get clientWDA = 1 [01-29_00:06:01:012] requestBaseBandVersion EC20CEHCR06A02M1G [01-29_00:06:01:107] requestGetSIMStatus SIMStatus: SIM_READY [01-29_00:06:01:140] requestGetProfile[1] 3gnet///0 [01-29_00:06:01:172] requestRegistrationState2 MCC: 460, MNC: 1, PS: Attached, DataCap: LTE [01-29_00:06:01:204] requestQueryDataCall IPv4ConnectionStatus: DISCONNECTED [01-29_00:06:01:267] requestRegistrationState2 MCC: 460, MNC: 1, PS: Attached, DataCap: LTE [01-29_00:06:01:299] requestSetupDataCall WdsConnectionIPv4Handle: 0x86b43070 [01-29_00:06:01:363] requestQueryDataCall IPv4ConnectionStatus: CONNECTED [01-29_00:06:01:395] ifconfig wwan0 up [01-29_00:06:01:399] Fail to access /usr/share/udhcpc/default.script, errno: 2 (No such file or directory) [01-29_00:06:01:407] busybox udhcpc -f -n -q -t 5 -i wwan0 udhcpc: started, v1.27.2 udhcpc: sending discover udhcpc: sending select for 10.91.159.241 udhcpc: lease of 10.91.159.241 obtained, lease time 7200 拨号完成之后需要运行 dhclient 命令 root@localhost:~# dhclient wwan0 root@localhost:~# ping www.baidu.com -I wwan0 -c 5 PING www.a.shifen.com (61.135.169.121) from 10.54.74.74 wwan0: 56(84) bytes of data. 64 bytes from 61.135.169.121: icmp_seq=1 ttl=55 time=25.8 ms 64 bytes from 61.135.169.121: icmp_seq=2 ttl=55 time=44.6 ms 64 bytes from 61.135.169.121: icmp_seq=3 ttl=55 time=44.1 ms 64 bytes from 61.135.169.121: icmp_seq=4 ttl=55 time=41.6 ms 64 bytes from 61.135.169.121: icmp_seq=5 ttl=55 time=40.0 ms --- www.a.shifen.com ping statistics --5 packets transmitted, 5 received, 0% packet loss, time 4004ms rtt min/avg/max/mdev = 25.814/39.267/44.605/6.931 ms - 39 - Ubuntu_UM FET1043A-C、OK1043A-C3 华为 MH5000-31 模块 以插入移动 SIM 卡测试 5G 上网为例,测试是否连接外网: root@localhost:~# /root/Net_Tools/ok104x_MH5000.sh MH5000 module dhcp Complite !!! root@localhost:~# ping www.baidu.com -I enx001e101f0000 -c 5 PING www.a.shifen.com (39.156.66.14) from 10.109.32.164 enx001e101f0000: 56(84) bytes of data. 64 bytes from 39.156.66.14 (39.156.66.14): icmp_seq=1 ttl=51 time=242 ms 64 bytes from 39.156.66.14 (39.156.66.14): icmp_seq=2 ttl=51 time=60.4 ms 64 bytes from 39.156.66.14 (39.156.66.14): icmp_seq=3 ttl=51 time=49.9 ms 64 bytes from 39.156.66.14 (39.156.66.14): icmp_seq=4 ttl=51 time=57.9 ms 64 bytes from 39.156.66.14 (39.156.66.14): icmp_seq=5 ttl=51 time=47.9 ms --- www.a.shifen.com ping statistics --5 packets transmitted, 5 received, 0% packet loss, time 4004ms rtt min/avg/max/mdev = 47.926/91.744/242.484/75.516 ms 测试 ping 百度,发送接收 5 包数据,丢包率为 0,5G 可上外网。如果 5G 模块不能连接外网,请检查 5G 拨号设置或 SIM 卡是否欠费。 查看 5G 拨号脚本为: #!/bin/sh while true do if [ -c /dev/ttyUSB1 ] then sleep 4 echo "ATE0" > /dev/ttyUSB1 echo "AT^NDISDUP=1,1,\"cmnet\""> /dev/ttyUSB1 ifconfig enx001e101f0000 up dhclient enx001e101f0000 echo "MH5000 module dhcp Complite !!!" exit 0 fi sleep 1 echo "waiting ttyUSB1 device ..." done 如需测试其他网络环境,可以修改此脚本进行 5G 模块的拨号上网设置。 注:echo "AT^NDISDUP=1,1,\"cmnet\""> /dev/ttyUSB1 为移动APN; echo "AT^NDISDUP=1,1,\"3gnet\""> /dev/ttyUSB1为联通; echo "AT^NDISDUP=1,1,\"ctnet\""> /dev/ttyUSB1 为电信。 - 40 - Ubuntu_UM FET1043A-C、OK1043A-C3 移远 RM500Q-GL 模块 以插入移动 SIM 卡测试 5G 上网为例,测试是否连接外网: root@localhost:~# /root/Net_Tools/quectel-CM-5G & [1] 5117 [01-28_23:59:05:777] Quectel_QConnectManager_Linux_V1.6.0.15 [01-28_23:59:05:779] Find /sys/bus/usb/devices/2-1 idVendor=0x2c7c idProduct=0x800, bus=0x002, dev=0x002 [01-28_23:59:05:779] Auto find qmichannel = /dev/qcqmi0 [01-28_23:59:05:779] Auto find usbnet_adapter = usb0 [01-28_23:59:05:779] netcard driver = GobiNet, driver version = 22-Aug-2005 [01-28_23:59:05:779] ioctl(0x89f3, qmap_settings) failed: Operation not supported, rc=-1 [01-28_23:59:05:779] qmap_mode = 1, qmap_version = 5, qmap_size = 16384, muxid = 0x81, qmap_netcard = usb0 [01-28_23:59:05:780] Modem works in QMI mode [01-28_23:59:05:813] Get clientWDS = 7 [01-28_23:59:05:845] Get clientDMS = 8 [01-28_23:59:05:877] Get clientNAS = 9 [01-28_23:59:05:909] Get clientUIM = 10 [01-28_23:59:05:941] requestBaseBandVersion RM500QGLAAR01A01M4G_BETA_20200330F 1 [Mar 15 2020 04:00:00] [01-28_23:59:06:069] requestGetSIMStatus SIMStatus: SIM_READY [01-28_23:59:06:101] requestGetProfile[1] 3GNET///0 [01-28_23:59:06:133] requestRegistrationState2 MCC: 460, MNC: 1, PS: Attached, DataCap: LTE [01-28_23:59:06:165] requestQueryDataCall IPv4ConnectionStatus: DISCONNECTED [01-28_23:59:06:166] ifconfig usb 0.0.0.0 [01-28_23:59:06:171] ifconfig usb0 down [01-28_23:59:06:229] requestSetupDataCall WdsConnectionIPv4Handle: 0x7de78490 [01-28_23:59:06:357] ifconfig usb0 up [01-28_23:59:06:362] Fail to access /usr/share/udhcpc/default.script, errno: 2 (No such file or directory) [01-28_23:59:06:362] busybox udhcpc -f -n -q -t 5 -i usb0 udhcpc: started, v1.27.2 udhcpc: sending discover udhcpc: sending select for 10.154.98.28 udhcpc: lease of 10.154.98.28 obtained, lease time 7200 拨号完成之后需要运行 dhclient 命令 root@localhost:~# dhclient usb0 root@localhost:~# ping www.baidu.com -I usb0 -c 5 PING www.a.shifen.com (39.156.66.14) from 10.134.255.146 usb0: 56(84) bytes of data. 64 bytes from 39.156.66.14 (39.156.66.14): icmp_seq=1 ttl=51 time=27.9 ms 64 bytes from 39.156.66.14 (39.156.66.14): icmp_seq=2 ttl=51 time=25.4 ms 64 bytes from 39.156.66.14 (39.156.66.14): icmp_seq=3 ttl=51 time=27.8 ms 64 bytes from 39.156.66.14 (39.156.66.14): icmp_seq=4 ttl=51 time=26.9 ms 64 bytes from 39.156.66.14 (39.156.66.14): icmp_seq=5 ttl=51 time=27.9 ms - 41 - Ubuntu_UM FET1043A-C、OK1043A-C3 --- www.a.shifen.com ping statistics --5 packets transmitted, 5 received, 0% packet loss, time 4006ms rtt min/avg/max/mdev = 25.471/27.245/27.993/0.979 ms 3.17 USER_LED 和 USER 按键测试 OK1043A-C3 支持一个用户自定义 USER_LED 灯,还有一个用户自定义按键 USER。 测试方法如下: USER_LED 灯的点亮与熄灭 root@localhost:~# echo 1 > /sys/class/leds/USER_LED/brightness root@localhost:~# echo 0 > /sys/class/leds/USER_LED/brightness USER 按键测试 首先查看 USER 按键的状态: root@localhost:~# cat /root/DI/USER_DI 1 可以看到 USER 按键为高电平,表示未按下。 将 USER 按键按下不放,再次运行: root@localhost:~# cat /root/DI/USER_DI 0 可以看到 USER 按键变成了低电平,表示已经按下。 - 42 - Ubuntu_UM FET1043A-C、OK1043A-C3 第四章 OK1043A-C3 软件资源测试 4.1 动态/静态 IP 配置测试 默认情况下 OK1043A-C3 开发板 fm1-mac6(P3 上)接口插入网线时将自动获取 IP,如果需要设置默 认自动获取 IP 接口,静态 IP,请参考如下设置: root@localhost:~# cp /etc/systemd/network/fm1-mac6.network \ /etc/systemd/network/fm1-mac6.network.bak 将 /etc/systemd/network/fm1-mac6.network 修改为: [Match] Name=fm1-mac6 KernelCommandLine=!root=/dev/nfs [Network] #DHCP=yes Address=192.168.1.200/24 Gateway=192.168.1.1 设置静态 DNS,将 /etc/systemd/resolved.conf 修改为 - 43 - Ubuntu_UM FET1043A-C、OK1043A-C3 将网线插入fm1-mac6 对应的接口,重启开发板。 注意:其它接口的设置与此类似,创建对应的*.network文件修改Name字段即可。 4.2 时区配置测试 注意:OK1043A-C3 平台默认已经将时间设置为北京时间,如果您不使用其它时区可以略过本节。 运行 root@localhost:~# tzselect 选择 4 亚洲 - 44 - Ubuntu_UM FET1043A-C、OK1043A-C3 选择 9 中国 选择 1 北京 - 45 - Ubuntu_UM FET1043A-C、OK1043A-C3 选择 1 YES ,北京时间的时区为 Asia/Shanghai root@localhost:~# vi ~/.profile 添加 TZ='Asia/Shanghai'; export TZ 4.3 Samba 测试 Samba 是在 Linux 和 UNIX 系统上实现 SMB 协议的一个免费软件,由服务器及客户端程序构成。SMB (Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局 域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB 协议是客户机/服务器型协议,客户 机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP” 使得 Samba 不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。 OK1043A-C3 平台默认安装 samba 服务,可以通过网络访问 OK1043A-C3 的 sata 硬盘等存储设备。 1. 查看配置文件: - 46 - Ubuntu_UM FET1043A-C、OK1043A-C3 root@localhost:~# cat /etc/samba/smb.conf 文件末尾加上如下 [share] comment = Share Folder require password browseable = yes path = /boot create mask = 0777 directory mask = 0777 valid users = share force user = nobody force group = nogroup public = yes writable = yes available = yes 2. 如果您对配置文件有修改,请重启 samba: root@localhost:~# systemctl restart smbd.service 3. Windows 访问测试: 查看开发板 IP: 在同一局域网内的 windows 上打开运行,输入\\192.168.1.200 - 47 - Ubuntu_UM FET1043A-C、OK1043A-C3 访问用户名和密码,均为“share”。 创建测试文件 test.txt 开发板 ls -l /boot 可以看到新加的文件 4.4 Lighttpd 测试 本节将详细介绍如何将 OK1043A-C3 平台打造成一个专属的家庭私有云平台,利用 lighttpd+php 作 为后台服务,PHP 页面采用 KODExplorer 可道云 (原名芒果云) 是一款基于 PHP 开发的开源 WEB 网 页版轻量级私有云网盘工具。而且 KODExplorer 还提供了手机版 (移动端) 的适配支持,即便出门在外 也能随时用手机远程访问和使用自己在网盘上的文件,这点值得一赞。 注意:KODExplorer 目前分为多个版本,本节采用的是免费版,下载链接如有更新请到可道云官网 下载页面获取,如有客户需要采用 KODExplorer 方案进行商用请联系可道云进行授权。 root@localhost:~# mkdir /var/www/html -p 下载可道云: root@localhost:~# cd /var/www/html/ root@localhost:~# wget http://static.kodcloud.com/update/download/kodexplorer4.37.zip root@localhost:~# unzip kodexplorer4.37.zip root@localhost:~# chown -R www-data:www-data /var/www/html 确保开发板正常访问网络,输入 ifconfig fm1-mac6(根据自己使用的实际网口)查看开发板 IP。 - 48 - Ubuntu_UM FET1043A-C、OK1043A-C3 打开浏览器,在地址栏输入:192.168.1.107。 请根据提示设置管理员账户密码并登陆。 点击“文件管理”菜单浏览开发板上的文件。 - 49 - Ubuntu_UM FET1043A-C、OK1043A-C3 将 windows 上的测试视频文件拖到浏览器窗口中,自动开始上传。 在上传成功的文件上右键选择打开,播放视频。 - 50 - Ubuntu_UM FET1043A-C、OK1043A-C3 除了视频文件外,还支持播放音频文件,在线编辑文本等。同时所有 PC 端支持的功能在移动设备上 同样可以体验,打开手机浏览器,输入 192.168.1.107 进行体验。 - 51 - Ubuntu_UM FET1043A-C、OK1043A-C3 4.5 虚拟化测试 4.5.1 Docker 基本环境测试 Docker 是一个基于 LXC 的高级容器引擎,docker 是一种集装箱式的工作方式。正如我们会将各种 不同的货物统一打包成一个个集装箱,进行标准的管理和运输,在 docker 的世界里,我们把应用和应用 所依赖的运行环境打包成一个个 image,然后分发到任意支持 docker 的平台,就可以在这些平台运行我 们的应用,提供服务。Docker 是进程级别的容器,官方推荐一个 docker 只运行一个程序,当然你可以在 你的宿主机上运行成千上万个 docker。 注意:请确保 OK1043A-C3 的时钟准确,否则拉取镜像时会导致认证过期。 1. 下载 hello-world 镜像 root@localhost:~# docker pull hello-world 2. 查看本地 docker image root@localhost:~# docker image ls 3. 运行 hello-world 测试程序 root@localhost:~# docker container run hello-world - 52 - Ubuntu_UM FET1043A-C、OK1043A-C3 4. 下载 ubuntu 镜像 root@localhost:~# docker pull qoriq/arm64-ubuntu 如需查看已经下载的 docker image root@localhost:~# docker image ls - 53 - Ubuntu_UM FET1043A-C、OK1043A-C3 5. 启动 docker Ubuntu 内部运行 lighttp 服务 root@localhost:~# docker run -d -p 30081:80 --name=sandbox1 \ -h sandbox1 qoriq/arm64-ubuntu \ bash -c "lighttpd -f /etc/lighttpd/lighttpd.conf -D" 查看当前 docker container 运行状态 root@localhost:~# docker ps - 54 - Ubuntu_UM FET1043A-C、OK1043A-C3 6. 其它主机通过 web 浏览器访问 docker 内的 http 服务 7.其它相关命令 docker stop containerID 停止正在运行的 docker docker rm containerID 删除已经存在的 docker container docker rmi image_name 删除已经下载的 docker image docker ps -a 查看 docker 运行状态 docker restart containerID 启动对应的 container 4.5.2 LXC 基本环境测试 LXC 的全称为 Linux Container。 LXC 是一种轻量的虚拟技术,Linux 原生支持的容器。可以说 docker 就是基于 LXC 发展起来的,提供 LXC 的高级封装,发展标准的配置方法。 LXC 的定位是替代传统的虚拟机,侧重于提供一个个操作系统,如 Ubuntu、Debian 等。Docker 是 面向应用的,官方提倡一个容器即是一个应用,以应用为中心。所以,docker 还提供了统一的打包部署 方案,即 Dockerfile, 还有版本控制,image 复用,远程仓库以供镜像共享等。 注意:本节测试请确保 OK1043A-C3 能正常访问外部网络,同时保证 OK1043A-C3 的时钟准确,否 则拉取镜像时会导致认证过期。 1. 安装 ubuntu16.04 查看 LXC 版本:root@localhost:~# lxc --version - 55 - Ubuntu_UM FET1043A-C、OK1043A-C3 第一次运行 LXC 时需要执行一次(需要等待几分钟):root@localhost:~# lxd -v init 测试时全部按回车键选择默认即可。 显示可用镜像:root@localhost:~# lxc image list images: | less 创建 ubuntu16.04 容器:root@localhost:~# lxc launch ubuntu:16.04 test 2. 显示本地容器 root@localhost:~# lxc list 3. 查看容器网络 root@localhost:~# lxc network show lxdbr0 - 56 - Ubuntu_UM FET1043A-C、OK1043A-C3 4. 查看容器信息 root@localhost:~# lxc info test 5. 查看容器配置 - 57 - Ubuntu_UM FET1043A-C、OK1043A-C3 6. 运行容器 bash root@localhost:~# lxc exec test -- /bin/bash 使用 exit 命令退出。 注意:如果提示容器未启动,请手动执行 lxc start test - 58 - Ubuntu_UM FET1043A-C、OK1043A-C3 7. 文件下载测试 8. 文件上传测试 9. 停止容器 root@localhost:~# lxc stop test - 59 - Ubuntu_UM FET1043A-C、OK1043A-C3 10. 删除容器 root@localhost:~# lxc delete test 4.5.3 QEMU 基本环境测试 QEMU 是一种通用的开源机器仿真器和虚拟化器。QEMU 支持两种操作模式:用户模式仿真和系统 模式仿真。用户模式仿真 允许一个 CPU 构建的进程在另一个 CPU 上执行(执行主机 CPU 指令的动 态翻译并相应地转换 Linux 系统调用)。系统模式仿真,允许对整个系统进行仿真,包括处理器和配套的 外围设备。 下面将介绍在 OK1043A-C3 平台对系统进行仿真。以开发板 IP 为 192.168.1.105 为例。 路径:OK1043A-C3(Linux)用户资料\工具\qemu 请将用户资料工具目录下的 qemu 文件夹拷贝到开发板根目录: 1. Run KVM Using Hugetlbfs root@localhost:~# echo 256 > /proc/sys/vm/nr_hugepages root@localhost:~# mkdir /boot/hugetlbfs root@localhost:~# mount -t hugetlbfs none /boot/hugetlbfs/ 2. Start qemu root@localhost:~# qemu-system-aarch64 -smp 1 -m 512 -mem-path /boot/hugetlbfs/ \ -cpu host \ -machine type=virt -kernel /run/media/mmcblk0p2/boot/Image -enable-kvm -display none \ -serial tcp::4446,server,telnet -drive if=none,file=/qemu/qemu.ext4.img,id=foo,format=raw \ -device virtio-blk-device,drive=foo -append 'root=/dev/vda rw console=ttyAMA0 rootwait \ earlyprintk' -monitor stdio 在同一局域网的 windows 主机上输入以下命令登录虚拟机: telnet <board ip> 4446 - 60 - Ubuntu_UM FET1043A-C、OK1043A-C3 3. 配置网络 将网线插入 fm1-mac6 接口,查看自动获取的 IP root@localhost:~# ifconfig fm1-mac6 在 OK1043A-C3 上配置网桥,这里以 192.168.1.105 为例,具体 IP 请以实际为准(保证开发板使用 该 IP) root@localhost:~# brctl addbr br0 root@localhost:~# ifconfig br0 192.168.1.105 netmask 255.255.255.0 root@localhost:~# ifconfig fm1-mac6 0.0.0.0 root@localhost:~# brctl addif br0 fm1-mac6 启动 qemu root@localhost:~# qemu-system-aarch64 -smp 1 -m 512 -cpu host -machine type=virt \ -kernel /run/media/mmcblk0p2/boot/Image -enable-kvm -display none \ -serial tcp::4446,server,telnet \ - 61 - Ubuntu_UM FET1043A-C、OK1043A-C3 -drive if=none,file=/qemu/qemu.ext4.img,id=foo,format=raw -device virtio-blk-device,drive=foo \ -netdev tap,id=tap0,script=/qemu/qemu-ifup,downscript=no,ifname="tap0" \ -device virtio-net-pci,netdev=tap0 -append 'root=/dev/vda rw console=ttyAMA0 rootwait \ earlyprintk' -monitor stdio 使用 telnet 登录开发板(IP 为 fm1-mac6 的 IP) telnet 192.168.1.105 4446 查看网卡状态 root@localhost:~# ifconfig -a 配置网卡 IP: root@localhost:~# ifconfig eth0 192.168.1.201 netmask 255.255.255.0 Ping 测试: root@localhost:~# ping 192.168.1.1 4. 使用虚拟磁盘 在 OK1043A-C3 平台上创建磁盘文件 - 62 - Ubuntu_UM FET1043A-C、OK1043A-C3 root@localhost:~# dd if=/dev/zero of=/boot/my_guest_disk bs=4K count=4K 启动 qemu root@localhost:~# qemu-system-aarch64 -smp 1 -m 512 -cpu host -machine type=virt \ -kernel /run/media/mmcblk0p2/boot/Image -enable-kvm -display none \ -serial tcp::4446,server,telnet \ -drive if=none,file=/qemu/qemu.ext4.img,id=foo,format=raw -device virtio-blk-device,drive=foo \ -drive if=none,file=/boot/my_guest_disk,cache=none,id=user,format=raw \ -device virtio-blk-pci,drive=user -append 'root=/dev/vda rw console=ttyAMA0 rootwait earlyprintk' \ -monitor stdio 使用 telnet 登录开发板(IP 为 fm1-mac6 的 IP) telnet 192.168.1.105 4446 查看虚拟磁盘 root@localhost:~# ls /dev/vdb /dev/vdb - 63 - Ubuntu_UM FET1043A-C、OK1043A-C3 使用 fdisk 对虚拟磁盘分区 root@localhost:~# fdisk /dev/vdb Welcome to fdisk (util-linux 2.27.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0xc9820d64. Command (m for help): Command (m for help): p Disk /dev/vdb: 16 MiB, 16777216 bytes, 32768 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xc9820d64 Command (m for help): Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): First sector (2048-32767, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-32767, default 32767): Created a new partition 1 of type 'Linux' and of size 15 MiB. Command (m for help): Command (m for help): p Disk /dev/vdb: 16 MiB, 16777216 bytes, 32768 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xc9820d64 Device Boot Start End Sectors Size Id Type /dev/vdb1 2048 32767 30720 15M 83 Linux Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. - 64 - Ubuntu_UM FET1043A-C、OK1043A-C3 虚拟磁盘格式化 root@localhost:~# mkfs.vfat /dev/vdb1 mke2fs 1.42.13 (17-May-2015) Creating filesystem with 15360 1k blocks and 3840 inodes Filesystem UUID: 8f0c49e4-2737-498e-a984-c5f05ba59b99 Superblock backups stored on blocks: 8193 Allocating group tables: done Writing inode tables: done Creating journal (1024 blocks): done Writing superblocks and filesystem accounting information: done 挂载分区测试 root@localhost:~# mount /dev/vdb1 /mnt root@localhost:~# echo "A virtual disk" > /mnt/test.txt root@localhost:~# cat /mnt/test.txt A virtual disk 5. 使用物理磁盘 Qemu 使用 host 主机的 /dev/mmcblk0 磁盘,注意该磁盘的内容被 qemu 格式化后会丢失。 root@localhost:~# qemu-system-aarch64 -smp 1 -m 512 -cpu host -machine type=virt \ -kernel /run/media/mmcblk0p2/boot/Image -enable-kvm -display none \ -serial tcp::4446,server,telnet \ -drive if=none,file=/qemu/qemu.ext4.img,id=foo,format=raw -device virtio-blk-device,drive=foo \ -object iothread,id=iothread0 \ -drive if=none,file=/dev/mmcblk0,cache=none,id=drive0,format=raw,aio=native \ -device virtio-blk-pci,drive=drive0,scsi=off,iothread=iothread0 \ -append 'root=/dev/vda rw console=ttyAMA0 rootwait earlyprintk' -monitor stdio 在 windows 主机上使用 telnet 登录 qemu - 65 - Ubuntu_UM FET1043A-C、OK1043A-C3 这里的 vdb1 vdb2 vdb3 分别对应 OK1043A-C3 的 mmcblk0p1、mmcblk0p2、mmcblk0p3,我们挂 载第一个分区进行测试。 root@localhost:~# mount /dev/vdb2 /mnt root@localhost:~# ls /mnt/boot 6. 查看 qemu 的状态 启动 qemu root@localhost:~# qemu-system-aarch64 -smp 1 -m 512 -cpu host -machine type=virt \ -kernel /run/media/mmcblk0p2/boot/Image -enable-kvm -display none \ -serial tcp::4446,server,telnet \ -drive if=none,file=/qemu/qemu.ext4.img,id=foo,format=raw -device virtio-blk-device,drive=foo \ -append 'root=/dev/vda rw console=ttyAMA0 rootwait earlyprintk' -monitor stdio - 66 - Ubuntu_UM FET1043A-C、OK1043A-C3 使用 telnet 登录开发板 telnet 192.168.1.105 4446 (IP 为开发板上网的 IP 请以实际为准) 查看磁盘 info roms 查看寄存器 info registers - 67 - Ubuntu_UM FET1043A-C、OK1043A-C3 4.6 OP-TEE 基本环境测试 TEE 背后的基本思想就是将和安全服务提取到独立的安全环境中去运行,当主系统有安全相关的操作 时,通过发动请求到安全环境获取系统预定义的服务。基于此 OP-TEE 可以分为三个部分,TEE 客户端 和用来和安全环境通讯的 TEE 驱动(这 2 个部分都运行在主系统 Linux),以及运行在安全环境中的 TEE OS 和在上面的安全应用,具体参见下图。 OK1043A-C3 平台的 OP-TEE OS 集成于 ppa.itb 固件中,启动 linux 内核可以见到如下打印信息: optee: probing for conduit method from DT. optee: initialized driver OK1043A-C3 平台的文件系统中默认集成了 optee test 程序,可以对 optee os 进行一个全面的测试, 测试方法如下: root@localhost:~# tee-supplicant & root@localhost:~# xtest -l 15 等待测试完成将出现测试结果如下: - 68 - Ubuntu_UM FET1043A-C、OK1043A-C3 测试程序源码位置: Linux 应用程序 flexbuild/packages/apps/optee_test/host OPTEE OS 端的 TA 程序 flexbuild/packages/apps/optee_test/ta 客户需要添加自己的 CA TA 程序时,只需要将编写到的 CA TA 程序放置于以上两个目录修改相应的 Makefile 文件即可。飞凌提供了一个简单的案例 mytest 测试程序。 mytest 测试程序源码位置: Linux 应用程序 flexbuild/packages/apps/optee_test/host/mytest OPTEE OS 端的 TA 程序 flexbuild/packages/apps/optee_test/ta/mytest mytest 程序支持 sha1 sha256 两种安全散列算法,linux 应用程序将“www.forlinx.com”传递给 OPTEE OS 中的 TA 程序进行加密计算将结果返回给 linux 应用程序。 root@localhost:~# tee-supplicant & root@localhost:~# mytest sha1 - 69 - Ubuntu_UM FET1043A-C、OK1043A-C3 root@localhost:~# mytest sha256 - 70 - Ubuntu_UM FET1043A-C、OK1043A-C3 4.7 OpenSSL 基本环境测试 安全套接字层(Ssl)协议是应用最广泛的应用协议,通过使用诸如 aes、des 和 3des 等密码算法对数 据进行加密,在传输过程中对数据进行保护。 使用 OpenSSL 前请先设置环境变量 root@localhost:~# export OPENSSL_CONF=/usr/local/openssl/openssl.cnf 测试对称加密 rsa 速度 root@localhost:~# openssl speed rsa1024 测试 AES 对称加密算法: dd if=/dev/urandom of=test bs=1 count=5922 openssl enc -aes-128-cbc -e -in test -out test.enc -pass pass:123 openssl enc -aes-128-cbc -d -in test.enc -out test.dec -pass pass:123 diff test test.dec 测试 DES 对称加密算法: dd if=/dev/urandom of=test bs=1 count=5922 openssl enc -des-ede3-cbc -e -in test -out test.enc -pass pass:123 openssl enc -des-ede3-cbc -d -in test.enc -out test.dec -pass pass:123 diff test test.dec - 71 - Ubuntu_UM FET1043A-C、OK1043A-C3 4.8 IPSEC 基本环境测试 该项功能设置较为复杂,建议在一定网络基础上开展。需要打开内核 netfilter match ipsec 功能,否则 iptables 不能被正常设置;如果提示 raw 表失败,可以不导入 raw 表,或者内核配置加 raw 表。 Gateway moon 为 OK1043A-C3 fm1-mac1 fm1-mac2 网口。其它 client 为标准 pc 机。 网络拓扑结构: 子网 192.168.0.0/24 使用 ipsec 加密通信,子网 192.168.1.0/24 使用明文通信。 1、 重新配置内核 [*] Networking support ---> Networking options ---> [*] Network packet filtering framework (Netfilter) ---> Core Netfilter Configuration ---> <*> IPsec "policy" match support [*] Networking support ---> Networking options ---> [*] Network packet filtering framework (Netfilter) ---> IP: Netfilter Configuration ---> <*> raw table support (required for NOTRACK/TRACE) 2、 安装 Strongswan apt-get install strongswan 所有使用 ipsec 的主机及网关均需安装,非 root 权限需要加 sudo。 3、 Gateway moon 设置 /etc/ipsec.conf /etc/ipsec.secrets /etc/strongswan.conf /etc/ipsec.d/ ipsec.d 目录存放 CA 证书、私钥和公钥 - 72 - Ubuntu_UM FET1043A-C、OK1043A-C3 路径:OK10XX-C(Linux)用户资料\工具\ipsec moon 相关文件参照 moon_server.tar.bz2 导入 iptables iptables-restore < moon_iptables_1043.txt ifconfig fm1-mac1 192.168.0.1 ifconfig fm1-mac2 192.168.1.250 4、 Roadwarrior carol 设置 /etc/ipsec.conf /etc/ipsec.secrets /etc/strongswan.conf /etc/ipsec.d/ ipsec.d 目录存放 CA 证书、私钥和公钥 路径:OK10XX-C(Linux)用户资料\工具\ipsec 相关文件见 carol_client.tar.bz2 导入 iptables sudo iptables-restore < carol_iptables.txt sudo ifconfig eth0 192.168.0.100 5、 Client alice 设置 alice 位于 192.168.1.0/24 网段内,需要设置 192.168.0.0/24 网关地址 sudo ifconfig eth0 192.168.1.107 sudo route add -net 192.168.0.0/24 dev eth0 - 73 - Ubuntu_UM FET1043A-C、OK1043A-C3 sudo route add -net 192.168.0.0 gw 192.168.0.1 netmask 255.255.255.0 6、 启动 ipsec a、在 moon 网关上执行 ipsec restart b、在 carol 主机上执行 ipsec restart ipsec up home 出现 connection 'home' established successfully 表示 ipsec 认证完成。 7、 carol 和 alice 的 ping 通信 目前位于不同网段的 carol 和 alice 具备通信功能,且 carol 所在子网内使用加密通信。 carol 主机对 alice 主机的 ping。 在网关 192.168.0.1 和 192.168.0.100 之间传递的是 ESP 密文,经过解析产生了 192.168.1.107 对 192.168.0.100 回复的明文。 4.9 DPDK 基本环境测试 DPDK 是用户空间包处理的框架,专注于网络应用中数据包的高性能处理,具体体现在 DPDK 应用 程序是运行在用户空间上,利用自身提供的数据平面库来收发数据包,绕过了 Linux 内核协议栈对数据包 的处理过程。OK1043A-C3 平台支持完整的 DPDK 环境,同时支持 OVS-DPDK,底层基于 DPDK 的 Open VSwitch。 DPDK 的知识库: http://doc.dpdk.org/guides-17.05/linux_gsg/index.html 下面以二层转发和三层转发为例,测试 OK1043A-C3 平台的 DPDK 环境。首先,使用 DPDK 环境, 需要修改设备树,将网络配置到用户态。需要使用到的设备树文件: OK10xx-linux-fs/flexbuild/build/linux/linux/arm64/fsl-ls1043a-rdb-usdpaa.dtb 将 fsl-ls1043a-rdb-usdpaa.dtb 拷贝到开发板根目录,使用如下命令替换设备树: mv /run/media/mmcblk0p2/fsl-ls1043a-rdb-sdk.dtb \ - 74 - Ubuntu_UM FET1043A-C、OK1043A-C3 /run/media/mmcblk0p2/fsl-ls1043a-rdb-sdk.dtb.bak cp /fsl-ls1043a-rdb-usdpaa.dtb /run/media/mmcblk0p2/fsl-ls1043a-rdb-sdk.dtb reboot 替换成功后启动开发板输入: ifconfig fm1-mac1 如果提示 Device not found 就是已经替换成功。 测试 DPDK 完成后恢复默认配置方法: cp /run/media/mmcblk0p2/fsl-ls1043a-rdb-sdk.dtb.bak \ /run/media/mmcblk0p2/fsl-ls1043a-rdb-sdk.dtb reboot 4.9.1 二层转发测试 二层转发网络拓扑如下图所示: 使用 OK1043A-C3 平台的 Port2 和 Port3(对应 fm1-mac3 和 fm1-mac4),对 Linux Host 和 OK1012A-C 之间的数据进行转发。Linux Host 和 OK1012A-C 您可以替换成其他的网络设备。 配置 OK1043A-C3: echo 256 > /proc/sys/vm/nr_hugepages mkdir /boot/hugetlbfs mount -t hugetlbfs none /boot/hugetlbfs/ l2fwd -c 0xf -n 1 -- -p 0xc -q 1 --no-mac-updating 参数 说明 -c Core mask 0xf 使用 4 核 -n 内存通道数 -p Port mask 0xc 二进制 1100 使用 port3 port2 -q 每个核的队列数量默认为 1 --no-mac-updating 转换后不替换 MAC 配置 OK1012A-C: ifconfig eth0 192.168.1.200 tcpdump -i eth0 -vv -n -e 配置 Linux Host: ifconfig eth0 192.168.1.120 sudo modprobe pktgen.ko echo "add_device eth0" > /proc/net/pktgen/kpktgend_0 echo "dst_mac 6e:56:7d:85:ce:4d" > /proc/net/pktgen/eth0 echo "dst 192.168.1.200" > /proc/net/pktgen/eth0 echo "pkt_size 64" > /proc/net/pktgen/eth0 echo "count 1000000" > /proc/net/pktgen/eth0 echo "start" > /proc/net/pktgen/pgctrl - 75 - Ubuntu_UM FET1043A-C、OK1043A-C3 注意:如果您的主机不含有 pktgen 驱动,请自行配置内核编译驱动。 查看 OK1043A-C3: 查看 OK1012A-C: 4.9.2 三层转发测试 三层转发网络拓扑如下图所示: 使用 OK1043A-C3 对 192.168.1.0 网段和 192.168.2.0 网段之间的数据进行转发。 配置 OK1043A-C3: DPDK 中自带的 l3fwd lpm 路由表与我们的网络拓扑环境不一致,因此需要修改代码,修改 OK10xx-linux-fs/flexbuild /packages/apps/dpdk/examples/l3fwd/l3fwd_lpm.c 修改说明: 收到的 192.168.1.0/24 网段数据使用 port2 输出 收到的 192.168.2.0/24 网段数据使用 port3 输出 在 flex-build 环境中使用 flex-builder -c dpdk -a arm64 -m ls1043ardb 命令进行编译。将编译完的可 执行程序 packages/apps/dpdk/examples/l3fwd/build/l3fwd 拷贝到开发板根目录。 /l3fwd -c 0x3 -n 1 -- -p 0xc -P -L --config="(2,0,0),(3,0,1)" \ - 76 - Ubuntu_UM FET1043A-C、OK1043A-C3 --eth-dest=2,74:27:ea:f7:8e:10 --eth-dest=3,6e:56:7d:85:ce:4d 参数 说明 -c Core Mask -n 内存通道数 -p Port Mask -P promiscuous mode -L 使用 LPM --config (Port, Queue, Core)绑定端口队列 cpu 核 --eth-dest 输出端口对应的目的 MAC 地址 配置 OK1012A-C: ifconfig eth0 192.168.2.2 tcpdump -i eth0 -vv -n –e 配置 Linux Host: ifconfig eth0 192.168.1.120 modprobe pktgen.ko echo "add_device eth0" > /proc/net/pktgen/kpktgend_0 echo "dst_mac E2:1C:5E:C0:19:88" > /proc/net/pktgen/eth0 echo "dst 192.168.2.2" > /proc/net/pktgen/eth0 echo "pkt_size 64" > /proc/net/pktgen/eth0 echo "count 1000000" > /proc/net/pktgen/eth0 echo "start" > /proc/net/pktgen/pgctrl 查看 OK1012A-C: 4.10 OVS-DPDK 基本环境测试 本节简单介绍利用 ovs-dpdk 搭建如下图的二层交换环境。 - 77 - Ubuntu_UM FET1043A-C、OK1043A-C3 注意:参考 4.9 节使用设备树 fsl-ls1043a-rdb-usdpaa.dtb。 echo 256 > /proc/sys/vm/nr_hugepages mkdir -p /mnt/hugepages mount -t hugetlbfs none /mnt/hugepages export DPAA_FMC_MODE=1 fmc -c /usr/local/dpdk/dpaa/usdpaa_config_ls1043.xml -p \ /usr/local/dpdk/dpaa/usdpaa_policy_hash_ipv4_1queue.xml -a export DPAA_NUM_RX_QUEUES=1 pkill -9 ovs export DPDK_EXCLUDE_DEFAULT_MBUF=1 export PATH=$PATH:/usr/local/bin export PATH=$PATH:/usr/local/sbin rm -rf /usr/local/etc/openvswitch/conf.db rm -rf /usr/local/var/run/openvswitch/vhost-user1 rm -rf /usr/local/var/run/openvswitch/vhost-user2 rm -f /tmp/conf.db mkdir -p /var/log/openvswitch mkdir -p /usr/local/etc/openvswitch mkdir -p /usr/local/var/run/openvswitch /usr/local/bin/ovsdb-tool create \ /usr/local/etc/openvswitch/conf.db /usr/local/share/openvswitch/vswitch.ovsschema /usr/local/sbin/ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \ --remote=db:Open_vSwitch,Open_vSwitch,manager_options --pidfile --detach \ --log-file=/var/log/openvswitch/ovs-vswitchd.log export DB_SOCK=/usr/local/var/run/openvswitch/db.sock /usr/local/bin/ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true export SOCK_MEM=200 /usr/local/bin/ovs-vsctl --no-wait set Open_vSwitch . \ other_config:dpdk-socket-mem="$SOCK_MEM" export OVS_CORE_MASK=0x1 export OVS_SERVICE_MASK=0x1 ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-lcore-mask=$OVS_SERVICE_MASK ovs-vsctl --no-wait set Open_vSwitch . other_config:pmd-cpu-mask=$OVS_CORE_MASK - 78 - Ubuntu_UM FET1043A-C、OK1043A-C3 ovs-vswitchd unix:$DB_SOCK --pidfile --detach -c $OVS_CORE_MASK ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev ovs-vsctl add-port br0 dpdk0 -- set Interface dpdk0 type=dpdk \ options:dpdk-devargs=fm1-mac1 \ options:n_rxq_desc=256 options:n_txq_desc=256 ovs-vsctl add-port br0 dpdk1 -- set Interface dpdk1 type=dpdk \ options:dpdk-devargs=fm1-mac2 \ options:n_rxq_desc=256 options:n_txq_desc=256 ovs-ofctl del-flows br0 ovs-ofctl add-flow br0 "table=0,priority=100,arp,action=normal" ovs-ofctl add-flow br0 "table=0,priority=100,ip,ct_state=-trk,action=ct(table=1)" ovs-ofctl add-flow br0 "table=1,in_port=1,ip,ct_state=+trk+new,action=ct(commit),2" ovs-ofctl add-flow br0 "table=1,in_port=1,ip,ct_state=+trk+est,action=2" ovs-ofctl add-flow br0 "table=1,in_port=2,ip,ct_state=+trk+new,action=ct(commit),1" ovs-ofctl add-flow br0 "table=1,in_port=2,ip,ct_state=+trk+est,action=1" ovs-vsctl --no-wait set Open_vSwitch . other_config:emc-insert-inv-prob=1 使用网线连接 Host1、OK1043A-C3、Host2,使用以下命令测试转发性能: Host1:iperf3 -s Host2:iperf3 -c 192.168.1.120 -i 1 -t 60 - 79 - Ubuntu_UM FET1043A-C、OK1043A-C3 第五章 FlexBuild 使用 请不要跳过这段话: 开发环境是开发人员在开发过程当中,所需的软硬件平台。开发环境并不是一个固定的样式,在这里, 我们详细讲解一个嵌入式 Linux 开发环境搭建的方法。您已经对嵌入式开发非常了解的话,可以按照自己 的需求来搭建环境。如果和本手册环境不一样而产生报错,您可以从国内一些大 Linux 论坛和网站搜索相 关的信息来解决。本册介绍的环境经过飞凌的测试,如果对嵌入式开发不是非常熟悉的朋友,希望您按照 飞凌提供的方法来搭建环境。 5.1 版本说明 操作系统:Ubuntu18.04 64 位版 交叉工具链:aarch64-linux-gnu-gcc SDK 版本:LSDK-18.06-V4.14 5.2 编译环境搭建 5.2.1 编译环境说明 flexbuild 是 NXP 官方提供的 QorIQ LS 系列的编译环境,飞凌在 NXP 官方版本的 flexbuild 的基础上 针对 OK1043A-C3 平台进行了定制修改,更适合用户快速开发。flexbuild 中提供了整个系统编译需要的所 有源码,比如 linux 内核、uboot、firmware、app 程序以及一个完整的文件系统。对于文件系统,用户可 直接使用,当然您也可以选择从零编译一个文件系统,但是相比飞凌提供的文件系统会缺少一部分配置, 不建议您这样做。 Flexbuild 默认只支持 ubuntu18,当然它也支持 docker,由于大多数用户对 docker 并不熟悉,因此 强烈建议您使用飞凌提供的 ubuntu18 虚拟机进行编译开发。注意:虚拟机用户名为 forlinx,密码为 1 OK1043A-C3 软件镜像编译整体分为两部分,第一部分为启动第一阶段相关内容,主要包含了 rcw、 u-boot、网络相关固件、安全相关固件,整体被编译为一个 16M 的 firmware 镜像。第二部分是 ubuntu 文 件系统。 5.2.2 编译环境搭建 1. 下载 flexbuild 包并解压 路径:OK10XX-C(Linux)用户资料\Linux\源码\OK10xx-linux-fs.tar.bz2 注意:编译过程中请全程使用 root 用户操作 forlinx@ubuntu:~$ sudo -s (此时要求密码,密码为 1) 将 OK10xx-linux-fs.tar.bz2 放到虚拟机 /work 目录 root@ubuntu:~$ mdkir -p /home/forlinx/work root@ubuntu:~$ tar xvf OK10xx-linux-fs.tar.bz2 -C /home/forlinx/work root@ubuntu:~$ cd /home/forlinx/work/OK10xx-linux-fs/flexbuild 2. 主要目录/文件简介 packages 源码目录,含有 linux firmware apps ramdisk 的源码 build 编译目录,用于编译过程产生的临时文件,编译结果位于 build/images 目录 configs 编译配置,flexbuild 适用于多个平台,针对不同平台的配置信息 tools 编译工具,flex-builder flex-installer 等 setup.env 用于配置编译环境变量 3. 设置环境变量 - 80 - Ubuntu_UM FET1043A-C、OK1043A-C3 root@ubuntu:~/work/OK10xx-linux-fs/flexbuild$ source setup.env 注意:整个 flexbuild 环境以该操作为基础,如果您重启了虚拟机或者 Shell 终端都需要重新执行该操 作。 5.3 全部编译 第一次进行编译时,建议您使用全部编译命令进行编译,好处是操作简单,只需要一条命令就可以编 译出所有需要的文件。 root@ubuntu:~/work/OK10xx-linux-fs/flexbuild$ flex-builder -a arm64 -m ls1043ardb 注意:如果您之前编译过 apps,请先执行 flex-builder -i clean-apps,否则编译报错。 生成的文件位于 build/images 目录: 5.4 单独编译 Firmware Ls 系列的芯片在启动时需要加载一些固件,例如 rcw(复位控制字),ppa.itb(optee os),uboot 等,在 开发过程中如果您对上述文件进行了修改,就需要重新编译并将这些文件制打包成一个 firmware 镜像文件, 烧写到启动设备中,编译 firmware 的命令为: 清除之前编译的文件: root@ubuntu:~/work/OK10xx-linux-fs/flexbuild$ flex-builder -i clean-firmware 编译所有的 Firmware: root@ubuntu:~/work/OK10xx-linux-fs/flexbuild$ flex-builder \ -c firmware -a arm64 -m ls1043ardb -b qspi root@ubuntu:~/work/OK10xx-linux-fs/flexbuild$ flex-builder -c firmware -a arm64 -m ls1043ardb -b sd 生成镜像: root@ubuntu:~/work/OK10xx-linux-fs/flexbuild$ flex-builder -i mkfw -a arm64 -m ls1043ardb -b qspi root@ubuntu:~/work/OK10xx-linux-fs/flexbuild$ flex-builder -i mkfw -a arm64 -m ls1043ardb -b sd - 81 - Ubuntu_UM FET1043A-C、OK1043A-C3 5.5 单独编译内核及模块 OK1043A-C3 平台默认的配置文件为:packages/linux/linux/arch/arm64/configs/ls1043_defconfig 清除之前编译文件: root@ubuntu:~/work/OK10xx-linux-fs/flexbuild$ flex-builder -i clean-linux 配置内核(如果使用默认配置可略过) root@ubuntu:~/work/OK10xx-linux-fs/flexbuild$ flex-builder -c linux:custom -m ls1043ardb -a arm64 生成的配置文件为:build/linux/linux/arm64/output/.config - 82 - Ubuntu_UM FET1043A-C、OK1043A-C3 可以将改动过后的文件覆盖:packages/linux/linux/arch/arm64/configs/ls1043_defconfig 编译内核: root@ubuntu:~/work/OK10xx-linux-fs/flexbuild$ flex-builder -c linux -a arm64 -m ls1043ardb 编译 cryptodev 驱动: root@ubuntu:~/work/OK10xx-linux-fs/flexbuild$ flex-builder -c cryptodev-linux -a arm64 -m ls1043ardb 自动将驱动模块更新到文件系统: root@ubuntu:~/work/OK10xx-linux-fs/flexbuild$ flex-builder \ -i merge-component -a arm64 -m ls1043ardb 重新生成 ubuntu 镜像: root@ubuntu:~/work/OK10xx-linux-fs/flexbuild$ flex-builder -i compressrfs -m ls1043ardb 将编译好的内核、设备树文件更新到 build/images 目录: root@ubuntu:~/work/OK10xx-linux-fs/flexbuild$ flex-builder -i genboot -m ls1043ardb 5.6 单独编译 app 程序 在 build/rfs/rootfs_ubuntu_bionic_arm64 目录,默认已经包含了 OK1043A-C3 平台相关的上层应用 层工具例如 OpenSSL 一般情况下用户无需重新编译,如果您对这部分的源码有所改动,需要使用以下命 令单独编译: - 83 - Ubuntu_UM FET1043A-C、OK1043A-C3 编译命令如下: forlinx@ubuntu:~/work/OK10xx-linux-fs/flexbuild$ flex-builder -c apps -m ls1043ardb 注意:如果您之前编译过 apps,请先执行 flex-builder -i clean-apps,否则编译报错。 更新 app 到文件系统中: forlinx@ubuntu:~/work/OK10xx-linux-fs/flexbuild$ flex-builder \ -i merge-component -a arm64 -m ls1043ardb 重新生成 ubuntu 镜像: flex-builder -i compressrfs -m ls1043ardb - 84 - Ubuntu_UM FET1043A-C、OK1043A-C3 第六章 系统固化 6.1 TFTP 烧写 QSPI 6.1.1 TFTP 环境搭建 Tftp 是用来远程下载文件的常用网络协议,基于 udp 实现,在嵌入式调试开发过程中经常用来从 Host 主机下载文件到开发板,避免繁琐的 U 盘拷贝过程。本节主要讲解 Host 端的 tftp server 的环境搭建,飞 凌提供的 ubuntu18.04 中默认已经安装好了 tftp server 您可以略过此节。 安装前请确保您的虚拟机可以访问网络,首先安装 tftp-hpa 和 tftpd-hpa(前者是客户端,后者是服 务程序)以及 xinetd。 forlinx@ubuntu:~$ sudo apt-get install tftp-hpa tftpd-hpa xinetd 重新启动 tftp 服务 forlinx@ubuntu:~$ sudo service tftpd-hpa restart 查看 tftp 配置文件 forlinx@ubuntu:~$ cat /etc/default/tftpd-hpa 默认的 tftp 目录为 /var/lib/tftpboot 保持默认即可,下面进行本地 tftp 测试 forlinx@ubuntu:~$ sudo chmod 777 -R /var/lib/tftpboot forlinx@ubuntu:~$ echo "www.forlinx.com" > /var/lib/tftpboot/test forlinx@ubuntu:~$ tftp localhost get test - 85 - Ubuntu_UM FET1043A-C、OK1043A-C3 q forlinx@ubuntu:~$ ls test 测试成功 6.1.2 TFTP 烧写 QSPI OK1043A-C3 平台的 uboot 阶段可以使用以太网,并且 uboot 中支持 tftp 协议,因此我们只需要稍加 配置开发板的网络,便可以通过 tftp 将文件从 Host 主机下载到开发板的内存,然后烧写到 qspi 中。下面 演示网络配置以及烧写过程。注意,用户的网络环境各不相同,配置网络时,具体的 IP 信息等请以实际 为准。 查看虚拟机 IP: forlinx@ubuntu:~$ ifconfig 拷贝 Firmware 文件到 TFTP 目录: forlinx@ubuntu:~$ cp /home/forlinx/work/OK10xx-linux-fs/flexbuild/build/images/firmware_ls1043a rdb_uboot_qspiboot.img /var/lib/tftpboot/ - 86 - Ubuntu_UM FET1043A-C、OK1043A-C3 将网线插入 J26 下面的网口,开发板上电,连续敲击空格键,使开发板停留在 uboot 命令行。 配置开发板 IP: => setenv ipaddr 192.168.1.200 配置 Server IP: => setenv serverip 192.168.1.104 Ping 测试: => ping 192.168.1.104 - 87 - Ubuntu_UM FET1043A-C、OK1043A-C3 Host is alive 表示网络通信正常,下载文件到内存: => tftp 0x90000000 firmware_ls1043ardb_uboot_qspiboot.img 烧写 QSPI: => sf probe 0:0 => sf erase 0 0x1000000 => sf write 0x90000000 0 0x1000000 reset - 88 - Ubuntu_UM FET1043A-C、OK1043A-C3 将拨码开关 1 拨到 OFF 状态,测试 QSPI 启动。 6.2 制作烧写 TF 卡 OK1043A-C3 平台含有一个 TF 卡接口,但是由于它与 eMMC 冲突,一般情况下无法使用,但是我们 可以使用它来引导系统启动,启动之后拔出 TF 卡,系统自动将 Flash 切换到 eMMC。当然前提需要我们 将 firmware 烧到 TF 卡中,下面是制作烧写 TF 卡的过程。 1. 将 TF 卡插入主机,并将其连接到虚拟机 Ubuntu 中 - 89 - Ubuntu_UM FET1043A-C、OK1043A-C3 2. 查看设备节点 如果您只插入了一个 TF 卡设备默认情况下设备节点为 /dev/sdb 具体以实际情况为准 3. 烧写 firmware 到 TF 卡 首先将 用户资料/手册/1043 用户手册 6.2 章节制作 SD 烧写卡用镜像/firmware_ls1043ardb_uboot_s dboot.img 放到 Ubuntu 的 work 目录。 做如下操作将镜像写入 TF 卡: forlinx@ubuntu:~/work/$ sudo dd \ if=firmware_ls1043ardb_uboot_sdboot.img of=/dev/sdb seek=8 bs=512 - 90 - Ubuntu_UM FET1043A-C、OK1043A-C3 烧写 TF 卡需要配合 U 盘来使用,烧写步骤请参考下一节。 6.3 U 盘烧写 eMMC 和 QSPI OK1043A-C3 平台可以使用 U 盘来烧写文件系统到 eMMC 中,或者更新 QSPI flash 中的 Firmware。 前提是 Uboot 能够正常启动,如果您 QSPI Flash 无法启动,那么您可以使用上一节制作的烧写 TF 卡来 烧写,同时需要一个 FAT32 格式的 U 盘存放烧写镜像, U 盘文件说明如下: 请使用普通正品 U 盘,U 盘的第一个分区为 FAT32 且大于 4G。 Scripts ls1043ardb_update.scr Tools usb_update.itb Rootfs ubuntu.img/openwrt.img Firmware firmware_ls1043ardb_uboot_qspiboot.img firmware_ls1043ardb_uboot_sdboot.img Config config.ini Boot 内核及设备树等 U 盘 FAT32 分区存放以下文件: 其中 rootfs 和 firmware 可以选择其一进行放置,也可全部放置。配置文件 config.ini 内容如下: 注意: 默认配置烧写时只更新文件系统,如果您需要同时更新 QSPI Flash,请将 config.ini 文件中“qspiflash” 字段修改为“true”。 将烧写 TF 卡插入 TF 卡座,将 U 盘插入 OK1043A-C3 的 USB 接口,启动开发板,按空格键,停在 uboot 命令行,此时弹出 TF 卡,系统自动将切换到 eMMC,输入 boot 进入烧写流程。(如果您 QSPI 能 够正常引导系统,那么仅插入 U 盘启动系统即可,无需操作 TF 卡) - 91 - Ubuntu_UM FET1043A-C、OK1043A-C3 - 92 - Ubuntu_UM FET1043A-C、OK1043A-C3 附录 附录 1 设置默认 CPU 调频策略 默认情况下 OK1043A-C3 启动后 CPU 调频策略为 ondemand root@localhost:/# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor ondemand 如果想使用其它策略,以高性能模式为例,可以进行如下设置 root@localhost:/# systemctl disable ondemand.service 修改 root@localhost:/# vi /etc/default/cpufrequtils 添加 GOVERNOR="performance" 重启测试 root@localhost:/# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor performance 注意:这里以操作 cpu0 为例,实际过程 cpu1、cpu2、cpu3 会同时改变。 附录 2 环境变量配置文件 uEnv.txt 使用方法 OK1043A-C3 平台支持启动过程中通过文件导入部分环境变量,例如可以将默认的网卡 MAC 地址写 在 uEnv.txt 文件中设置固定的网卡 MAC 地址。 启动时系统会读取 eMMC 第二个分区 boot 目录中的内核以及设备树文件,如果存在 uEnv.txt 则将其 中的环境变量导入到系统中。以修改网卡 MAC 为例进行测试。 root@localhost:/# mount | grep mmcblk0p2 创建 uEnv.txt 文件 root@localhost:~# vi /run/media/mmcblk0p2/boot/uEnv.txt 添加如上环境变量,重启系统。 - 93 - Ubuntu_UM FET1043A-C、OK1043A-C3 启动过程中可以看到 log 信息 Importing environment from uEnv.txt ... 可以看出,我们添加的环境变量已经生效。在批量生产时,您可以将 uEnv.txt 放入烧写 U 盘的 boot 目录,烧写时将自动将 uEnv.txt 烧入 eMMC 中。 - 94 -