驱动开发面试题(面试题:驱动的作用,以及调试驱动要注意什么)
下面是好好范文网小编收集整理的驱动开发面试题(面试题:驱动的作用,以及调试驱动要注意什么),仅供参考,欢迎大家阅读!
谢邀!
我调试过Linux,vxworks和另外一个国产嵌入式实时操作系统下的驱动,涉及的平台从arm到zynq到ppc到龙芯到dsp都有,当然不是每一个平台都那么熟悉,今年就一直在调zynq。
第一,驱动的作用
基本就是你说的这样子了,驱动硬件工作以及为上层屏蔽硬件细节,提供操作接口。
第二,调试驱动要注意什么?
这个太多太多啦,胡乱说一些我的看法吧,总之不是满足上面说的驱动的作用那么简单。
驱动的调试一般都是很早起就进行的,大多时候都要配合做硬件的工程师,他们很可能不懂软件,这时候就需要你把板子跑起来,来验证这个板子的硬件通路是OK的,功能是OK的,甚至性能是满足需求的,硬件验证完了,硬件工程师才会松一口气。接着,看需求文档,技术协议,需要你和上层去对接,上层需要什么接口,比如zynq,他可能只告诉你,我只要两个接口一个writeddr一个readddr,readddr要是阻塞的。他根本不管底层是不是有pl和ps的通信协议,不会关心你如何绞尽脑汁去实现这个阻塞(ps:不是应用中信号量那种阻塞同步)。说的好听,承上启下,说的不好听,谁都要伺候好。
1.接线要注意,防静电不可少
硬件在给你板卡的时候,很可能就是第一版,板子上还有飞线,电源也是正负线引出来,开关也没焊上去,问清楚电压电流的限制,正负极看好,接稳压电源的时候线接反了,一块板子烧了事小,耽误工期,等着狂加班吧。。。摸板子的时候,最好碰一下旁边的金属物体,即使在防静电工作台也最好这样,把静电放掉,不要小看静电,敏感器件被静电打坏的概率不低。测试的时例如ttl转换芯片和gpio口的输入输出,一定要看原理图做了隔离没,没有的话,不要轻易接地接线,烧坏bank可能芯片就废了。
2.关注下bootloader
vxworks有vxboot,zynq在uboot之前还有fsbl,dsp(c6678)有ibl这些都是bootloader,大多数人接触的都是u-boot,现在也越来越像Linux了。关注Bootloader是因为我经常调试驱动的时候,比如网卡和flash,在uboot下是好的,但是我的操作系统起来之后,就不对了,那我就会把uboot下有关的寄存器信息打印出来,然后把操作系统起来之后的也打印出来,对比一下,就知道哪里出问题了。这个方法可以解决掉不少硬件配置问题。一般现在成熟的板卡供应商,都会提供相应的Bootloader和对应的源码,vx除外。要会利用这部分资源,了解bootloader都干了什么,如何启动和加载系统的,整个框架是怎样的,能编译,能修改,这个一定会帮助调试驱动的。
3.操作硬件的能力
好的驱动工程师,不是以你会一个牛逼的cpu或者架构来判断的,而是你能操作多少设备,cpu也是设备啊,低速总线rs232,spi,i2c.存储设备,nand flash norflash,emmc,eeprom,高速总线pcie,srio,hyperlink。其他网卡以及和fpga通信等等。举个例子,操作nand flash,都知道先写命令,再读写数据,但是DSP通过EMIF接口操作,zynq通过pl35x操作,arm有自己的nand 控制器,ppc走Loacal bus,读写数据各个平台也是不一样的,如何破,归根结底,flash读写通过ba,pa和ca三个地址来实现,分为5个周期,地址如何转换的搞清楚。。上面说的那些接口和控制器,无非围绕这个来开展,摸清他实现的方式,就可以了,这个需要经验和时间去积累,但是调驱动的时候,一定要注意去积累。
你以为操作硬件就是这些东西?万用表示波器电烙铁也是硬件。。。
4.驱动和系统是如何关联的
linux的驱动层比较庞大,也比较强大,很多设备基本都有现成的驱动,你只需要probe一下,就会发现你要的设备或者相似的设备,改一改,修一修,估计就能用了。这样的代价就是linux一层又一层的封装以及设备驱动里较多的子系统。vxworks有vxbus,简单粗暴,明晰好用,几乎所有的设备都可以走vxbus,不管你是网络设备还是块设备。不管怎么样,你需要知道,如何将我的驱动程序“注册”到操纵系统,如何让应用层在调用open,read,write的时候看到你的设备,不管是file_operations也好,pResource也好,都需要你了解整个系统的架构。所以你发现没,现在都是解析xxxlinux驱动,为什么要解析,不是写xxxlinux驱动,在linux下做驱动,了解各个子系统和设备驱动的框架,比自己写,要重要的多。甚至你可以不了解硬件的细节,知道在哪里改基地址,在哪里改寄存器偏移地址,在哪里添加和删除对应的功能,你也可以把驱动调通,为什么, 因为linux真的很优秀。
5.要有上下兼通的能力
下说过了,硬件。上就是,最起码,你自己做的驱动,要能自己写个应用程序测试demo吧,必要的时候,还要给上层写一个使用演示的例子,再完善一个驱动接口说明文档,并不是所有的设备都可以open read write的。你的驱动函数的功能,参数,返回值的说明。再进阶一下,要把上层当做傻子,给他把底层通信协议都屏蔽了,只做上层的应用协议,这个也需要一定的功底。
6.耐得住寂寞
驱动没有花里胡哨的界面,没有纷繁的数据处理,没有那么高深的算法,需要的是稳和毫无存在感。。。要让硬件和软件行云流水的时候都感受不到你的存在,那你就OK了。
工作时间纯手打,良心不。。。