ARM
本文所述的ARM的指的是Cortex A系列以及ARM9,ARM11,跑Linux操作系统。对于CortexM系列并不一定完全适用;
谈到ARM以及启动和烧写等方面,首先我们要明确一下几个关键词:Uboot,Cmdline,启动方式选择,文件系统格式,存储介质,如NAND,EMMC,SD卡等
下面一个一个做相关介绍:
启动方式:
① 一般CPU都可以配置为从多种介质启动,比如SPI Nor Flash,NAND,EMMC,SD卡,U盘等
② 大致原理是CPU内部ROM有一段固化的启动代码,根据CPU配置引脚,判断启动位置,然后从外部介质读取数据启动
③ 一般启动介质的前一部分代码的作用必须是:初始化硬件参数,自身拷贝
④ 关于自拷贝:因为CPU内部RAM很小,因此只能读取一部分启动介质的数据即Uboot到内部RAM运行,所以Uboot前一部分的工作需要将自身剩余部分拷贝到外部RAM中,然后加载运行
Uboot:
① 主要作用:引导Linux系统(主要是从存储介质的哪个地方读取Kernel,传递什么样的启动参数)
② 其他功能:支持很多命令,主要是存储控制和网络命令,最终目的还是引导和升级系统用
③ 常用操作:TFTP,NAS,Flash操作,UBI操作,Setenv,boot等
④ 一般升级系统流程:使用tftp方式从主机下载kernel及文件系统等文件,然后使用flash等命令烧写到存储介质如NAND,最后设定启动参数,然后引导系统启动;
⑤ 一般调试流程,介绍2种:
- 使用NAS从主机直接加载文件系统,直接在线调试,快捷方便
- 设定从SD卡启动,从SD卡加载kernel和文件系统调试
CMDLINE:
① 一般由Uboot传递给Kernel,或者Kernel中配置写死不过一般很少见
② 主要2个参数:
第一,指定console设备,用于打印输出及做控制台用
第二,指定rootfs挂载分区和类型
③ 看2个例子:
从NAND启动,/proc/cmdline,加载的是UBI文件系统,位置在mtd3
console=ttymxc0,115200 ubi.mtd=3 root=ubi0:rootfs rootfstype=ubifs mtdparts=gpmi-nand:5m(boot),10m(kernel),1m(dtb),-(rootfs)
从SD卡启动,/proc/cmdline,加载的是ext4文件系统,位置在sd卡第二分区mmcblk0p2
console=ttymxc0,115200 root=/dev/mmcblk0p2 rootwait rw rootdelay=5 mem=256M fstype=ext4 mtdparts=gpmi-nand:5m(boot),10m(kernel),1m(dtb),-(rootfs)
存储介质:
主要介绍Raw Flash 及 FTL devices区别
Flash特点:写入前需要先擦除,有寿命且不长,而且容易产生坏块
RAW Flash:即裸芯片,没有控制器,针对其主要操作有擦除,读和写
Device: 在裸芯片上加了控制器,比如SD卡,U盘等;加了控制器后,只需要读和写就行了,不需要擦除。控制器做了一系列的工作:擦除,磨损平衡,磨损算法等等,一个控制器算法的好坏直接决定了设备的使用寿命。
文件系统:
① FAT:windows常用文件系统,一般U盘,sd卡即为fat格式
② ext2/3/4,Linux常用文件系统,一般用于FTL Device,即只有读和写
③ JFFS2,Linux常用,一般用于容量较小的Flash,且是Raw Flash,MTD设备
④ UBIFS,Linux常用文件系统,只能用于Raw Flash,因为kernel ubi子系统,有相关的磨损平衡算法,可以保证效率
⑤ SD卡启动,文件系统挂载情况:
# mount /dev/root on / type ext4 (rw,noatime,data=ordered) proc on /proc type proc (rw,nosuid,nodev,noexec,noatime) sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,noatime) tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noatime) tmpfs on /dev type tmpfs (rw,nosuid,relatime,size=512k,mode=755) devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,mode=600) debugfs on /sys/kernel/debug type debugfs (rw,noatime) # # cat /proc/mtd dev: size erasesize name mtd0: 00500000 00020000 "boot" mtd1: 00a00000 00020000 "kernel" mtd2: 00100000 00020000 "dtb" mtd3: 0f000000 00020000 "rootfs"
⑥ NAND启动,文件系统挂载情况:
# mount ubi0:rootfs on / type ubifs (rw,relatime) devtmpfs on /dev type devtmpfs (rw,relatime,size=89164k,nr_inodes=22291,mode=755) proc on /proc type proc (rw,relatime) devpts on /dev/pts type devpts (rw,relatime,gid=5,mode=620) tmpfs on /dev/shm type tmpfs (rw,relatime,mode=777) tmpfs on /tmp type tmpfs (rw,relatime) tmpfs on /run type tmpfs (rw,nosuid,nodev,relatime,mode=755) sysfs on /sys type sysfs (rw,relatime) # # cat /proc/mtd dev: size erasesize name mtd0: 00500000 00020000 "boot" mtd1: 00a00000 00020000 "kernel" mtd2: 00100000 00020000 "dtb" mtd3: 0f000000 00020000 "rootfs"
烧写过程:
① 一般从SD卡等外部方式启动,在Uboot中,使用flash命令及UBI命令分别烧写uboot,dtb,kernel,rootfs到对应的分区即可
② 第二使用芯片厂家的烧写工具,如nxp的 mfgtoos,在pc上通过usb烧写文件
③ 如已有uboot,在uboot中从sd卡,U盘等读取文件烧写;或tftp从pc下载文件烧写
升级过程:
① 此升级指的是Uboot OK的前提下做Uboot,kernel,rootfs等升级
② 通过SD卡升级,一般是首先在PC上制作SD卡启动分区,通过官方的工具烧写升级文件到SD卡即可;此处的升级文件分两个方面:
- 最小升级内核,并且包含升级脚本,此脚本会将目标文件烧写到存储介质中
- 目标升级文件,即要烧写到比如NAND中的文件
③ 以NXP SD卡升级为例说明此过程:
首先是Uboot启动过程:
U-Boot 2016.03-mys-imx6ulx+gca7b81f (Apr 27 2017 - 07:55:51 +0800) CPU: Freescale i.MX6ULL rev1.0 528 MHz (running at 396 MHz) CPU: Commercial temperature grade (0C to 95C) at 39C Reset cause: POR Board: MX6ULL 14x14 EVK I2C: ready DRAM: 512 MiB MMC: FSL_SDHC: 0, FSL_SDHC: 1 *** Warning - bad CRC, using default environment Display: TFT43AB (480x272) Video: 480x272x24 In: serial Out: serial Err: serial switch to partitions #0, OK mmc0 is current device Net: Board Net Initialization Failed No ethernet found. Normal Boot Hit any key to stop autoboot: 0 switch to partitions #0, OK mmc0 is current device switch to partitions #0, OK mmc0 is current device reading boot.scr 423 bytes read in 10 ms (41 KiB/s) Running bootscript from mmc ... ## Executing script at 80800000 reading zImage 6789824 bytes read in 302 ms (21.4 MiB/s) reading mys-imx6ull-14x14-evk-gpmi-weim.dtb 36951 bytes read in 20 ms (1.8 MiB/s) Kernel image @ 0x83000000 [ 0x000000 - 0x679ac0 ] ## Flattened Device Tree blob at 84000000 Booting using the fdt blob at 0x84000000 Using Device Tree in place at 84000000, end 8400c056 Starting kernel ..
最小系统加载启动完毕后,运行升级脚本
VFS: Mounted root (ext4 filesystem) on device 179:2. devtmpfs: mounted Freeing unused kernel memory: 432K (80b54000 - 80bc0000) INIT: version 2.88 booting Starting udev udevd[114]: starting version 3.1.5 random: udevd urandom read with 32 bits of entropy available EXT4-fs (mmcblk0p2): re-mounted. Opts: data=ordered bootlogd: cannot allocate pseudo tty: No such file or directory FAT-fs (mmcblk0p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck. ALSA: Restoring mixer settings... /usr/sbin/alsactl: load_state:1735: No soundcards found... INIT: Entering runlevel: 5 Starting system message bus: dbus. System update start ... prepare files are okay
升级脚本分析:
root@mys6ull14x14:/run/media/mmcblk0p2# cat usr/bin/flash_nand.sh #!/bin/sh part_uboot=0 part_kernel=1 part_dtb=2 part_rootfs=3 echo heartbeat > /sys/class/leds/user/trigger mfg_path=/run/media/mmcblk0p1/mfg-images //升级目标文件 uboot=${mfg_path}/u-boot.imx kernel=${mfg_path}/zImage dtb=${mfg_path}/gpmi-weim.dtb rootfs=${mfg_path}/core-image-base.rootfs.tar.xz if [ -d $mfg_path ] && [ -s $uboot ] && [ -s $kernel ] && [ -s $dtb ] && [ -s $rootfs ] then echo "prepare files are okay" else echo 0 > /sys/class/leds/user/brightness echo "file or directory not exist" fi 直接使用Flash命令烧写Uboot到对应分区 echo "Flashing uboot" flash_erase /dev/mtd${part_uboot} 0 0 && kobs-ng init -x -v ${uboot} if [ $? -eq 0 ] then echo "Flash uboot okay" else echo "Flash uboot failed" echo 0 > /sys/class/leds/user/brightness exit fi 直接使用Flash命令烧写kernel到对应分区 echo "Flashing kernel" flash_erase /dev/mtd${part_kernel} 0 0 && nandwrite -p /dev/mtd${part_kernel} -p ${kernel} if [ $? -eq 0 ] then echo "Flash kernel okay" else echo "Flash kernel failed" echo 0 > /sys/class/leds/user/brightness exit fi 直接使用Flash命令烧写dtb到对应分区 echo "Flashing dtb" flash_erase /dev/mtd${part_dtb} 0 0 && nandwrite -p /dev/mtd${part_dtb} -p ${dtb} if [ $? -eq 0 ] then echo "Flash dtb file okay" else echo "Flash dtb file failed" echo 0 > /sys/class/leds/user/brightness exit fi 烧写rootfs比较特别,此处是使用ubifs,因此需要先使用ubi命令在NAND上建立好文件系统格式 echo "Flashing rootfs" flash_erase /dev/mtd${part_rootfs} 0 0 if [ $? -ne 0 ] then echo "erase /dev/mtd${part_rootfs} fail" echo 0 > /sys/class/leds/user/brightness exit fi ubiformat /dev/mtd${part_rootfs} if [ $? -ne 0 ] then echo "format /dev/mtd${part_rootfs} fail" echo 0 > /sys/class/leds/user/brightness exit fi ubiattach /dev/ubi_ctrl -m ${part_rootfs} if [ $? -ne 0 ] then echo "attach /dev/mtd${part_rootfs} fail" echo 0 > /sys/class/leds/user/brightness exit fi ubimkvol /dev/ubi0 -Nrootfs -m if [ $? -ne 0 ] then echo "make volume /dev/mtd${part_rootfs} fail" echo 0 > /sys/class/leds/user/brightness exit fi mkdir -p /run/media/mtd${part_rootfs} \ && mount -t ubifs ubi0:rootfs /run/media/mtd${part_rootfs} if [ $? -ne 0 ] then echo "mount /dev/mtd${part_rootfs} fail" echo 0 > /sys/class/leds/user/brightness exit fi 建立好ubi格式之后,直接将rootfs压缩包解压到对应分区即可; tar xvf ${rootfs} -C /run/media/mtd${part_rootfs} if [ $? -eq 0 ] then echo "Flash filesystem okay" sync && sync && sync echo none > /sys/class/leds/user/trigger echo 1 > /sys/class/leds/user/brightness else echo "Flash filesystem failed" echo 0 > /sys/class/leds/user/brightness umount /run/media/mtd${part_rootfs} exit fi umount /run/media/mtd${part_rootfs} echo "Programming success" echo "You need reboot the board"
版权声明:本文为博主 WindLOR 原创文章,
遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/wind0419/article/details/77973144
Arm以其在移动设备中的Cortex系列处理器而闻名,然而主流Cortex-A系列CPU并不是该公司唯一提供的CPU,Arm还提供了用于高性能实时应用的Cortex-R系列 "实时 "处理器。上一次我们谈到Cortex-R产品是在2016年发布的R8。当时,该公司提出R8将广泛用于调制解调器子系统内部的5G连接解决方案。
R系列的另一大市场是存储解决方案,Cortex-R处理器作为主要的处理元件被用于HDD和SSD控制器。今天,Arm公司推出了全新的Cortex-R82,代表了该公司首款64位Armv8-R架构处理器IP,这意味着它是该公司首款64位实时处理器,从而扩展了R系列的产品组合。
到目前为止,上一代R处理器都是基于前代Armv7-R或ArmV8-R的32位架构,比如Cortex-R52。多年来,这对于部署这些处理器的用例来说还是不错的,也足够了。然而,在现代产品中,我们看到更大内存寻址的设计变得必要。例如,现代固态硬盘在其控制器上经常使用高达2GB的DRAM内存,这接近于R8 CPU的32位4GB内存寻址限制。
新的Cortex-R82增强了核心,使其性能比R8提升了2倍,使用了更宽的物理寻址空间,最高可达1TB,这与系统的其他部分是一致的。Arm目前并没有透露太多关于R82的微架构,以及它与R8的不同之处,但我们猜想随着向Armv8-R架构的转变,会有一些重大的变化。
从架构和微架构方面来看,这里一个重要的新增功能是可选择加入用于SIMD处理的NEON单元,包括新的点产品指令。这将使处理器本身具有更高性能的并行处理计算能力,使SSD控制器设计者等客户的设计更具灵活性。
微架构的另一大变化是加入了MMU,这使得Cortex-82实际上可以作为Linux等丰富操作系统的通用CPU。如果处理器可以自己运行自己的操作系统,这对于-R系列未来的目标市场可能性来说,其实是一个相当大的变化。Arm的产品介绍主要集中在存储控制器上,既能像现在这样运行实时工作负载,又能加入丰富的操作系统,以实现更复杂的算法和更高层次的应用,而这些在裸机和实时操作系统上是不太可行的。
随着存储市场的发展,我们看到合作伙伴提出的最大要求之一就是灵活性。Cortex-R82处理器的新特性让合作伙伴有可能设计出多达8个内核的多核实现,并根据软件中的外部需求调整存储控制器上运行的工作负载类型。例如,停车场会经常使用视频监控来识别车牌信息,而这些车牌信息以后会被用于计费。在白天,车辆登记车牌数据会被收集,这意味着大部分核心被用于密集存储。到了晚上,这些核心将用于处理计费数据,并将调整进行所需的数据分析和机器学习。随着存储控制器越来越多样化,以应对不同的市场和功能,Cortex-R82提供的架构可以提供这种极度的灵活性--降低成本和上市时间。
Arm表示,目前85%的存储解决方案都使用Cortex-R处理器,因此新的R82很可能代表着性能的大跃进,并为厂商在未来设计中设计新的差异化功能提供了新的可能性。
来源:cnBeta.COM
- Arm推出业界首款搭配Cortex-M使用的微神经网络处理器(microNPU),搭配最新的Cortex-M处理器,可使机器学习性能提升480倍
- 全新的IP可让无处不在的数十亿个下一代更小型、低功耗的设备具备更强的机器学习处理能力
- 软件开发流程针对提高开发人员的生产力进行了优化,并针对这些全新处理器的各种配置将机器学习性能最大化
(2020年2月11日) Arm今天宣布其人工智能(AI)平台新增重要生力军,包括全新机器学习(ML) IP:Arm® Cortex®-M55处理器和Arm Ethos™-U55神经网络处理器(NPU),后者也是针对Cortex-M平台推出的业界首款微神经网络处理器(microNPU)。这样的设计(Cortex-M55结合Ethos-U55)为微控制器带来480倍的机器学习性能飞跃。全新的IP与搭配的开发工具,能够让AI硬件与软件开发人员以更多的方式进行创新,从而为数十亿个小型、低功耗的物联网与嵌入式设备带来前所未有的终端机器学习处理能力。
Arm 资深副总裁暨车用与物联网事业部总经理Dipti Vachani表示:“要让AI无所不在,设备制造商与开发人员必须在数十亿、乃至数万亿个设备上实现终端机器学习能力。我们的AI平台增添这些生力军后,即便在最小的设备上,终端机器学习也将成为新常态,不会再有遗珠之憾,从而让AI的潜力可以在范围宽广的、正在改变我们生活的应用当中得以安全、有效地发挥。”
随着物联网的发展与AI和5G的发展相互交织,更多的终端智能意味着更小型且成本敏感的设备会愈来愈智能、功能也愈来愈强,同时因为对云端与网络的依赖较小,也将具备更高的隐私性与可靠度。Arm通过新的设计为微处理器带来安全的智能,为想要有效提升终端数字信号处理(DSP)与机器学习能力(ML)的产品制造商降低芯片与开发成本,同时加快他们的产品上市速度。
Arm Cortex-M55: Arm人工智能能力最强大的Cortex-M处理器
Cortex-M处理器已经成为开发人员运算平台的最佳选择,Arm的合作伙伴已经出货超过500亿片基于Cortex-M的芯片,用于各种客户应用。新增的Cortex-M55是Arm历来AI能力最为强大的Cortex-M处理器,也是首款基于Armv8.1-M架构、内建Arm Helium向量处理技术的处理器,它可以大幅提升DSP与ML的性能,同时更省电。与前几代的Cortex-M处理器相比,Cortex-M55的ML性能最高可提升15倍,而DSP性能也可提升5倍,且具备更佳的能耗比。
此外,客户也可以使用Arm Custom Instructions (Arm自定义指令集)延伸处理器的能力,对特定工作负载进行优化,而这也是Cortex-M处理器的全新功能。
Ethos-U55: Arm针对Cortex-M推出的首款microNPU
针对需求更高的ML系统,可将Cortex-M55与Ethos-U55搭配,后者是Arm首款微神经处理器(microNPU),与现有的Cortex-M处理器相比,两者结合后可使产品ML性能提升480倍。
Ethos-U55具有高度的可配置性,旨在加速空间受限的嵌入式与物联网设备的ML推理能力。它先进的压缩技术可以显著节省电力并缩小ML模型尺寸,以便运作之前只能在较大型系统上执行的神经网络运算。
简化的软件使得所有开发人员都能获取安全的AI功能
Arm非常清楚,开发人员的经验对于推动AI革命是至关重要的。因此,Cortex-M55与Ethos-U55得到了Arm业界领先的Cortex-M软件开发工具链的全力支持。如此一来,我们针对传统DSP与ML等工作负载,有了一致的开发流程;同时从TensorFlow Lite Micro开始,针对先进机器学习框架进行特定的整合与优化,确保开发人员拥有无缝的开发体验,并能够在任何一种Cortex-M与Ethos-U55的配置上,获取最佳性能。
Arm认为安全不应该是事后弥补措施,它对于物联网的普及极为重要。为了确保最安全的设计并顺利通过PSA认证,这些处理器和搭配的Corstone参考设计都可以与Arm TrustZone一起工作,以确保安全性可以更为简易地整合到完整的片上系统中。
赋能生态系统
全新的Cortex-M CPU与Ethos microNPU凸显了Arm对推动物联网发展的承诺:致力于协助芯片设计人员与设备制造商,即便在最小的终端设备上,也能利用Arm架构进行创新,并为物联网点燃新一波创造力与创新性。这一技术正获得生态系统合作伙伴与业界的广泛支持,其中包括亚马逊(Amazon)、Alif半导体(Alif Semiconductor)、恒玄科技(Bestechnic)、赛普拉斯(Cypress)、杜比(Dolby)、Google、恩智浦半导体(NXP)、三星(Samsung)、意法半导体(STMicroelectronics)等。
您可以通过Arm资深副总裁暨车用与物联网事业部总经理Dipti Vachani的这篇博客,了解此新技术如何带给数十亿设备AI体验。
您也可以点击以下链接,获取更多有关Cortex-M55 与Ethos-U55的技术细节。
关于Arm
作为计算及互联革命的核心,Arm技术正改变着人们生活及企业运行的方式。Arm先进的低功耗处理器设计已应用于超过1,500亿颗芯片的智能计算,Arm的技术安全地为电子设备提供支持,覆盖从传感器到智能手机乃至超级计算的多样化应用。结合我们的物联网设备、连接与数据管理平台,Arm技术帮助客户从互联设备中获得强大且可执行的洞察,从而赋能真正的商业价值。Arm携手超过1,000家技术合作伙伴,为从芯片到云端的整个计算领域提供设计、安全和管理方面的技术,并在该技术领域处于业界领先地位。
关于ARM的GPIO上拉下拉的基本理解
demi 在 提交