由打SLD包想到的关于程序员的固定思维模式

来源:互联网 发布:淘宝网鸟笼配件 编辑:程序博客网 时间:2024/06/06 01:27
    最近一直在做xpe的驱动程序打包的工作,期间也遇到了很多的问题,有一些问题并不是技术上的,而是由自己的固定思维模式造成的。
    比如最近所做的关于CAN的驱动包就是很好的一个例子。首先介绍一下CAN 的驱动,CAN驱动分为Bus层和Port层,就是说安装驱动时,要先安装Bus层,再安装Port层。根据不同的硬件所含有的CAN 端口的不同,所安装的Port的个数也不同。一般情况下为两个,当然也有一个的。驱动是已经有的,并且安装后一切正常。
    在做SLD包的时候,有的为PCI设备,这个就比较简单,如果是ISA设备(虽然这种设备已经非常老掉牙了,但还是有人在使用,其中一个很大的原因可能是它的价格)就稍微麻烦一点,要填写注册表。自己制作中也是不停的重复操作,才积累了一些经验。CAN的驱动在安装Bus层时,会根据不同的设备,向注册表写一个Portnumber的值,port层会根据Portnumber的值来决定安装port的数目,port层如果没读到Portnumber的数目,默认情况下会安装连个port。
    我在经一个isa设备驱动程序打包的时候,经过FBA后竟然有两个port,难道是在FBA的过程中prot层读Portnumber失败了!但是查看注册表发现Portnumber的值为1,怎么会这样呢,而且该向port对应的注册表写的数据也没有写成功。这就开始了我的尝试一路,一遍一遍的试。怎么也不成功。最后只得去看pci的设备port是否好的,将pci的驱动打成sld包加到image里面,FBA后发现,port数目虽然对(其实肯定会对的因为PCI 的设备都是两个端口),但是port对应的注册表的值也没有写进去。就为这个问题我整整找了一周。
    后来终于找到了问题的所在了,原来是我的驱动文件的问题,我的源仓库(repository)里的驱动文件是旧版的,驱动没有更新造成的。而我在做的时候就只是想我的包做的有问题,而没有想驱动文件的问题。
    其实这就是程序员的要害啊,尤其是在调试程序的时候,总感觉的某一部分没有问题,就不去调试它,犯这种错误有时会让我们调试很久都找不到问题的所在,当最后发现问题是原来是我们认为不会有问题的地方出错了。所以任何部分都有可能出问题的,不能以我们的直觉为依据。
    在写程序的时候也需要我们多想想还有没有其他的方法,不要固定局限在一种方法下,有可能还有更好的方法呢,这样虽然一个程序写的时候慢了一些,但这相当于写了两个程序。以后再碰到类似的问题,我们就有两种解决办法了,增加了我们解决问题的机率。
原创粉丝点击