预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共21页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

开发板上只有NorFlash,所以为了实现层次文件系统,需要为Linux2.6.20增加NorFlashMTD驱动支持。其实工作量并不大,因为已经有现成的程序可供参考。 MTD的驱动程序都集中在drivers/mtd里面。我们需要做的,仅仅是在drivers/mtd/maps下增加自己的分区表。因为有参考的代码,所以比较容易。 (1)构建配置选项 首先,根据edb7312.c构建自己的mtd分区表驱动(根据cfi_flagadm.c这个文件也可以奥,看情况吧!)。 $cddrivers/mtd/maps/$cpedb7312.cat91rm9200.c 然后,修改drivers/mtd/maps/Kconfig,增加自己的配置选项。 //拷贝过EDB7312稍作修改即可configMTD_AT91RM9200tristate"CFIFlashdevicemappedonAT91RM9200"dependsonARM&&MTD_CFIhelpThisenablesaccesstotheCFIFlashontheATMELAT91RM9200DKboard.Ifyouhavesuchaboard,say'Y'here. 最后,修改Makefile,增加编译项目。 obj-$(CONFIG_MTD_EDB7312)+=edb7312.o obj-$(CONFIG_MTD_AT91RM9200)+=at91rm9200.o 这样,自己建立的MTD分区表驱动就可以编译进内核了。 (2)修改分区表信息 因为第一步的工作中,at91rm9200.c实际上还是edb7312.c的内容,所以需要根据自己的开发板norflash的配置做一下修改。 #include<HYPERLINK"http://lib.csdn.net/base/linux"\o"Linux知识库"\t"_blank"Linux/module.h>#include<linux/types.h>#include<linux/kernel.h>#include<linux/init.h>#include<asm/io.h>#include<linux/mtd/mtd.h>#include<linux/mtd/map.h>#ifdefCONFIG_MTD_PARTITIONS#include<linux/mtd/partitions.h>#endif#defineWINDOW_ADDR0x10000000/*physicalpropertiesofflash*/#defineWINDOW_SIZE0x00800000/*intel28F640J3A8MB*/#defineBUSWIDTH2/*databuswidth16bits*//*canbe"cfi_probe","jedec_probe","map_rom",NULL};*/#definePROBETYPES{"cfi_probe",NULL}#defineMSG_PREFIX"AT91RM9200-NOR:"/*prefixforourprintk()'s*/#defineMTDID"at91rm9200-%d"/*formtdparts=partitioning*/staticstructmtd_info*mymtd;structmap_infoat91rm9200nor_map={.name="NORflashonAT91RM9200DK",.size=WINDOW_SIZE,.bankwidth=BUSWIDTH,.phys=WINDOW_ADDR,};#ifdefCONFIG_MTD_PARTITIONS/**MTDpartitioningstuff*/staticstructmtd_partitionat91rm9200nor_partitions[5]={{//U-boot128KB.name="U-boot",.size=0x20000,.offset=0},{//uImage2MB.name="Kernel",.size=0x200000,.offset=0x20000},{//RootFS3MB.name="RootFS",.size=0x300000,.offset=0x220000},{//UserFS.name="Jffs2",.size=0x2C0000,.offset=0x520000},{//Parameters.name="Parameters",.size=0x20000,.offset=0x7E0000},};staticconstchar*probes[]={NULL};#endifstaticintmtd_parts_nb=0;staticstructmtd