精华内容
下载资源
问答
  • linux建立MTD分区

    2013-04-24 09:52:15
    学习linux下建立mtd分区必须的资料
  • linux mtd 分区

    2021-05-12 02:48:22
    如何挂载ubi文件系统 Linux 系统中有关mtd和ubi的接口: (1) cat /proc/mtd:可以看到当前系统的各个mtd情况, (2) cat /proc/partitions: 分区信息,有上面的类似 (3) cat /sys/class/ubi/ubi0/*:当前系系统的ubi...

    如何挂载ubi文件系统 Linux 系统中有关mtd和ubi的接口: (1) cat /proc/mtd:可以看到当前系统的各个mtd情况, (2) cat /proc/partitions: 分区信息,有上面的类似 (3) cat /sys/class/ubi/ubi0/*:当前系系统的ubi情况 (4) ls /dev/*, 查看设备节点 假设我们想在mtdblock1上加载ubifs文件系统,步骤如下: (1)./ubiformat /dev/mtd1 -----格式化mtdblock1 (2)./ubiattach /dev/ubi_ctrl -m 1 -----将mtdblock1与ubi建立连接,命令输出如下: [ 977.342492] UBI: attaching mtd1 to ubi2 [ 977.346417] UBI: physical eraseblock size: 131072 bytes (128 KiB) [ 977.352631] UBI: logical eraseblock size: 126976 bytes [ 977.357948] UBI: smallest flash I/O unit: 2048 UBI device number 2, total 2000 LEBs (253952000 bytes, 242.2 MiB), available 1976 LEBs (250904576 bytes, 239.3 MiB), LEB size 126976 bytes (124.0 KiB) 系统自动将mtd1关连到ubi2上,假设系统中已经存在ubi0, ubi1了。 (3) ls /sys/class/ubi/ -----可以看到该目录下增加了一个ubi2的子目录 (4) cat /sys/class/ubi/ubi2/dev -----可以得到该ubi2设备的主次设备号,如249:0 (5) cat /sys/class/ubi/ubi2/volumes_count -----结果为0,表示该ubi上没有任何volume (6) ls /dev/ubi* -----如果/dev中没有ubi2, 则手工创建“mknod /dev/ubi2 c 249 0” (7) ./ubimkvol /dev/ubi2 -s 100MiB -N my_ubi_vol -----在ubi2上创建一个volume (8) ls /sys/class/ubi/ -----可以看到该目录下增加一个ubi2_0的目录,代表ubi2上的第一个volume,如果哦“cat /sys/class/ubi/ubi2_0/name”, 你可以得到“my_ubi_vol”,这就是(7)中的名字。 (9) cat /sys/class/ubi/ubi2_0/dev -----得到该volume的主次设备号,如249:1 (10) mknod /dev/ubi2_0 c 249 1 -----如果/dev中没有ubi2_0, 则需要手工创建 (11) mount -t ubifs ubi2_0 /mnt -----将ubi2_0挂载到本地目录 /mnt上, (12) mount -----可以看到ubi2_0成功挂载在/mnt上。 至此ubifs 装载成功。

    “答案来源于网络,供您参考” 希望以上信息可以帮到您!

    展开全文
  • linux内核MTD分区

    2021-05-12 02:47:26
    linux内核MTD分区 (30页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!19.90 积分MTD 设备驱动 和 NAND Flash 驱动程序分析硬件环境: 飞凌OK6410,256MB DDR,2GB NAND...

    62e50291a81fc54b507f33cb80033297.gif linux内核MTD分区

    (30页)

    7016efa18578b33af0a18908fa6e5eee.png

    本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!

    19.90 积分

    MTD 设备驱动 和 NAND Flash 驱动程序分析硬件环境: 飞凌OK6410,256MB DDR,2GB NAND Flash、   NAND Flash 型号:K9G8G08U9A   、     分析源码:Linux 2.6.36.2 内核源码。一、 MTD 设备驱动。1、先来简单介绍一下MTD 在Linux 系统中, 提供了MTD(Memory Technology Device , 内存技术设备)系统来建立 Flash 针对 Linux 的系统、抽象的接口, MTD 将文件系统 与 底层的Flash 存储器进行了隔离, 使 Flash 驱动工程师 无需关心Flash 作为字符设备和 块 设备与 LInux内核的接口。2、在引入MTD 后Linux 系统中的Flash  设备及接口可分为4层, 从上到下依次是:设备节点、MTD 设备层、MTD原始设备层 和 硬件驱动层。  这 4 层的作用定义如下:1-> 硬件驱动层: Flash 硬件驱动层负责 Flash 硬件设备的读、写、擦除, LInux MTD 设备的 NOR Flash 芯片驱动位于 drivers/mtd/chips 子目录下,  NAND Flash的驱动程序则 位于 drivers/mtd/nand 子目录下。2->MTD 原始设备层: MTD原始设备层由两部分组成, 一部分是MTD 原始设备的通用代码, 另一部分是各个特定 Flash 的数据,例如分区。3->MTD设备层: 基于MTD 原始设备,Linux 系统可以定义出 MTD 的块设备的结构(主设备号 31) 和 字符设备 (设备号 90) ,构成MTD 设备层, MTD 字符设备定义      在mtdchar.c 中实现,MTD 块设备则是定义在一个描述MTD 块设备的结构 mtdblk_dev ,并声明了一个名为 mtdblks 的指针数组,这个数组 中的每个mtdblk_dev 和 mtd_table 中的每一个mtd_info 一一对应。4->设备节点: 通过mknod 在/dev 子目录下建立MTD字符设备节点 和 块设备节点,用户通过访问此此设备节点即可访问 MTD 字符设备和块设备。3、分析Linux MTD 系统接口 mtd_info 结构体代码分析  此结构体定义在 ./include/linux/mtd/mtd.h 中关键词词解析:XIP :XIP eXecute In Place,即芯片内执行,指应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中。flash内执行是指nor flash 不需要初始化,可以直接在flash内执行代码。但往往只执行部分代码,比如初始化RAM.OOB :Out Of Brower 传输层协议使用带外数据(out-of-band,OOB)来发送一些重要的数据,如果通信一方有重要的数据需要通知对方时,协议能够将这些数据快速地发送到对方.为了发送这些数据iovec-base : iovec 结构体基础。struct iovec定义了一个向量元素。通常,这个结构用作一个多元素的数组。对于每一个传输的元素,指针成员iov_base指向一个缓冲区,这个缓冲区是存放的是readv所接收的数据或是writev将要发送的数据。成员iov_len在各种情况下分别确定了接收的最大长度以及实际写入的长度。Sync : 函数, 函数说明:此函数负责将系统缓冲区的内容写回磁盘,以确保数据同步。[cpp] view plaincopy1. struct mtd_info {  2.     u_char type;     // 内存技术的类型  3.     uint32_t flags;  // 标志位  4.     uint64_t size;   // Total size of the MTD 、mtd 设备的大小  5.   6.     /* "Major" erase size for the device. Na茂ve users may take this 7.      * to be the only erase size available, or may use the more detailed 8.      * information below if they desire 9.      */  10.     uint32_t erasesize;    // 主要的擦除块大小 erase size of main block  11.     /* Minimal writable flash unit size. In case of NOR flash it is 1 (even 12.      * though individual bits can be cleared), in case of NAND flash it is 13.      * one NAND page (or half, or one-fourths of it), in case of ECC-ed NOR 14.      * it is of ECC block size, etc. It is illegal to have writesize = 0. 15.      * Any driver registering a struct mtd_info must ensure a writesize of 16.      * 1 or larger. 17.      */  18.     uint32_t writesize;           // 最小的可写单元的字节数  19.   20.     uint32_t oobsize;   // Amount of OOB data per block (e.g. 16) OOB 字节数  21.     uint32_t oobavail;  // Available OOB bytes per block   可用OBB 字节数  22.   23.     /* 24.      * If erasesize is a power of 2 then the shift is stored in 25.      * erasesize_shift otherwise erasesize_shift is zero. Ditto writesize. 26.      */  27.     unsigned int erasesize_shift;  28.     unsigned int writesize_shift;  29.     /* Masks based on erasesize_shift and writesize_shift */  30.     unsigned int 关 键 词: linux 内核 MTD 分区

    524d6daf746efaa52c3c71bbfe7ba172.gif  天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

    展开全文
  • 关于MTD分区这个概念,我以前一直理解错,就是因为外面都叫他MTD分区,其实还不如说是MTD分割符,因为他只是在内核的一个定义.他并不是严格的分区.目前针对MX28这个平台,来说说怎么调整。目前来说,我的uImage文件大概是...

    关于MTD分区这个概念,我以前一直理解错,就是因为外面都叫他MTD分区,其实还不如说是MTD分割符,因为他只是在内核的一个定义.他并不是严格的分区.目前针对MX28这个平台,来说说怎么调整。

    目前来说,我的uImage文件大概是2.5M,这是默认的大小,以后可能通过裁剪更小,也可能通过丰富功能更大,保险起见应该给3M大小.而我的U-Boot,还是会继续使用的,而不用FSL的Bootlets,主要是U-Boot功能强大很多,也没多多少的启动时间,但是功能不会再添加了,估计,大概1.5M,小于1536KB,所以U-Boot分区1536K,U-Boot参数分区512K,内核分配3M吧.这怎么都够了.压缩Boot纯粹是为了多一点后面的空间,毕竟现在的Flash只有128M,后面rootfs里面很多各种功能呢。

    首先是U-Boot的修改,在uboot-src/include/configs下,找到自己的板描述文件,比如我的是mx28_evks.c.然后修改MTDPARTS_DEFAULT.参考配置如下:

    #define MTDPARTS_DEFAULT "mtdparts = nandflash0 : 1536k(bootloder),""512k(params),""3m(kernel),""-(rootfs)"

    这个意思是,1536K存放Bootloader,512K存放params,就是Bootloader的配置,3M是内核,剩下都给储存分区了.

    Linux内核下也是通过mach文件来规范这个分区的,比如我的MX28平台是kernel/linux-2.6.35.3/arch/arm/mach-mx28/device.c 然后看到定义第一分区的字段.我已经改成5 * SZ_1M了,就是5M啦.

    static struct gpmi_nfc_platform_data  gpmi_nfc_platform_data = {

    .nfc_version             = 1,

    .boot_rom_version        = 1,

    .clock_name              = "gpmi",

    .platform_init           = gpmi_nfc_platform_init,

    .platform_exit           = gpmi_nfc_platform_exit,

    .min_prop_delay_in_ns    = 5,

    .max_prop_delay_in_ns    = 9,

    .max_chip_count          = 2,

    .boot_area_size_in_bytes = 5 * SZ_1M,

    .partition_source_types  = gpmi_nfc_partition_source_types,

    .partitions              = 0,

    .partition_count         = 0,

    };

    然后把相应文件(u-boot/zImage/uImage)复制到bootlets中.其中zImage是用于升级的内核,也要一致,然后生成几个sb文件.

    -rw-r--r--  1 root  root  2.5M  5月  2 14:40 imx28_ivt_linux.sb

    -rw-r--r--  1 root  root  328K  5月  2 14:40 imx28_ivt_uboot.sb

    -rw-r--r--  1 root  root  2.5M  5月  2 14:40 imx28_linux.sb

    -rw-r--r--  1 root  root  328K  5月  2 14:40 imx28_uboot.sb

    -rw-r--r--  1 root  root  6.1M  5月  2 14:40 updater_ivt.sb

    -rw-r--r--  1 root  root  6.1M  5月  2 14:40 updater.sb

    然后覆盖MfgTool默认的几个sb文件,然后烧写一下,就得到我们新分区的结果.

    MX28 U-Boot > mtdparts

    mtdparts variable not set, see 'help mtdparts'

    no partitions defined

    defaults:

    mtdids  : nand0=nandflash0

    mtdparts: mtdparts=nandflash0:1536k(bootloder),512k(params),3m(kernel),-(rootfs)

    系统内核打印:

    -----------------------------

    NAND Flash Device Information

    -----------------------------

    Manufacturer      : Macronix (0xc2)

    Device Code       : 0xf1

    Cell Technology   : SLC

    Chip Size         : 128 MiB

    Pages per Block   : 64

    Page Geometry     : 2048+64

    ECC Strength      : 4 bits

    ECC Size          : 512 B

    Data Setup Time   : 5 ns

    Data Hold Time    : 5 ns

    Address Setup Time: 20 ns

    GPMI Sample Delay : 6 ns

    tREA              : Unknown

    tRLOH             : Unknown

    tRHOH             : Unknown

    Description       : ZLGFlash

    -----------------

    Physical Geometry

    -----------------

    Chip Count             : 1

    Page Data Size in Bytes: 2048 (0x800)

    Page OOB Size in Bytes : 64

    Block Size in Bytes    : 131072 (0x20000)

    Block Size in Pages    : 64 (0x40)

    Chip Size in Bytes     : 134217728 (0x8000000)

    Chip Size in Pages     : 65536 (0x10000)

    Chip Size in Blocks    : 1024 (0x400)

    Medium Size in Bytes   : 134217728 (0x8000000)

    ------------

    NFC Geometry

    ------------

    ECC Algorithm          : BCH

    ECC Strength           : 8

    Page Size in Bytes     : 2112

    Metadata Size in Bytes : 10

    ECC Chunk Size in Bytes: 512

    ECC Chunk Count        : 4

    Payload Size in Bytes  : 2048

    Auxiliary Size in Bytes: 16

    Auxiliary Status Offset: 12

    Block Mark Byte Offset : 1999

    Block Mark Bit Offset  : 0

    -----------------

    Boot ROM Geometry

    -----------------

    Boot Area Count            : 1

    Boot Area Size in Bytes    : 5242880 (0x500000)

    Stride Size in Pages       : 64

    Search Area Stride Exponent: 2

    Scanning device for bad blocks

    Boot area protection is enabled.

    Creating 2 MTD partitions on "gpmi-nfc-main":

    0x000000000000-0x000000500000 : "gpmi-nfc-0-boot"

    0x000000500000-0x000008000000 : "gpmi-nfc-general-use"

    然后,就是这句,最后数值,我还没搞懂,不是填写123MiB吗?不是的,要看烧写过程时候,提示,剩下用户可配空间是多少,我看到的是108MiB,根据UBIFS有坏块管理.可能实际还不能用这么多.

    ubimkvol /dev/ubi0 -n 0 -N rootfs -s 90000000

    展开全文
  • linux内核 mtd分区

    千次阅读 2019-08-16 20:28:30
    内核配置需要打开MTD选项 Memory Technology Devices (MTD) ---> 如果是Norflash,需要选择Common Flash Interface (CFI)相关的选项;而且需要配置映射首地址(和uboot中配置的flash首地址一致)、映射地址大小...

    首先
    内核配置需要打开MTD选项

    Memory Technology Devices (MTD)  --->
    

    如果是NOR Flash,需要选择Common Flash Interface (CFI)相关的选项;而且需要配置映射首地址(和uboot中配置的flash首地址一致)、映射地址大小和位宽

    <*> CFI Flash device in physical memory map
    (0xff800000) Physical start address of flash mapping
    (0x2000000) Physical length of flash mapping
    (2)   Bank width in octets 
    

    如果是NAND Flash,需要选择NAND Flash相关的选项

    修改内核文件
    linux-2.6.15.b/drivers/mtd/maps/physmap.c

    //linux
    #define FLASH_PARTITION1_ADDR 0x00000000		//偏移地址
    #define FLASH_PARTITION1_SIZE 0x001C0000		//大小
    
    //ramdisk
    #define FLASH_PARTITION2_ADDR 0x001C0000
    #define FLASH_PARTITION2_SIZE 0x00240000
    
    //ramdisk reserve
    #define FLASH_PARTITION3_ADDR 0x00400000
    #define FLASH_PARTITION3_SIZE 0x00380000
    
    //uboot Environment
    #define FLASH_PARTITION4_ADDR 0x00780000
    #define FLASH_PARTITION4_SIZE 0x00020000
    
    //uboot
    #define FLASH_PARTITION0_ADDR 0x007A0000
    #define FLASH_PARTITION0_SIZE 0x00060000
    
    static struct mtd_partition mtd_parts[] = {
            {
                    .name =         "Bootloader",
                    .offset =       FLASH_PARTITION0_ADDR,
                    .size =         FLASH_PARTITION0_SIZE
            },
            {
                    .name =         "Kernel image",
                    .offset =       FLASH_PARTITION1_ADDR,
                    .size =         FLASH_PARTITION1_SIZE
            },
            {
                    .name =         "Initial ramdisk image",
                    .offset =       FLASH_PARTITION2_ADDR,
                    .size =         FLASH_PARTITION2_SIZE
            },
            {
                    .name =         "ramdisk reserve",
                    .offset =       FLASH_PARTITION3_ADDR,
                    .size =         FLASH_PARTITION3_SIZE
            },
            {
                    .name =         "uboot Environment",
                    .offset =       FLASH_PARTITION4_ADDR,
                    .size =         FLASH_PARTITION4_SIZE
            },
    };
    
    #define PARTITION_COUNT (sizeof(mtd_parts)/sizeof(struct mtd_partition))
    

    可参考地址https://blog.csdn.net/wenlifu71022/article/details/4334962

    展开全文
  • 关于MTD分区这个概念,我以前一直理解错,就是因为外面都叫他MTD分区,其实还不如说是MTD分割符,因为他只是在内核的一个定义.他并不是严格的分区.目前针对MX28这个平台,来说说怎么调整.目前来说,我的uImage文件大概是...
  • #define MTDIDS_DEFAULT "nand0=nandflash0" #define MTDPARTS_DEFAULT "mtdparts=nandflash0:256k@0(bootloader)," \ "128k(params)," \ "2m(kernel)," \ "-(root)" 这段语句来分析,则可知道修改内核中linux-...
  • 我正在使用嵌入式设备,并希望能够通过Linux调整其MTD分区大小而无需重新启动.问题是我的Linux映像大小已经增加,它所在的当前MTD分区(mtd0)现在太小了.但是,它之后的分区(mtd1)是用于存储配置信息的JFFS2部分,因此...
  • linux挂载mtd分区

    2021-05-12 12:20:25
    如何挂载ubi文件系统 Linux 系统中有关mtd和ubi的接口: (1) cat /proc/mtd:可以看到当前系统的各个mtd情况, (2) cat /proc/partitions: 分区信息,有上面的类似 (3) cat /sys/class/ubi/ubi0/*:当前系系统的ubi...
  • # cat /proc/mtddev: size erasesize namemtd0: 00040000 00040000 "RedBoot"mtd1: 00200000 00040000 "zImage"mtd2: 00180000 00040000 "initramfs"mtd3: 00001000 00040000 "RedBoot config"mtd4: 00040000 ...
  • mtd分区写保护关闭

    2021-05-14 19:03:23
    这是一个数组表示mtd分区的,name是分区名字,而mask_flags就是写保护 例如我想写art分区,就把parts[3].mask_flags = MTD_WRITEABLE;去掉就可以了。 重新编译。 使用命令 dd if=art.bin of=/dev/mtd4 或者 mtd -r ...
  • 1. uboot $mtdparts 和 linux /dev/mtd* 的联系比如:uboot:# setenv mtdparts ‘mtdparts=nx_2016:1408k@0k(boot),128k@1408k(env),-(extra);nx_2017:16m(k0),16m(k1),-(nandextra)’linux:# cat /proc/mtddev: ...
  • static const char *part_probes[] __... 这个说明MTD分区参数的分析有两种方法,一个是命令行,一个是通过redboot 在xxx_flash_init函数(xxx是芯片代号)中会调用np = parse_mtd_partitions(mtd, part_probes, &mtd
  • 浅析linuxmtd设备onenand存储器的分区和节点创建流程及yaffs2文件系统挂载在arch/arm/mach-pxa/luther.c这个产品平台文件中,即:MACHINE_START(LUTHER, "luther").phys_io = 0x40000000,.boot_params = 0xa0000100...
  • ​int mtd_read_yaffs2_skip_bad(libmtd_t desc,const struct mtd_dev_info *mtd, int fd, int eb, intoffs,const char *img_name){int tmp, ret, out_fd, len, written = 0;intread_eb_num,i,sekOffs;intdata_...
  • Linux MTD介绍

    2021-05-11 14:28:38
    1. 介绍MTD,即Memory Technology Device,值得是内存技术设备字符设备和块设备的区别在于前者只能被顺序读写,后者可以随机访问;同时,两者读写数据的基本单元不同字符设备: 以字节为基本单位,在Linux中,字符...
  • Linux MTD设备总结

    2021-05-12 12:35:23
    见内核配置与编译系统启动后,在dev目录下,/dev/mtd0,1,2等代表char型设备,mtd0代表flash的第一分区,依次类推;/dev/mtdblock0,1,2代表block型设备,mtdblock0代表flash第一分区,依次类推。在下述的一些操作...
  • 简介高通的IPQ4018的SoC使用了...MTD分区信息是如何从Uboot传到linux的,有几种方式?换一种问法 uboot如何把参数传入linux呢?cmdline和FTD(设备树)先讲一下简单的cmdlineUboot以bootarg命令的方式把cmdline传递给l...
  • linux MTD partitions方法大杂烩

    千次阅读 2014-04-02 16:49:48
    linux中,我们一般会对flash进行一个分区,不同的地址空间存放不同的内容。一般我们只需要分3-4个区,第一个为boot区,一个为boot参数区(传递给内核的参数),一个为内核区,一个为文件系统区。而对于bootloader中...
  • 二、MTD分区表的实现 在开机过程从console经常可以看到类似以下信息, 0x000000000000-0x000000100000 : "Bootloade" 0x000000100000-0x000002000000 : "Kernel" 0x000002000000-0x000003000000 : "User" 0x...
  • Linux2.6内核的vivi分区及内核MTD分区.pdf
  • 1. /dev/mtdN 是Linux 中的MTD架构中,系统自己实现的mtd分区所对应的字符设备,其里面添加了一些ioctl,支持很多命令,如MEMGETINFO,MEMERASE等。而mtd-util中的flash_eraseall等工具,就是以这些ioctl为基础而...
  • 和实际对nand flash的分区表不一致,实际上在uboot移植教程(08 – 移植uboot 2012.04到JZ2440(设置mtd分区表))中,对内核的mtd分区情况如下: 0x00000000-0x00040000 : bootloader 0x00040000-0x00060000 : ...
  • 内核MTD分区大小计算

    千次阅读 2014-03-25 18:35:20
    在内核启动的时候会打印出MTD分区的情况,如下: bootloader的大小:0x3c0000转换成十进制,/2/1024/1024=1.5MB params (0x400000-0x3c0000)转换成十进制,/2/1024=96KB kernel 0x400000 转换成十...
  • #define MTDIDS_DEFAULT "nand0=nandflash0" #define MTDPARTS_DEFAULT "mtdparts=nandflash0:256k@0(bootloader)," \ "128k(params)," \ "2m(kernel)," \ "-(root)" 这段语句来分析,则可知道修改内核中linux-...
  • Linux 挂载分区的方法

    2020-09-15 03:12:20
    主要介绍了Linux 挂载分区的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,013
精华内容 3,205
关键字:

linuxmtd分区

linux 订阅
友情链接: ZHANGHU.rar