36 个解决方案
#1
需要 EBoot 来实现,不是驱动。
#2
EBOOT实现,大家都这么做的,现在我们想通过系统来实现,如何做?
#3
应该在系统起来后要能对flash操作,读写MBR、TOC。这个应该要在驱动里做吧?应用程序不懂能否实现。
#4
这是个好的想法,后续我们也打算长时间来实现,关注一下。
#5
CE5.0上我们实现过,但是6.0实现起来够呛~
#6
5.0如何实现的?能否贴一下代码?我改改看能否在6.0上实现。这样大家都可以学习一下。谢谢!
#7
CE5.0和6.0机制不一样,CE5.0在应用层可以直接操作flash的扇区,而6.0不可以,所以贴出来意义也不大
#8
哦,这样呀,那怎么办呢?
#9
是操作扇区的,http://blog.csdn.net/nanjianhui/article/details/2196466
看这里实现这些后,然后知道你的NK写在哪个扇区就把NK.bin直接写到扇区里
#10
可是应用程序如何知道NK.BIN写在哪个扇区呢?读取toc结构体吗?谢谢hudaweikevin前辈的重要指点。
#11
我要更改C:\WINCE600\PLATFORM\SMDKV210\SRC\COMMON\NANDFLASH\FMD\fmd.cpp文件中的FMD_OEMIoControl的方法,增加读、写、擦除flash的方法,还要增加写toc、写MBR的方法吧?我看bootloader中的烧写NK.BIN有写MBR和TOC的操作。
#12
我们以前弄的是直接固定地址的,因为你的NK一般是固定从flash某个位置写起的
#13
是可以用固定地址。就是写完要写TOC和MBR吗?
#14
#15
以前我做过一个demo ,
试了一阵子,可以,后来TMD硬盘坏了。
程序不见了。
不过我写了博客,你去我的博客 搜索 更新 啥 的字眼应该还在的。
原理和app的代码我都贴出来了,
不过我的bootloader 烧写的是NK.nb0 ,没涉及TOC ,就比较简单。
不过TOC的东西, 你可以参考eboot去实现即可。
试了一阵子,可以,后来TMD硬盘坏了。
程序不见了。
不过我写了博客,你去我的博客 搜索 更新 啥 的字眼应该还在的。
原理和app的代码我都贴出来了,
不过我的bootloader 烧写的是NK.nb0 ,没涉及TOC ,就比较简单。
不过TOC的东西, 你可以参考eboot去实现即可。
#16
你的思路是对的。
三星内部有这个东东,是以驱动的形式存在的。
#17
哦?在哪里?能告诉我哪个文件或目录下吗?谢谢!
#18
韩国三星内部有这个代码,未公开 ,不在BSP中。就是一个
#19
就是一个以驱动形式存在的EBOOT,可以这样理解。
#20
还是没有告诉如何详细操作的具体结果!!
#21
具体原理就是这样啊,代码是木有的
#22
顶一下,谁有系统起来后的升级NK.BIN的驱动源码呀?谢谢分享!
#23
CE6.0做个驱动就好,意议还是挺大的。
#24
是呀,谁做过?分享一下经验和代码。谢谢
#25
应用程序可以开辟100MB的内存空间吗?应用层把NK.BIN读取到内存,然后传地址给驱动,让驱动连续地把NK.BIN写入到flash。还是只能一块一块(128KB)地传到驱动,然后驱动也一块一块地写进flash?
#26
我也打算做一个,我的想法是系统起来后,在应用程层将待更新的NK_new.bin放到NandFlash的一个目录中,然后下次开机时,在EBOOT起来后,找到这个目录下的文件,然后覆盖原来的NK。但这里有个问题,EBOOT下如何找到那个目录。
#27
EBOOT去做这事
#28
你的这种做法需要在eboot下分析flash的文件系统,比较麻烦。最好还是在系统运行过程中直接写flash,然后软件重启。
#29
你的这种做法需要在eboot下分析flash的文件系统,比较麻烦。最好还是在系统运行过程中直接写flash,然后软件重启。
#30
在应用层直接更新NK所在Flash对应块的话,NK的大小变化很大的话,就有可能把原来的应用程序也覆盖了,总有点不放心。因为我的内核中并没有包函应用程序,主要是方便分开升级。
#31
我的前面的问题欢迎多探讨呀。谢谢!
#32
http://blog.csdn.net/zhengmeifu/article/details/7611501 我的博客记录了我的想法。欢迎去看看。
#33
在线等高手指点。。。。
#34
在应用程序来直接更新内核,在/WINCE600/PUBLIC/COMMON/OAK/DRIVERS/BLOCK/MSFLASHFMD/下有多个FMD.cpp, fasl\, ram\, sdnpci\, sdnpci\, strata\下各自都有一个 不知是在哪个里改FMD_OEMIoControl。
另外DeviceIoControl传进去的句柄如何得到,通过CreateFile(TEXT("DSK1:"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL)得到的是INVALID_HANDLE_VALUE
另外DeviceIoControl传进去的句柄如何得到,通过CreateFile(TEXT("DSK1:"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL)得到的是INVALID_HANDLE_VALUE
#35
我现在的想法是直接块写原来NK.BIN所在的块,写完后就写TOC,这样不知是否可以。看eboot下的代码是先打开binfs分区,然后传入分区句柄来更新nk.bin。
#36
如果在应用层直接写Flash,要解决几个问题:
1 应用层操作Flash的接口,http://blog.csdn.net/nanjianhui/article/details/2196466 这个贴子中有说到怎么实现, A)打开"DSK1:"失败, B)修改FMD.cpp中FMD_OEMIoControl函数,但不知哪个。
to zhengmeifu, 你试验过,这个可以实现吗?
2 要知道NK在Flash中起始位在哪,我看了EBOOT的代码,没找到在哪。
3 正在运行的应用程序允许擦除吗?
1 应用层操作Flash的接口,http://blog.csdn.net/nanjianhui/article/details/2196466 这个贴子中有说到怎么实现, A)打开"DSK1:"失败, B)修改FMD.cpp中FMD_OEMIoControl函数,但不知哪个。
to zhengmeifu, 你试验过,这个可以实现吗?
2 要知道NK在Flash中起始位在哪,我看了EBOOT的代码,没找到在哪。
3 正在运行的应用程序允许擦除吗?
#1
需要 EBoot 来实现,不是驱动。
#2
EBOOT实现,大家都这么做的,现在我们想通过系统来实现,如何做?
#3
应该在系统起来后要能对flash操作,读写MBR、TOC。这个应该要在驱动里做吧?应用程序不懂能否实现。
#4
这是个好的想法,后续我们也打算长时间来实现,关注一下。
#5
CE5.0上我们实现过,但是6.0实现起来够呛~
#6
5.0如何实现的?能否贴一下代码?我改改看能否在6.0上实现。这样大家都可以学习一下。谢谢!
#7
CE5.0和6.0机制不一样,CE5.0在应用层可以直接操作flash的扇区,而6.0不可以,所以贴出来意义也不大
#8
哦,这样呀,那怎么办呢?
#9
是操作扇区的,http://blog.csdn.net/nanjianhui/article/details/2196466
看这里实现这些后,然后知道你的NK写在哪个扇区就把NK.bin直接写到扇区里
#10
可是应用程序如何知道NK.BIN写在哪个扇区呢?读取toc结构体吗?谢谢hudaweikevin前辈的重要指点。
#11
我要更改C:\WINCE600\PLATFORM\SMDKV210\SRC\COMMON\NANDFLASH\FMD\fmd.cpp文件中的FMD_OEMIoControl的方法,增加读、写、擦除flash的方法,还要增加写toc、写MBR的方法吧?我看bootloader中的烧写NK.BIN有写MBR和TOC的操作。
#12
我们以前弄的是直接固定地址的,因为你的NK一般是固定从flash某个位置写起的
#13
是可以用固定地址。就是写完要写TOC和MBR吗?
#14
#15
以前我做过一个demo ,
试了一阵子,可以,后来TMD硬盘坏了。
程序不见了。
不过我写了博客,你去我的博客 搜索 更新 啥 的字眼应该还在的。
原理和app的代码我都贴出来了,
不过我的bootloader 烧写的是NK.nb0 ,没涉及TOC ,就比较简单。
不过TOC的东西, 你可以参考eboot去实现即可。
试了一阵子,可以,后来TMD硬盘坏了。
程序不见了。
不过我写了博客,你去我的博客 搜索 更新 啥 的字眼应该还在的。
原理和app的代码我都贴出来了,
不过我的bootloader 烧写的是NK.nb0 ,没涉及TOC ,就比较简单。
不过TOC的东西, 你可以参考eboot去实现即可。
#16
你的思路是对的。
三星内部有这个东东,是以驱动的形式存在的。
#17
哦?在哪里?能告诉我哪个文件或目录下吗?谢谢!
#18
韩国三星内部有这个代码,未公开 ,不在BSP中。就是一个
#19
就是一个以驱动形式存在的EBOOT,可以这样理解。
#20
还是没有告诉如何详细操作的具体结果!!
#21
具体原理就是这样啊,代码是木有的
#22
顶一下,谁有系统起来后的升级NK.BIN的驱动源码呀?谢谢分享!
#23
CE6.0做个驱动就好,意议还是挺大的。
#24
是呀,谁做过?分享一下经验和代码。谢谢
#25
应用程序可以开辟100MB的内存空间吗?应用层把NK.BIN读取到内存,然后传地址给驱动,让驱动连续地把NK.BIN写入到flash。还是只能一块一块(128KB)地传到驱动,然后驱动也一块一块地写进flash?
#26
我也打算做一个,我的想法是系统起来后,在应用程层将待更新的NK_new.bin放到NandFlash的一个目录中,然后下次开机时,在EBOOT起来后,找到这个目录下的文件,然后覆盖原来的NK。但这里有个问题,EBOOT下如何找到那个目录。
#27
EBOOT去做这事
#28
你的这种做法需要在eboot下分析flash的文件系统,比较麻烦。最好还是在系统运行过程中直接写flash,然后软件重启。
#29
你的这种做法需要在eboot下分析flash的文件系统,比较麻烦。最好还是在系统运行过程中直接写flash,然后软件重启。
#30
在应用层直接更新NK所在Flash对应块的话,NK的大小变化很大的话,就有可能把原来的应用程序也覆盖了,总有点不放心。因为我的内核中并没有包函应用程序,主要是方便分开升级。
#31
我的前面的问题欢迎多探讨呀。谢谢!
#32
http://blog.csdn.net/zhengmeifu/article/details/7611501 我的博客记录了我的想法。欢迎去看看。
#33
在线等高手指点。。。。
#34
在应用程序来直接更新内核,在/WINCE600/PUBLIC/COMMON/OAK/DRIVERS/BLOCK/MSFLASHFMD/下有多个FMD.cpp, fasl\, ram\, sdnpci\, sdnpci\, strata\下各自都有一个 不知是在哪个里改FMD_OEMIoControl。
另外DeviceIoControl传进去的句柄如何得到,通过CreateFile(TEXT("DSK1:"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL)得到的是INVALID_HANDLE_VALUE
另外DeviceIoControl传进去的句柄如何得到,通过CreateFile(TEXT("DSK1:"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL)得到的是INVALID_HANDLE_VALUE
#35
我现在的想法是直接块写原来NK.BIN所在的块,写完后就写TOC,这样不知是否可以。看eboot下的代码是先打开binfs分区,然后传入分区句柄来更新nk.bin。
#36
如果在应用层直接写Flash,要解决几个问题:
1 应用层操作Flash的接口,http://blog.csdn.net/nanjianhui/article/details/2196466 这个贴子中有说到怎么实现, A)打开"DSK1:"失败, B)修改FMD.cpp中FMD_OEMIoControl函数,但不知哪个。
to zhengmeifu, 你试验过,这个可以实现吗?
2 要知道NK在Flash中起始位在哪,我看了EBOOT的代码,没找到在哪。
3 正在运行的应用程序允许擦除吗?
1 应用层操作Flash的接口,http://blog.csdn.net/nanjianhui/article/details/2196466 这个贴子中有说到怎么实现, A)打开"DSK1:"失败, B)修改FMD.cpp中FMD_OEMIoControl函数,但不知哪个。
to zhengmeifu, 你试验过,这个可以实现吗?
2 要知道NK在Flash中起始位在哪,我看了EBOOT的代码,没找到在哪。
3 正在运行的应用程序允许擦除吗?