现在嵌入式芯片越来越多,从51、stm32、soc到gpu、fpga、dsp等专用芯片,基本上只要涉及到逻辑编程,就会涉及到驱动开发。 但是什么是驱动开发,为什么要做驱动开发呢? 不知道你有没有考虑过? 嵌入式开发有哪些类型? 如何做嵌入式开发?

1、驱动程序是cpu与其他芯片交互的一种方式

在这里插入图片描述

不管是哪种计算芯片,如果需要和外面的其他芯片通信,只能通过内部的ip核与外界通信,没有别的办法。 外部芯片可以是多种类型,包括存储、计算、网络和传感器。 这时候就需要各种对应的ip核来与之通信。 所谓驱动,就是对ip核进行配置,使其能够正常与外界交换数据,仅此而已。

2、嵌入式驱动与操作系统的关系

本质上,嵌入式驱动程序与操作系统无关。 比如一个i2c内存芯片,可以写uboot下的驱动,也可以写linux下的驱动,也可以写android下的驱动,即使没有任何平台,直接直接写驱动也是可以的。 只是各个平台为了自己的方便,将驱动中传入的代码一一抽象成一个框架。 开发的同学只需要了解这个框架,并做相应的代码适配,而不必从头开始写代码。

3、嵌入式驱动不一定是内核级代码

很多同学认为嵌入式驱动都是内核层代码,这也是不正确的。 以linux系统为例,在最初设计的时候,确实是打算将大部分驱动放在内核中。 但是到了android,由于GPL协议的限制,很多厂商并不想开源所有的驱动。 这就导致了一些厂商把一些驱动放在内核层,一些放在应用层的情况。 内核层的驱动代码是开源的,不想开源的代码通过动态库的方式提供给开发者。 另外还有一个驱动,是纯应用层的。 此类驱动包括串口RS232和Ethernet,都属于此类。 比如gps、camera等设备的接入很大程度上依赖于厂商提供的sdk代码。

4.司机的作用

很多同学认为驱动只是在当前平台上增加了外部设备,其实不仅如此。 如果使用得当,驱动程序可以扮演许多角色。 比如一些手机摄像头软件,可以预留一部分DDR内存,做成单独的驱动,供摄像头访问。 做成缓冲后,消费者可以利用它来快速浏览和处理图片。 再比如像Zynq这样的arm+fpga集成soc,完全可以自定义ip core,把一些经典的算法设计到ip core里面。 这时候,驱动程序的作用就不仅仅是驱动设备这么简单了,而是通过驱动程序。 协处理器的作用加速了代码的执行过程。

5. 驱动程序在软件栈中的作用

在这里插入图片描述

驱动程序在软件开发中的作用相当于人类的各种感觉器官和执行机构。 CPU处理的数据再强大,没有这些外部数据的输入,就没有办法感知这个世界。 同样的输出结果,如果没有执行结构,是没有办法带来任何变化和效果的。 因此,司机是一个承上启下的角色。 对于用户来说,如何在自己的业务场景和专业领域中使用嵌入式设备是他们的核心竞争力。

6.写几个驱动需要设计的知识点

写一个好的驱动主要涉及这几个方面。 1)能看懂原理图,但看不懂原理图,不能测电压,不能测信号,什么也做不了; 2)能阅读芯片手册。 3)会使用平台提供的驱动框架,不管是linux平台还是windows平台; 4)可以测试代码,而且很多时候测试完全靠自己,不可能靠别人帮你测试; 5)这一点也是最难的。 要充分发挥驱动的优势,找到驱动可以发挥其应用场景的地方,比前四点更难。

始终,我们学习是为了应用,而不是为了学习驱动的学习。 如何使用它是最重要的。

作者 admin