crifan
发表于 2011-03-25 19:31
回复 28# chenrvmldd
前面已经说了啊,大概就是,对于nor flash,如果你的nor flash本身是常见的类型之一,那么Linux中已经包含了对应的Nor FLash驱动,就不用你自己再去实现了,只要在开发板初始化部分加上少量代码后,就可以支持了,然后对应Nor FLash,同样是属于Linux的MTD架构下的,其已经实现了对应的mtd的char设备,对于这些设备有个mtd util,就是一堆工具,包括flash的write,flash,read等,用这些工具,就可以实现你所要做的工作:
先erase工具删除对应部分内容,然后用write工具写入对应的数据,就OK了。
所以,从头到尾,你只需要加上少量代码(大概也就几行,定义一些结构体之类的)以支持nor flash,然后会使用mtd的util系列工具即可。
细节的话,可以邮件交流 green-waste (at) 163.com
azsoarsky
发表于 2011-03-26 22:29
喜欢这样原汁原味,一步一步来的讲授~~~:em03:
zhongfrank
发表于 2011-03-27 10:53
回复 1# chenrvmldd
支持楼主一下:)
关于在系统下更新内核和文件系统,有个简单的想法
系统下/dev/下有flash分区的节点
将内核或者文件系统的镜像文件直接写入相应节点下,就可完成,简单的一个cp命令:)
_MipS
发表于 2011-04-12 17:47
我也被flash搞得头疼,我是vxworks下的 norflash 跟 nandflash操作 os映像升级
yubinfu
发表于 2011-04-22 22:50
膜拜下~:em08:
pilgrim_kevin
发表于 2011-04-23 17:06
呵呵,你的东西写得太多了,匆匆扫了一眼,说点自己的看法。实际的项目需求中,如果产品化,有一些东西不知 ...
wangfeifeiwc 发表于 2011-03-22 12:47 http://bbs.chinaunix.net/images/common/back.gif
顶这个。
pilgrim_kevin
发表于 2011-04-23 17:11
实际的项目需求中,如果产品化,有一些东西不知道你有没有考虑:
一个是何时触发升级的请求,除了盒子端要处理一些事情,服务器端如何配合?
一个是备份的问题,如果升级中失败怎么办?(a 中途断电 b 所更新的内核或者文件系统本身就有问题)
一个你的代码的移植性,如何后续换成nand flash你如何应对?
呵呵,其实要考虑的问题很多,很明显你是走了弯路,因为使用mtd确实能很轻松完成你所完成的大部分工作,而你却弃之不用。
大家都是从新手走过来的,其实还是那句话,知之为知之,不知为不知,当你拿到一个项目需求时,不明白的地方,一定要找上级沟通,不要自己闷着脑袋搞。即使baidu/google后有思路了,也要找领导确认。还好目前一般都有概要设计和概要设计评审的机制。
回复 28# chenrvmldd
前面已经说了啊,大概就是,对于nor flash,如果你的nor flash本身是常见的类型之一,那么Linux中已经包含了对应的Nor FLash驱动,就不用你自己再去实现了,只要在开发板初始化部分加上少量代码后,就可以支持了,然后对应Nor FLash,同样是属于Linux的MTD架构下的,其已经实现了对应的mtd的char设备,对于这些设备有个mtd util,就是一堆工具,包括flash的write,flash,read等,用这些工具,就可以实现你所要做的工作:
先erase工具删除对应部分内容,然后用write工具写入对应的数据,就OK了。
所以,从头到尾,你只需要加上少量代码(大概也就几行,定义一些结构体之类的)以支持nor flash,然后会使用mtd的util系列工具即可。
这个是正解。所以楼主的学习精神可嘉,确实也学到了一些东西,但还是走了弯路,工作跟学习研究不一样,还是要使用更成熟的解决方案。另外,从开发管理角度来说,缺乏应有的评审。你的设计只“解决了问题”,但对扩展性、可靠性、可维护性和通用性这些要考虑的东西还远远不够。
crifan
发表于 2011-04-23 18:02
最近几天,抽空还是再写个runtime时的linux下升级固件(uboot,kernel,rootfs)的帖子吧,呵呵,到时候,你看了就清楚了。
TerryJk
发表于 2011-06-13 23:47
很好的帖子!
tempname3
发表于 2011-06-14 21:59
我至今还不明白为什么Nor需要驱动程序。