zoukankan      html  css  js  c++  java
  • flash分区的意义

    所谓分区,就是说对Flash进行分块管理。//如何方便地进行分块管理(存储设备类型和数量);


    对Flash(相当于硬盘)的管理必须事先使用分区界定;


    uboot中和kernel中都有个分区表,分区表就是我们在做系统移植时对Flash的整体管理分配方法。
    有了这个界定后,我们在部署系统时按照分区界定方法来部署,uboot和kernel的软件中也是按照这个分区界定来工作,就不会错。

    分区方法不是一定的,不是固定的,是可以变动的。
    uboot必须从Flash起始地址开始存放(uboot分区的大小必须保证uboot肯定能放下,一般设计为512KB或者1MB(因为一般uboot肯定不足512KB,给再大其实也可以工作,但是浪费)


    kernel:内核

    rootfs:根文件系统

    剩下的就是自由分区,一般kernel启动后将自由分区挂载到rootfs下使用

    uboot必须在Flash开头,其他分区相对位置是可变的。


    各分区的大小由系统移植工程师自己来定,一般定为合适大小(不能太小,太小了容易溢出;不能太大,太大了浪费空间)
    分区在系统移植前确定好,在uboot中和kernel中使用同一个分区表。将来在系统部署时和系统代码中的分区方法也必须一样。



    我们烧写程序时,实际是将程序先烧写到了内存当中,然后由内存搬运到NAND flash中


    init=/linuxrc   init进程的位置。
    console=ttySAC0  终端对应tty设备,因此,在引导系统前,串口驱动移植应当完成。


    其实uboot的分区表就是个助记符一样,甚至很多uboot压根就没有分区表,


    内核就一定要有一张分区表,内核根据他们的位移来确定存储区的范围,
    读取分析在上面的结构,文件系统之类。

    uboot一般可以将分区表传入内核,通过bootargs参数,这样内核启动后就可以知道分区信息了。
    找到uboot中对应你工程的源文件,里面应该有分区表,或者你直接搜分区表的名字~

    内核通过bootargs找到文件系统
    bootargs中的mtdblockx即代表分区,block1,2,3代表哪个分区
    bootargs中的"root=/dev/mtdblockx"只是告诉内核,root fs从第x个(x=0,1,2...)MTD分区挂载
    mtdparts=fc000000.nor_flash:1920k(linux),128k(fdt),20M(ramdisk),4M(jffs2),38272k(user),256k(env),384k(uboot)
    要想这个参数起作用,内核中的mtd驱动必须要支持,即内核配置时需要选上。

    分区方法:
    1) MTD层的分区
    2) 通过U-boot传递给内核的命令行中的mtdparts=...
    3) 其他可以让内核知道分区信息的任何办法,(内核默认的命令参数)

    如果你是通过uboot的内核命令行给MTD层传递MTD分区信息,这种情况下,内核读取到的分区信息始终和u-boot中的保持一致(推荐的做法)
    如果你是把分区信息写在内核源代码MTD里定义好的方法,那最好保证它和u-boot中的保持一致,即同步修改uboot及内核的相关部分。

    知行合一
  • 相关阅读:
    C#中文件操作【File】和【Directory】
    MySql的不同之处
    FileStream读写文件【StreamWriter 和 StreamReader】
    将对象序列化为XML文档
    SQL自增长的数据插入
    POJ3356 AGTC (最短编辑距离问题)
    POJ3070Fibonacci(矩阵快速幂求Fibonacci数列)
    HDOJ1058 Humble Numbers
    第三届软件大赛预赛A组试题及答案
    HDOJ4526 威威猫系列故事——拼车记
  • 原文地址:https://www.cnblogs.com/grooovvve/p/14598740.html
Copyright © 2011-2022 走看看