Linux驱动移植(二)——相似或相关资源的获取
Linux驱动程序一般较少从底层开发,有这样几种途径可以有效协助我们较快地完成驱动开发:
1.Demo板的驱动
借用Demo板的驱动主要是求同存异,芯片一般是相同的,主要体现在片选的IO、中断和DMA通道等方面。
因而在进行驱动开发时我们一般遵循这样的设计理念:将硬件和平台相关(内存地址、片选的IO、中断号、DMA通道和硬件设置等)的信息放在BSP中,作为platform信息、SPIboard信息、I2Cboard信息,而不直接放在驱动里面,以备修改。
任何驱动工程师在面对新驱动程序的开发时,都没有必要一切从头开始。在内核源代码/drivers中已经大量包含了类似芯片的驱动程序,这些都可以借鉴。
附录:
1)cpu_relax()函数,一般用在忙等待中,其作用降低CPU的消耗,同时也起到内存屏障的作用,同时,Document/volatile_considered_harmful.txt中也提到,在忙等待中要避免使用volatile关键字;
2)BSP
A. BSP是什么:
BSP是板级支持包,是介于主板硬件和操作系统之间的一层,应该说是属于操作系统的一部分,主要目的是为了支持操作系统,使之能更好的运行于硬件主板。
B. PC机和嵌入式系统中的BSP
在Pc机的windos系统或Linux系统中也有BSP,只是PC机均采用统一的X86体系架构,所以其BSP是单一确定的,一般不需要做什么修改。
在嵌入式系统中情况完全不同,目前市场上有多种结构的CPU(RISC)并存(PPC、ARM、MIPS),为了性能的需要,外围设备也会有不同 选择和定义。因而,嵌入式系统针对不同的CPU会有不同的BSP,即使相同 的CPU,外围设备的差异(如外部扩展DRAM的大小,类型改变),BSP相应的部分也会有所不同。
所以,需要根据硬件设计编写和修改BSP,以保证系统正常的运行。
C.BSP在嵌入式开发中的位置和作用
BSP开发处于整个嵌入式开发的前期,是后面系统上应用程序能正常运行的保证。
大致步骤如下:
a. 硬件主板研制,测试;
b. 操作系统的选定,BSP编程;
c. 上层应用程序的开发。
BSP部分在硬件和操作系统,上层应用程序之间,所以,这就要求BSP程序员对硬件,软件和操作系统都有一定 的了解,才能做好BSP编程。
需要熟悉的工具:电表、示波器、逻辑分析仪、硬件仿真器、仿真调试环境。
编程语言:汇编语言、C语言。
参考文献:
1.http://baike.baidu.com/item/bsp/4572854?fr=aladdin
2. Linux设备驱动开发详解 宋宝华著