linux 读写mtdchar,运行成功的读写MTD的测试程序

#include

#include

#include

#include

#include

#include

#include

#include

#include

struct BSL

{

char  booslink[10];  //a fixed string idefined as booslink

//char  serialNumber[24];

//++++add a Serial Number

//char  PCBA_serialNumber[24];

//char  reserved_0[24];

};

int non_region_erase(int Fd, int start, int count, int unlock)

{

mtd_info_t meminfo;

if (ioctl(Fd,MEMGETINFO,&meminfo) == 0)

{

erase_info_t erase;

erase.start = start;

erase.length = meminfo.erasesize;

for (; count > 0; count--) {

printf("\rPerforming Flash Erase of length %u at offset 0x%x",

erase.length, erase.start);

fflush(stdout);

if(unlock != 0)

{

//Unlock the sector first.

printf("\rPerforming Flash unlock at offset 0x%x",erase.start);

if(ioctl(Fd, MEMUNLOCK, &erase) != 0)

{

perror("\nMTD Unlock failure");

close(Fd);

return 8;

}

}

if (ioctl(Fd,MEMERASE,&erase) != 0)

{

perror("\nMTD Erase failure");

close(Fd);

return 8;

}

erase.start += meminfo.erasesize;

}

printf(" done\n");

}

return 0;

}

int main(int argc, char *argv[])

{

int fd;

char *cmd;

struct mtd_info_user info;

int regcount;

int ret;

int res;

if(3>argc)

{

printf("You must specify a device!\n");

return 16;

}

cmd=argv[1];

// Open the device

if ((fd = open(argv[2],O_RDWR)) < 0)

{

fprintf(stderr,"File open error\n");

return 8;

}

else

{

ioctl(fd,MEMGETINFO,&info);

//printf("info.size=%d\n info.erasesize=%d\n info.writesize=%d\n info.oobsize=%d\n",info.size,info.erasesize,info.writesize,info.oobsize);

}

if (ioctl(fd,MEMGETREGIONCOUNT,&regcount) == 0)

{

//printf("regcount=%d\n",regcount);

}

/*erase the device*/

if (strcmp(cmd, "erase") == 0)

{

if(regcount == 0)

{

res = non_region_erase(fd,0,(info.size/info.erasesize),0);

}

printf("erase!\n");

}

/*write file to this device*/

struct BSL *bsl_write =(struct BSL*)malloc(sizeof(struct BSL));

if (strcmp(cmd, "write") == 0)

{

printf("write ok!\n");

strcpy(bsl_write->booslink,argv[3]);

ret = write(fd, bsl_write, sizeof(struct BSL) );

return 0;

}

/*read file from this device*/     struct BSL *bsl_read =(struct BSL*)malloc(sizeof(struct BSL));     if (strcmp(cmd, "read") == 0)     {       read(fd, bsl_read, sizeof(struct BSL));       printf("%s\n", bsl_read);         printf("read ok!\n");     }         return 1; }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值