• WINCE6 添加唯一的设备ID 用户不可修改


    CE设备上要加上一个设备唯一码的功能,就是设备的ID,用于识别该唯一的设备。

    唯一码应该只有生产商具有可写权限,用户只有只读权限。而且必须是非易失性的,那么就必须存放在Nandflash之类的存储器上。


    这样子的话,就有几种方法可用:

    1、专门开辟一个物理块用于存放该数据

    2、参考LoongEmbedded说的在TOC中添加设备的ID信息


    以上两种方法都涉及到Eboot和Nandflash驱动。

    第二种方法LoongEmbedded的博客上有说,可以参考:http://blog.csdn.net/loongembedded/article/details/11784395


    直接在TOC上面添加设备信息,这个有一定的风险,如果操作不当的话,可能会把系统的入口地址给冲掉。而且,在重新烧写Eboot之后,也可能会把设备的ID给刷掉。

    我曾使用过这种方法,但是在写完之后,发现无法进入系统,因为已经找不到系统的入口地址了。但是写进去的数据和读取出来的块数据看上去是正常的

    后来,我改用了第一种方法,直接开一个块来存放这个设备ID。并把这个块作为保留块。


    Nandflash的0、1、2 block都是保留的,用于NBOOT、TOC和EBOOT的信息存放,而接下来如果没有其他占用块的话,那么应该就是MBR的块。

    我直接把 block 3 也设置为保留块,用于存放这个设备ID。

    【注意】如果你没有IROM的源码这样修改没啥用处,只要你从SD模式下烧写了NK和Eboot之后就会把block 3中的数据也给刷没了。


    添加block 3为保留块,可以参考设置TOC 、 Eboot等为保留块是如何配置的,然后再修改一下NK的起始块就OK。


    我在Eboot和IROM中添加了设备ID的读取和调试信息显示,然后在 Nandflash驱动中添加了读取和写入设备ID的接口,然后APP层通过调用 DSK1: 设备的这两个接口

    来读写设备ID。


    在弄这个功能的时候遇到N多问题,如:写入设备ID,重启后发现Nandflash的数据都没了,更有甚者系统都启动不了。写入后再读取出来发现正常,

    但重启后发现数据不见了的问题。还遇到可以打开DSK1: 设备,但发现访问添加的那两个接口时返回了 87的错误。

    最离谱的是可以打开 DSK1: 设备,但是访问接口时发现没有任何反应,最后发现原来打开的这个设备既然是假死状态的,联机只看到该设备为活动的,但具体是哪个dll

    等信息都看不到。

    【注意】要注意修改Nandflash驱动后,要编译相关有引用该库的驱动,然后重新打包NK来测试。在写入块数据的时候,要注意在写完一个sector的数据有,要把对应的保留块等信息写在该块的最后一页上面。


    在修正上述的所有问题后,测试发现无论是在SD模式下烧写Eboot、NK还是在Nand启动模式下烧写NK都不会把写入的设备ID给冲掉,除非是设备ID的那个block出现坏块

    或者Nandflash坏了,才会出现不见的情况。


  • 相关阅读:
    牛客网编程练习(2018校招真题编程题汇总)------字符串价值
    牛客网编程练习(2018校招真题编程题汇总)------排序
    牛客网编程练习(2018校招真题编程题汇总)------回文素数
    牛客网编程练习(2018校招真题编程题汇总)------判断题
    牛客网编程练习(2018校招真题编程题汇总)------删除重复字符
    mysql5.7出现大量too many connections及too many open files错误,且配置最大连接数未生效
    commons-lang3之StringUtils
    commons-lang3 事件机制 <EventListenerSupport>
    springboot文件上传下载简单使用
    Redis5.0.4复制
  • 原文地址:https://www.cnblogs.com/phisy/p/3363772.html
Copyright © 2020-2023  润新知