当前位置: 首页 > news >正文

苏省住房和城乡建设厅网站首页导航仪企业网站源码

苏省住房和城乡建设厅网站首页,导航仪企业网站源码,长沙做网站设计,个人博客建站wordpressMTD 设备是象闪存芯片、小型闪存卡、记忆棒等之类的设备#xff0c;它们在嵌入式设备中的使用正在不断增长。 MTD 驱动程序是在 Linux 下专门为嵌入式环境开发的新的一类驱动程序。相对于常规块设备驱动程序#xff0c;使用 MTD 驱动程序的主要优点在于 MTD 驱动程序是专门为… MTD 设备是象闪存芯片、小型闪存卡、记忆棒等之类的设备它们在嵌入式设备中的使用正在不断增长。 MTD 驱动程序是在 Linux 下专门为嵌入式环境开发的新的一类驱动程序。相对于常规块设备驱动程序使用 MTD 驱动程序的主要优点在于 MTD 驱动程序是专门为基于闪存的设备所设计的所以它们通常有更好的支持、更好的管理和基于扇区的擦除和读写操作的更好的接口。Linux 下的 MTD 驱动程序接口被划分为两类模块用户模块和硬件模块。   MTD 驱动程序设置  为了访问特定的闪存设备并将文件系统置于其上需要将 MTD 子系统编译到内核中。这包括选择适当的 MTD 硬件和用户模块。当前MTD 子系统支持为数众多的闪存设备 ― 并且有越来越多的驱动程序正被添加进来以用于不同的闪存芯片。   有两个流行的用户模块可启用对闪存的访问 MTD_CHAR 和 MTD_BLOCK 。  MTD_CHAR 提供对闪存的原始字符访问而 MTD_BLOCK 将闪存设计为可以在上面创建文件系统的常规块设备象 IDE 磁盘。与 MTD_CHAR 关联的设备是 /dev/mtd0、mtd1、mtd2等等而与 MTD_BLOCK 关联的设备是 /dev/mtdblock0、mtdblock1等等。由于 MTD_BLOCK 设备提供象块设备那样的模拟通常更可取的是在这个模拟基础上创建象 FTL 和 JFFS2 那样的文件系统。   为了进行这个操作可能需要创建分区表将闪存设备分拆到引导装载程序节、内核节和文件系统节中。 Linux 中 MTD 子系统的主要目标是在系统的硬件驱动程序和上层或用户模块之间提供通用接口。硬件驱动程序不需要知道象 JFFS2 和 FTL 那样的用户模块使用的方法。所有它们真正需要提供的就是一组对底层闪存系统进行 read 、 write 和 erase 操作的简单例程。   MTD 驱动程序是专门针对嵌入式Linux的一种驱动程序相对于常规块设备驱动程序比如PC中的IDE硬盘而言MTD驱动程序能更好的支持和管理闪存设备因为它本身就是专为闪存设备而设计的。MTD设备是指不同于传统字符设备和块设备的flash存储设备使得上层的文件系统像访问传统的字符或块设备一样访问flash为上层软件系统提供一个同一的接口。     具体地讲基于MTD的FLASH驱动承上可以很好地支持cramfsjffs2和yaffs等文件系统启下也能对FLASH的擦除读写FLASH坏块以及损耗平衡进行很好的管理。所谓损耗平衡是指对NAND的擦写不能总是集中在某一个或某几个block中这是由NAND芯片有限的擦写次数的特性决定的。   一、MTD 的概念和层次 MTD(memory technology device 存储 技术设备 ) 是用于访问 memory 设备 ROM 、 flash 的 Linux 的子系统。 MTD 的主要目的是为了使新的 memory 设备的驱动更加简单为此它在硬件和上层之间提供了一个抽象的接口。 MTD 的所有源代码在 /drivers/mtd 子目录下 。[1] 传统上 UNIX 只认识块设备和字符设备。字符设备是类似键盘或者鼠标的这类设备你必须从它读取当前数据但是不可以定位也没有大小。块设备有固定的大小并且可以定位 它们恰好组织成许多字节的块通常为 512字节。 闪存既不满足块设备描述也不满足字符设备的描述。它们表现的类似块设备但又有所不同。比如块设备不区分写和擦除操作。因此一种符合闪存特性的特殊设备类型诞生了 就是 MTD 设备。所以 MTD 既不是块设备也不是字符设备 。 [ 二. MTD hardware device driversThese provide physical access( 物理访问 ) to memory devices, and are not used directly - they are accessed through the user modules above( 他们是通过上层的用户模块来访问的 ) . On-board memory Many PC chipsets( 芯片组 ) are incapable of correctly( 不能正确地 ) caching system memory above 64M or 512M. A driver exists which allows you to use this memory with the linux-mtd system. ( 有些 PC 芯片组不能正确缓存高于 64M 或者 512M 的系统内存那么就可以通过 linux 的 mtd 来使用这些内存 ) PCMCIA devices PCMCIA flash (not CompactFlash but real flash) cards are now supported by the pcmciamtd driver in CVS. (PCMCIA 闪存卡 -  不是 CF 卡但是是真实的 flash) Common Flash Interface (CFI) onboard NOR flash This is a common solution and is well-tested and supported, most often using JFFS2 or cramfs file systems. Onboard NAND flash NAND flash is rapidly overtaking NOR flash due to its larger size and lower cost; JFFS2 support for NAND flash is approaching production quality. (NAND 因其大容量和低成本正在飞速超越 NOR) M-Systems DiskOnChip 2000 and Millennium The DiskOnChip 2000, Millennium and Millennium Plus devices should be fully supported, using their native NFTL and INFTL translation layers. Support for JFFS2 on DiskOnChip 2000 and Millennium is also operational although lacking proper support for bad block handling. CompactFlash - http://www.compactflash.org/ CompactFlash emulates an IDE disk, either through the PCMCIA-ATA standard, or by connecting directly to an IDE interface. As such, it has no business being on this page, as to the best of my knowledge it doesnt have any alternative method of accessing the flash - you have to use the IDE emulation - I mention it here for completeness. uboot 与系统内核中MTD分区的关系 分区只是内核的概念就是说AB地址放内核CD地址放文件系统(也就是规定哪个地址区间放内核或者文件系统)等等。 1在内核MTD中可以定义分区A~BC~D。。。。。。并予以绝对的地址赋值给每个分区。我们可以来看看在内核中是怎样来对MTD进行分区的arch/arm/plat-s3c24xx/common-smdk.c static struct mtd_partition smdk_default_nand_part[] {  [0] {   .name  Boot,   .size  SZ_16K,   .offset  0,  },  [1] {   .name  S3C2410 flash partition 1,   .offset 0,   .size  SZ_2M,  },  [2] {   .name  S3C2410 flash partition 2,   .offset SZ_4M,   .size  SZ_4M,  },  [3] {   .name  S3C2410 flash partition 3,   .offset  SZ_8M,   .size  SZ_2M,  },  [4] {   .name  S3C2410 flash partition 4,   .offset SZ_1M * 10,   .size  SZ_4M,  }, ......  }; 一般我们只需要分3-4个区第一个为boot区一个为boot参数区(传递给内核的参数),一个为内核区一个为文件系统区。 而对于bootloader中只要能将内核下载到A~B区的A地址开始处就可以C~D区的C起始地址下载文件系统。。。这些起始地址在MTD的分区信息中能找到。所以bootloader对分区的概念不重要只要它能把内核烧到A位置把文件系统烧到C位置。 所以在bootloader对Flash进行操作时哪块区域放什么是以内核为主。 而为了方便操作bootloader类似也引入分区的概念如可以使用“nand write 0x3000000 kernel 200000”命令将uImage烧到kernel分区而不必写那么长nand write 3000000 A 200000,也就是用分区名来代替具体的地址。 这要对bootloader对内核重新分区这需要重新设置一下bootloader环境参数就可以同步更新内核分区信息 如 setenv bootargs noinitrd consolettySAC0 root/dev/mtdblock3 rootfstypejffs2                            mtdpartsnand_flash:128k(u-boot)ro,64k(u-boot envs),3m(kernel),30m(root.jffs2),30m(root.yaffs) 内核配置时选上Device Drivers  --- Memory Technology Device (MTD) support  --- Command line partition table parsing 在设置了mtdparts变量之后,就可以在nand read/write/erase命令中直接使用分区的名字而不必指定分区的偏移位置.而这需要内核MTD最好没有规划分区。 如果你是通过uboot的内核命令行给MTD层传递MTD分区信息这种情况下,内核读取到的分区信息始终和u-boot中的保持一致(推荐的做法) 如果你是把分区信息写在内核源代码MTD里定义好的方法,那最好保证它和u-boot中的保持一致,即同步修改uboot及内核的相关部分。 2 内核通过bootargs找到文件系统bootargs中的mtdblockx即代表分区block123代表哪个分区。 事实上,bootargs中的root/dev/mtdblockx只是告诉内核,root fs从第x个(x0,1,2...)MTD分区挂载,mtdblock0对应第一个分区,mtdblock1对应第二个分区,以此类推. 3分区方法 1) MTD层的分区 2) 通过U-boot传递给内核的命令行中的mtdparts... 3) 其他可以让内核知道分区信息的任何办法内核默认的命令参数 下面说到mtdparts及它的用法 mtdparts mtdpartsfc000000.nor_flash:1920k(linux),128k(fdt),20M(ramdisk),4M(jffs2),38272k(user),256k(env),384k(uboot) 要想这个参数起作用内核中的mtd驱动必须要支持即内核配置时需要选上Device Drivers  --- Memory Technology Device (MTD) support  --- Command line partition table parsing   mtdparts的格式如下 mtdpartsmtddef[;mtddef] mtddef  : mtd-id:partdef[,partdef]  partdef : size[offset][name][ro]  mtd-id  : unique id used in mapping driver/device size    : standard linux memsize OR - to denote all remaining space name    : (NAME) 因此你在使用的时候需要按照下面的格式来设置 mtdpartsmtd-id:size1offset1(name1),size2offset2(name2) 这里面有几个必须要注意的 a.  mtd-id 必须要跟你当前平台的flash的mtd-id一致不然整个mtdparts会失效 怎样获取到当前平台的flash的mtd-id 在bootargs参数列表中可以指定当前flash的mtd-id如指定 mtdids:nand0gen_nand.1前面的nand0则表示第一个flash b.  size在设置的时候可以为实际的size(xxM,xxk,xx)也可以为-这表示剩余的所有空间。 相关信息可以查看drivers/mtd/cmdlinepart.c中的注释找到相关描述。
http://www.zqtcl.cn/news/304507/

