免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8467 | 回复: 14
打印 上一主题 下一主题

[应用] linux 应用层怎么擦除bootloader中的一些区域 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-17 18:59 |只看该作者 |倒序浏览
公司的有些板子bootloader中的obm区域被下坏了,但是板子能开机,不能下载,要是想下载的话就得擦除掉bootloader区域中的obm区域。擦除的方法可以用u-boot的方式,但是由于公司很多坏了的板子都没有引出串口线,所以想在linux应用层通过程序来擦除bootloader中的obm区域。
另外公司板子的开机log显示:
creating 16 mtd partitions on pxaxx_nand-0
mtd0    0x0-0x100000   :               "bootloader"        
mtd1    0x100000-0x140000 :         "ramdisk"   
mtd2    0x140000-0x180000 :         "imei"
mtd3    0x180000-0x880000:          "arbelbinary"
mtd4    0x880000-0x980000:          "msabinary"
mtd5    0x980000-0xd80000:          "kernel"
mtd6    0xd80000-0x1180000:         "maintenance"
mtd7    0x1180000-0x1680000:       "recovery"
mtd8    0x1680000-0x16c0000:       "misc"
mtd9    0x16c0000-0x6800000:       "cache"
mtd10  0x6800000-0x10800000:      "system"
mtd11  0x10800000-0x1e400000:     "userdata"
mtd12  0x1e400000-0x1ec00000:     "nvm"
mtd13  0x1ec00000-0x1f400000:      "telephony"
mtd14  0x1f400000-0x1f600000:       "reserved"
mtd15  0x1f600000-0x20000000 :   "MRVL_BBM"
其中我要擦除的OBM的地址范围是0x40000-0x80000,也就是mtd0这个分区
uart_dma bootrd=/dev/mtdblock1   mtdparts=pxa3xx_nand-0: 1m(bootloader)ro, 256k(ramdisk)ro,256k(imei),7m(arbelbinary),1m(msbinary),4m(kernel)ro,4m(maintenance),5m(recovery),256k(misc),83200k(cache),160m(system),220m(userdata),8m(nvm),8m(telephony)

我曾经用mtd-utils这个工具中的flash_erase的方法来擦除,发现有些分区是可以擦除的,但是有些分区bootloader(mtd0)这个分区擦除不了,而我要擦除的正是bootloader这个分区中的某些区域,看了flash_erase的源代码,发现其中的open(argv[1],RDWR)函数是以可读可写的方式打开设备的,但是查看了一下开机log信息,1m(bootloader)ro,这个分区是只读的,所以用flash_erase擦除不了bootloader这个分区。所以现在的问题变成,怎么把bootloader这个分区改成可读可写的?这样我就可以用mtd-utils中的flash_erase来擦除bootloader中的obm区域了。或者谁能告诉我除了以上方法还有哪些方法可以在linux应用层擦除bootloader中的obm区域!不胜感激!!

论坛徽章:
0
2 [报告]
发表于 2011-08-17 20:01 |只看该作者
回复 1# jkzrc


    地址你都知道了,在linux里面通过MTD来擦出指定的FLASH区域不就行了?

论坛徽章:
0
3 [报告]
发表于 2011-08-17 20:22 |只看该作者
请问具体该怎么擦呢?我用的是mtd-utils中的flash_erase是打不开bootloader这个分区的,更别说是擦除其中的区域了。

论坛徽章:
2
水瓶座
日期:2013-09-04 15:09:57白羊座
日期:2014-04-17 16:48:13
4 [报告]
发表于 2011-08-18 08:39 |只看该作者
开Linux内核给Flash分区的代码,把里面Flag的只读去掉,一般都在你板子对应的arch/arm/mach-xxxx/mach-xxxx.c文件里面

论坛徽章:
0
5 [报告]
发表于 2011-08-18 10:11 |只看该作者
开Linux内核给Flash分区的代码,把里面Flag的只读去掉,一般都在你板子对应的arch/arm/mach-xxxx/mach-xxxx ...
l2y3n2 发表于 2011-08-18 08:39


主意不错啊,

不知道lz怎么启动的,有没有机会更改命令参数的ro

论坛徽章:
2
水瓶座
日期:2013-09-04 15:09:57白羊座
日期:2014-04-17 16:48:13
6 [报告]
发表于 2011-08-18 16:50 |只看该作者
= =
Sorry,早上看的时候没注意到楼主给的命令行参数。
LZ这个应该是用启动命令行参数动态配置的分区,只要改bootloader里面的启动参数就好了。

论坛徽章:
0
7 [报告]
发表于 2011-08-18 20:54 |只看该作者
首先感谢大家的热情帮忙,嗯,我刚接触linux,你说的启动方式我觉得也是用命令行的方式动态配置分区信息,那请问在bootloader中的话要怎么改呢??我是菜鸟,什么都不会!!

论坛徽章:
0
8 [报告]
发表于 2011-08-19 09:31 |只看该作者
如果能进入uboot, 使用setenv命令修改bootargs  uart_dma bootrd=/dev/mtdblock1   mtdparts=pxa3xx_nand-0: 1m(bootloader), 。。。



取消其中的ro属性。

如果不能进入uboot有点麻烦,所以要先了解你的那些板子的启动方式是咋样的。怎么进入linux的,linux下能网络访问吗,能nfs吗



菜鸟不能做借口。

论坛徽章:
0
9 [报告]
发表于 2011-08-19 15:31 |只看该作者
回复 8# haierb


  进入u-boot的话是不是在板子启动的时候,连接到串口,然后再启动的过程当中按任意一个键进入啊?如果是的话,那样还是要用到串口的啊?用串口的话,就可以直接在U-boot中用命令来擦除啦!就是公司的板子很多都没有连接串口,连接的量太多了,很麻烦,才想在linux下通过应用层的方式来擦除!

论坛徽章:
2
卯兔
日期:2013-09-22 20:08:052015亚冠之广州富力
日期:2015-05-18 17:31:30
10 [报告]
发表于 2011-08-20 17:39 |只看该作者
回复  haierb


  进入u-boot的话是不是在板子启动的时候,连接到串口,然后再启动的过程当中按任意一个 ...
jkzrc 发表于 2011-08-19 15:31



    你的问题就我了解,如果不接串口是没法解决的. 现在很多的产品在升级过程中一般会升级更新应用跟内核,使用备份分区. 对了,我听说别人可以用U盘在u-boot状态去更新u-boot,当然前提你的u-boot做好这方面的功能. 一般在产品化过程中都会把u-boot这个分区,在设置内核启动参数的时候设置为只读,防止错误操作.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP