修改块设备(Flash)上没有写权限的mac地址的方法(不使用ioctl的方法)

       openwrt下的mac地址修改,开始使用的是网上开源的程序,想通过iwpriv命令修改板子上的地址,出现问题就是就算修改成功,一旦掉电就直接消失,再次上电发现e2p中数据并没有被修改成功,对比华硕的开源程序,并没有发现太大的差别,只有固件的权限不同,在组权限中多出了写权限。


   后查阅资料,发现固件mtd是属于块设备,具有的是readonly权限,按官方说法是在dts文件中修改掉readonly权限为wr权限即可,然而我并没有修改成功。


   通过手册查找flash信息,了解对应的mac地址存放位置,知道了mac放在mtdblock2区域,mtdblock是MTD子系统的mtdblock层,属于nandflash,MTD底层驱动需要给MTD层主要提供三个常用的接口,分别是:

Writereaderase。read不用说,write和erase是修改的主要手段,一个是将位从1写到0,另一个是从0复位到1。在内核驱动中有相应的驱动函数去调用。


  基于此,想到的就是将其中的mac地址拷贝出来,转换为2进制.bin文件,修改其中的参数,再将其重新写回mtdblock中让它自己通过调用函数修改地址。


一、dd if=/dev/mtdblock2 of=/tmp/factory.bin

  将mac地址导出以后保存为临时文件,少量修改时通过winscp传出,通过hex软件修改指定值(通常六位),然后传回板子中


二、mtd write XXX.bin factory

  进行写回分区操作

  写回后进行重启,在重新上电过程中进行了修改,重启后通过iwpriv ra0 e2p来查看即可确定是否修改成功。

三、如果需要工业化生产,可以写一个自己的.ipk包去直接操作,取消掉传出文件,直接在板上系统中进行修改。

  我是自己写的程序去替换掉用软件修改指定值的过程(fopen,fread,fwrite)


这样就避开了去修改mtd块设备的读写权限


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值