由打SLD包想到的关于程序员的固定思维模式
2007-11-20 23:23
183 查看
最近一直在做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)里的驱动文件是旧版的,驱动没有更新造成的。而我在做的时候就只是想我的包做的有问题,而没有想驱动文件的问题。
其实这就是程序员的要害啊,尤其是在调试程序的时候,总感觉的某一部分没有问题,就不去调试它,犯这种错误有时会让我们调试很久都找不到问题的所在,当最后发现问题是原来是我们认为不会有问题的地方出错了。所以任何部分都有可能出问题的,不能以我们的直觉为依据。
在写程序的时候也需要我们多想想还有没有其他的方法,不要固定局限在一种方法下,有可能还有更好的方法呢,这样虽然一个程序写的时候慢了一些,但这相当于写了两个程序。以后再碰到类似的问题,我们就有两种解决办法了,增加了我们解决问题的机率。
比如最近所做的关于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)里的驱动文件是旧版的,驱动没有更新造成的。而我在做的时候就只是想我的包做的有问题,而没有想驱动文件的问题。
其实这就是程序员的要害啊,尤其是在调试程序的时候,总感觉的某一部分没有问题,就不去调试它,犯这种错误有时会让我们调试很久都找不到问题的所在,当最后发现问题是原来是我们认为不会有问题的地方出错了。所以任何部分都有可能出问题的,不能以我们的直觉为依据。
在写程序的时候也需要我们多想想还有没有其他的方法,不要固定局限在一种方法下,有可能还有更好的方法呢,这样虽然一个程序写的时候慢了一些,但这相当于写了两个程序。以后再碰到类似的问题,我们就有两种解决办法了,增加了我们解决问题的机率。
相关文章推荐
- 顶级程序员和普通程序员在思维模式上的5个区别
- 顶尖程序员的五种思维模式,值得学习
- 关于Visitor模式突然想到的
- 看了关于《C#程序员请不要混淆引用类型和ref引用传参》想到的
- 黑马-程序员-关于工作流的模式
- 顶级程序员和普通程序员在思维模式上的5个区别!
- 顶级程序员赢在思维模式,这些区别你注意到了吗?
- 关于IT人的思维模式
- 顶级程序员和普通程序员在思维模式上的5个区别!
- 关于人的思维模式
- 顶级程序员和普通程序员在思维模式上的5个区别!
- 程序员应该掌握的选择思维模式?
- 顶级程序员和普通程序员在思维模式上的5个区别!
- 顶尖程序员的五种思维模式,你具备吗?
- 从网友发的一个关于程序员人生的流程图想到的
- [转]如果我有jQuery背景,我应该如何切换到AngularJS的思维模式?
- 策略模式:网络小说的固定套路
- 关于程序员应知系列要说的话
- 程序员如何管理好自己的思维?
- VM安装CentOS6.5固定IP设置——NAT模式