查看: 422|回复: 0

[原创] 对于ARM的启动,系统升级,烧写过程和文件系统等方面的...

[复制链接]

主题

好友

31

积分

白丁

该用户从未签到

发表于 2017-12-29 14:46:13 |显示全部楼层
本文所述的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
      1. console=ttymxc0,115200 ubi.mtd=3 root=ubi0:rootfs rootfstype=ubifs mtdparts=gpmi-nand:5m(boot),10m(kernel),1m(dtb),-(rootfs)  
      复制代码
      2. 从SD卡启动,/proc/cmdline,加载的是ext4文件系统,位置在sd卡第二分区mmcblk0p2
      1. 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:即裸芯片,没有控制器,针对其主要操作有擦除,读和写
      FTL 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卡启动,文件系统挂载情况:
        1.     # mount  
        2.     /dev/root on / type ext4 (rw,noatime,data=ordered)  
        3.     proc on /proc type proc (rw,nosuid,nodev,noexec,noatime)  
        4.     sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,noatime)  
        5.     tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noatime)  
        6.     tmpfs on /dev type tmpfs (rw,nosuid,relatime,size=512k,mode=755)  
        7.     devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,mode=600)  
        8.     debugfs on /sys/kernel/debug type debugfs (rw,noatime)  
        9.     #  
        10.     # cat /proc/mtd  
        11.     dev:    size   erasesize  name  
        12.     mtd0: 00500000 00020000 "boot"  
        13.     mtd1: 00a00000 00020000 "kernel"  
        14.     mtd2: 00100000 00020000 "dtb"  
        15.     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中的文件


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /4 下一条

手机版|爱板网

GMT+8, 2018-12-13 08:26 , Processed in 0.081606 second(s), 13 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-5   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001056号

Powered by Discuz!

返回顶部