6.4 OMAP的主要设备驱动

6.4.1 显示的驱动程序

OMAP处理器显示方面的驱动程序,就是OMAP处理器SOC的DSS(Display Sub System,显示子系统)的驱动程序。其显示子系统包含一个主显示层,两个视频叠加的显示层。

显示子系统的库在drivers/video/omap2/omapfb/dss目录中,主要包含了core.c, manager.c,display.c,overlay.c,dss.c,omapdss.c,dpi.c,dispc.c和venc.c等文件,这些内容构成了显示驱动程序公用的“库程序”。

其中core.c中定义了platform_driver的名称为omapdss,在sys文件系统/sys/bus/platform/drivers/中包含了同名目录。它和arch/arm/mach-omap中的board-zoom2.c中定义的platform_device相匹配。

主要的文件系统的信息包含在以下目录中:

    # ls -l /sys/devices/platform/omapdss/

其中overlay0目录中为基本显示层(图形层)的信息,overlay1和overlay2目录中分别是两个叠加显示层的信息。manager0和manager1中则提供了管理方面的功能。

执行以下的内容,查看sys文件系统:

    / # cat /sys/devices/platform/omapdss/overlay0/name
    gfx

gfx为graphics的含义,表示overlay0的名称为图形层。除了name以外enabled,manager, screen_width,global_alpha,input_size,output_size,position等文件都可以提供相关的信息。

文件enabled是一个可以控制的内容,可以通过如下命令分别进行关闭显示和打开显示的功能。

    # echo "0" > /sys/devices/platform/omapdss/overlay0/enabled
    # echo "1" > /sys/devices/platform/omapdss/overlay0/enabled

显示部分的frambuffer驱动程序部分主要头文件为:include/linux/omapfb.h。其中定义额外的ioctl命令号,以及在驱动程序中使用的结构体等内容。

主显示驱动的frambuffer驱动程序的内容是drivers/video/omap2/omapfb中的omapfb-main.c,omapfb-ioctl.c,omapfb-sysfs.c等文件。编译将被连接在一起生成omapfb.o目标文件。这构成了标准的framebuffer驱动程序,在Android系统中其设备节点是/dev/graphics/fb0。

omapfb-main.c定义了platform_driver的名称为omapfb,在sys文件系统/sys/bus/platform/drivers/中包含了同名目录。这个名称和platform_driver、arch/arm/plat-omap中的fb.c定义的platform_device相匹配。