相关文章:

  • 建设一个网站所需要注意的最有前途的15个专业
  • 橱柜手机网站模板软件设计说明书
  • 山西云起时网站建设wordpress 字体大小
  • 网站建设详细报价电商开发系统
  • 搜索引擎营销的主要方法开封seo推广
  • 怎么在网上找做网站的客户安徽安能建设集团网站
  • 乾安网站建设哪家专业h5在线编辑
  • 公司网站建设模块简介广17网站一起做网店
  • 外包网站多少钱柳市建设网站
  • 做外贸站推广全国网页制作大赛
  • 手机网站关键词排名微信小程序怎么做网页
  • 利用万网做网站wordpress过滤敏感
  • 大连 响应式网站制作郑州网站建设中国建设建设银行
  • 网站关键词布局关于静态网站开发相关新闻
  • 安徽新站优化网站建设哪些好
  • 网站详细页制作c2c模式的网站
  • 网站与网页之间的区别是什么意思通过微信发布诱导分享的美文或者集赞活动属于哪种网络营销方式
  • 可信网站代码想学做网站从哪里入手
  • 做公众号选择图片的网站wordpress怎么看代码
  • 个人 中小企业公司网站建设方案百度网页版链接地址
  • 青岛网站推广方案网线制作心得与体会
  • 杭州网站优化公司哈尔滨企业网站模板建站
  • 洛阳免费网站建设自己做网站最新视频教程
  • 网站备案查询 美橙网开发app需要的技术
  • 软件产品如何做网站推广昆山外贸网站建设推广
  • 景德镇市城市建设规划网站wordpress用不了了
  • 网站及新媒体建设宣传片wordpress 无法编辑主题
  • 东莞设计网站重庆做腋臭骑士网站
  • 什么软件可以搜索关键词精准网站信息优化的方式
  • 购物网站排名前十名山东泰安建筑工程集团有限公司