首页| 行业标准| 论文文档| 电子资料| 图纸模型
购买积分 购买会员 激活码充值

您现在的位置是:团子下载站 > 其他 > 总结分析:ARM的启动,系统升级,烧写过程和文件系统

总结分析:ARM的启动,系统升级,烧写过程和文件系统

  • 资源大小:107.07KB
  • 上传时间:2021-12-14
  • 下载次数:0次
  • 浏览次数:70次
  • 资源积分:1积分
  • 标      签: 烧写 arm

资 源 简 介

本文所述的ARM的指的是CortexA系列以及ARM9,ARM11,跑Linux操作系统。对于CortexM系列并不一定完全适用;谈到ARM以及启动和烧写等方面,首先我们要明确一下几个关键词:Uboot,Cmdline,启动方式选择,文件系统格式,存储介质,如NAND,EMMC,SD卡等下面一个一个做相关介绍:启动方式:①一般CPU都可以配置为从多种介质启动,比如SPINorFlash,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文件系统,位置在mtd3console=ttymxc0,115200ubi.mtd=3root=ubi0:rootfsrootfstype=ubifsmtdparts=gpmi-nand:5m(boot),10m(kernel),1m(dtb),-(rootfs)从SD卡启动,/proc/cmdline,加载的是ext4文件系统,位置在sd卡第二分区mmcblk0p2console=ttymxc0,115200root=/dev/mmcblk0p2rootwaitrwrootdelay=5mem=256Mfstype=ext4mtdparts=gpmi-nand:5m(boot),10m(kernel),1m(dtb),-(rootfs)存储介质:主要介绍RawFlash及FTLdevices区别Flash特点:写入前需要先擦除,有寿命且不长,而且容易产生坏块RAWFlash:即裸芯片,没有控制器,针对其主要操作有擦除,读和写Device:在裸芯片上加了控制器,比如SD卡,U盘等;加了控制器后,只需要读和写就行了,不需要擦除。控制器做了一系列的工作:擦除,磨损平衡,磨损算法等等,一个控制器算法的好坏直接决定了设备的使用寿命。文件系统:①FAT:windows常用文件系统,一般U盘,sd卡即为fat格式②ext2/3/4,Linux常用文件系统,一般用于FTLDevice,即只有读和写③JFFS2,Linux常用,一般用于容量较小的Flash,且是RawFlash,MTD设备④UBIFS,Linux常用文件系统,只能用于RawFlash,因为kernelubi子系统,有相关的磨损平衡算法,可以保证效率⑤SD卡启动,文件系统挂载情况:#mount/dev/rooton/typeext4(rw,noaTIme,data=ordered)procon/proctypeproc(rw,nosuid,nodev,noexec,noaTIme)sysfson/systypesysfs(rw,nosuid,nodev,noexec,noaTIme)tmpfson/tmptypetmpfs(rw,nosuid,nodev,noaTIme)tmpfson/devtypetmpfs(rw,nosuid,relatime,size=512k,mode=755)devptson/dev/ptstypedevpts(rw,nosuid,noexec,relatime,mode=600)debugfson/sys/kernel/debugtypedebugfs(rw,noatime)##cat/proc/mtddev:sizeerasesizenamemtd0:0050000000020000"boot"mtd1:00a0000000020000"kernel"mtd2:0010000000020000"dtb"mtd3:0f00000000020000"rootfs"⑥NAND启动,文件系统挂载情况:#mountubi0:rootfson/typeubifs(rw,relatime)devtmpfson/devtypedevtmpfs(rw,relatime,size=89164k,nr_inodes=22291,mode=755)procon/proctypeproc(rw,relatime)devptson/dev/ptstypedevpts(rw,relatime,gid=5,mode=620)tmpfson/dev/shmtypetmpfs(rw,relatime,mode=777)tmpfson/tmptypetmpfs(rw,relatime)tmpfson/runtypetmpfs(rw,nosuid,nodev,relatime,mode=755)sysfson/systypesysfs(rw,relatime)##cat/proc/mtddev:sizeerasesizenamemtd0:0050000000020000"boot"mtd1:00a0000000020000"kernel"mtd2:0010000000020000"dtb"mtd3:0f00000000020000"rootfs"烧写过程:①一般从SD卡等外部方式启动,在Uboot中,使用flash命令及UBI命令分别烧写uboot,dtb,kernel,rootfs到对应的分区即可②第二使用芯片厂家的烧写工具,如nxp的mfgtoos,在pc上通过usb烧写文件③如已有uboot,在uboot中从sd卡,U盘等读取文件烧写;或tftp从pc下载文件烧写升级过程:①此升级指的是UbootOK的前提下做Uboot,kernel,rootfs等升级②通过SD卡升级,一般是首先在PC上制作SD卡启动分区,通过官方的工具烧写升级文件到SD卡即可;此处的升级文件分两个方面:最小升级内核,并且包含升级脚本,此脚本会将目标文件烧写到存储介质中目标升级文件,即要烧写到比如NAND中的文件③以NXPSD卡升级为例说明此过程:首先是Uboot启动过程:U-Boot2016.03-mys-imx6ulx+gca7b81f(Apr272017-07:55:51+0800)CPU:Freescalei.MX6ULLrev1.0528MHz(runningat396MHz)CPU:Commercialtemperaturegrade(0Cto95C)at39CResetcause:PORBoard:MX6ULL14x14EVKI2C:readyDRAM:512MiBMMC:FSL_SDHC:0,FSL_SDHC:1***Warning-badCRC,usingdefaultenvironmentDisplay:TFT43AB(480x272)Video:480x272x24In:serialOut:serialErr:serialswitchtopartitions#0,OKmmc0iscurrentdeviceNet:BoardNetInitializationFailedNoethernetfound.NormalBootHitanykeytostopautoboot:0switchtopartitions#0,OKmmc0iscurrentdeviceswitchtopartitions#0,OKmmc0iscurrentdevicereadingboot.scr423bytesreadin10ms(41KiB/s)Runningbootscriptfrommmc...##Executingscriptat80800000readingzImage6789824bytesreadin302ms(21.4MiB/s)readingmys-imx6ull-14x14-evk-gpmi-weim.dtb36951bytesreadin20ms(1.8MiB/s)Kernelimage@0x83000000[0x000000-0x679ac0]##FlattenedDeviceTreeblobat84000000Bootingusingthefdtblobat0x84000000UsingDeviceTreeinplaceat84000000,end8400c056Startingkernel..最小系统加载启动完毕后,运行升级脚本VFS:Mountedroot(ext4filesystem)ondevice179:2.devtmpfs:mountedFreeingunusedkernelmemory:432K(80b54000-80bc0000)INIT:version2.88bootingStartingudevudevd[114]:startingversion3.1.5random:udevdurandomreadwith32bitsofentropyavailableEXT4-fs(mmcblk0p2):re-mounted.Opts:data=orderedbootlogd:cannotallocatepseudotty:NosuchfileordirectoryFAT-fs(mmcblk0p1):Volumewasnotproperlyunmounted.Somedatamaybecorrupt.Pleaserunfsck.ALSA:Restoringmixersettings.../usr/sbin/alsactl:load_state:1735:Nosoundcardsfound...INIT:Enteringrunlevel:5Startingsystemmessagebus:dbus.Systemupdatestart...preparefilesareokay升级脚本分析:root@mys6ull14x14:/run/media/mmcblk0p2#catusr/bin/flash_nand.sh#!/bin/shpart_uboot=0part_kernel=1part_dtb=2part_rootfs=3echoheartbeat>/sys/class/leds/user/triggermfg_path=/run/media/mmcblk0p1/mfg-images//升级目标文件uboot=${mfg_path}/u-boot.imxkernel=${mfg_path}/zImagedtb=${mfg_path}/gpmi-weim.dtbrootfs=${mfg_path}/core-image-base.rootfs.tar.xzif[-d$mfg_path]&&[-s$uboot]&&[-s$kernel]&&[-s$dtb]&&[-s$rootfs]thenecho"preparefilesareokay"elseecho0>/sys/class/leds/user/brightnessecho"fileordirectorynotexist"fi直接使用Flash命令烧写Uboot到对应分区echo"Flashinguboot"flash_erase/dev/mtd${part_uboot}00&&kobs-nginit-x-v${uboot}if[$?-eq0]thenecho"Flashubootokay"elseecho"Flashubootfailed"echo0>/sys/class/leds/user/brightnessexitfi直接使用Flash命令烧写kernel到对应分区echo"Flashingkernel"flash_erase/dev/mtd${part_kernel}00&&nandwrite-p/dev/mtd${part_kernel}-p${kernel}if[$?-eq0]thenecho"Flashkernelokay"elseecho"Flashkernelfailed"echo0>/sys/class/leds/user/brightnessexitfi直接使用Flash命令烧写dtb到对应分区echo"Flashingdtb"flash_erase/dev/mtd${part_dtb}00&&nandwrite-p/dev/mtd${part_dtb}-p${dtb}if[$?-eq0]thenecho"Flashdtbfileokay"elseecho"Flashdtbfilefailed"echo0>/sys/class/leds/user/brightnessexitfi烧写rootfs比较特别,此处是使用ubifs,因此需要先使用ubi命令在NAND上建立好文件系统格式echo"Flashingrootfs"flash_erase/dev/mtd${part_rootfs}00if[$?-ne0]thenecho"erase/dev/mtd${part_rootfs}fail"echo0>/sys/class/leds/user/brightnessexitfiubiformat/dev/mtd${part_rootfs}if[$?-ne0]thenecho"format/dev/mtd${part_rootfs}fail"echo0>/sys/class/leds/user/brightnessexitfiubiattach/dev/ubi_ctrl-m${part_rootfs}if[$?-ne0]thenecho"attach/dev/mtd${part_rootfs}fail"echo0>/sys/class/leds/user/brightnessexitfiubimkvol/dev/ubi0-Nrootfs-mif[$?-ne0]thenecho"makevolume/dev/mtd${part_rootfs}fail"echo0>/sys/class/leds/user/brightnessexitfimkdir-p/run/media/mtd${part_rootfs}/&&mount-tubifsubi0:rootfs/run/media/mtd${part_rootfs}if[$?-ne0]thenecho"mount/dev/mtd${part_rootfs}fail"echo0>/sys/class/leds/user/brightnessexitfi建立好ubi格式之后,直接将rootfs压缩包解压到对应分区即可;tarxvf${rootfs}-C/run/media/mtd${part_rootfs}if[$?-eq0]thenecho"Flashfilesystemokay"sync&&sync&&syncechonone>/sys/class/leds/user/triggerecho1>/sys/class/leds/user/brightnesselseecho"Flashfilesystemfailed"echo0>/sys/class/leds/user/brightnessumount/run/media/mtd${part_rootfs}exitfiumount/run/media/mtd${part_rootfs}echo"Programmingsuccess"echo"Youneedreboottheboard"版权声明:本文为博主WindLOR原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本声明。原文链接:https://blog.csdn.net/wind0419/article/details/77973144

相 关 资 源

您 可 能 感 兴 趣 的

同 类 别 推 荐

VIP VIP