zoukankan      html  css  js  c++  java
  • LCM兼容

    1、project-1998-trunk-bootable-bootloader-lk-project:   复制zaw1998aa_platform.mk为zaw2000aa_platform.mk
    里面修改:
    CONFIG_CUSTOM_LK_LCM="hx8394d_dsi_vdo_zaw1998 zx_dsi_vdo_zaw2000"

    2、project-1998-trunk-bootable-bootloader-lk-dev-lcm:   ...._lcm_list.c里面加extern
    #if defined(ZX_DSI_VDO_ZAW2000)                               //自定义
    extern LCM_DRIVER zx_dsi_vdo_zaw2000_lcm_drv;
    #endif
    LCM_DRIVER* lcm_driver_list[] =
    {
    #if defined(ZX_DSI_VDO_ZAW2000)
            &zx_dsi_vdo_zaw2000_lcm_drv,
            #endif
    ....
    }
    3、project-1998-trunk-bootable-bootloader-lk-dev-lcm:   3.1在添加的屏的文件夹zx_dsi_vdo_zaw2000里面的makefile文件里修改
    obj-y += hx8394d_dsi_vdo_zaw1998.o zx_dsi_vdo_zaw2000.o
    在驱动文件zx_dsi_vdo_zaw2000里面修改
    LCM_DRIVER zx_dsi_vdo_zaw2000_lcm_drv =  
    {
        .name            = "zx_dsi_vdo_zaw2000"
        ....
    }

    4、trunk-kernal-3.10-arch-arm-configs:                  platform_debug_defconfig
    zaw1998aa_platform_debug_defconfig和zaw1998aa_platform_defconfig的区别:带debug是eng版本的,不带是user版本的
    在1166行原来:
    CONFIG_CUSTOM_KERNEL_LCM="hx8394d_dsi_vdo_zaw1998"
    修改后:CONFIG_CUSTOM_KERNEL_LCM="hx8394d_dsi_vdo_zaw1998 zx_dsi_vdo_zaw2000"

    5、trunk-kernal-3.10-drivers-misc-mediatek-lcm—:       .._lcm_list.c里面加extern


    kernal  Mtkfb.c:___mtkfb_probe(struct device *dev)___disp_drv_.cDISP_SelectDevice(NULL)___disp_hal_.cLCM_DRIVER  *disphal_get_lcm_driver___lcm = lcm_driver_list[0]____Mt65xx_lcm_list.cLCM_DRIVER* lcm_driver_list[]=


    bootloaderlkplatformmt6735platform.c
    mt_disp_Init((void)*g_fb_base)
     DISP_CHECK_RET(DISP_Init((UINT32)lcdbase, (UINT32)lcdbase, FALSE));
    disp_drv_init_context()
     DISP_DetectDevice()
    lcm_drv = disp_drv_get_lcm_driver(NULL);



    kernal-3.10-drivers-misc-mediatek-video-mt6582:  disp_hal_.c   *disphal_get_lcm_driver(const char *lcm_name)




    platform总线注册:kernal/init :Main.c    asmlinkage void __init start_kernel(void)(内核的初始化过程由start_kernel函数开始,它完成了内核的大部分初始化工作)——>rest_init——>kernel_thread(这个线程创建很重要)——>kernel_init——>kernel_init_freeable——>do_basic_setup——>void __init driver_init(void)(kernal/driver/base/Init.c)——>platform_bus_init(kernal/driver/base/platform.c)




    kernaldriversase
    platform_driver_registe:向系统注册设备——>driver_register——>bus_add_driver——>void driver_attach(struct device_driver * drv):——>  bus_for_each_dev(drv->bus, NULL, drv, __driver_attach):遍历总线上的设备,执行一次__driver_attach(),看能不能将驱动关联(attach)到某个设备上去——>__driver_attach——>driver_match_device——>drv->bus->match——>(*match)(struct device *dev, struct device_driver *drv)==0;——>driver_probe_device(drv, dev)——>driver_probe_device(drv, dev)——>really_probe——>dev->bus->probe(dev)
    这里找到总线类型中的match函数,这里只是个函数指针,很明显platform_bus_type结构下有具体match的实现,匹配后会自动调用驱动下的probe函数:platform_drv_prober(在platform_driver_registe函数中定义了指针函数,使probe指向platform_drv_probe:drv->driver.probe = platform_drv_probe)


    而每当我们向一根bus添加一个硬件时时,套路是这样

    kernaldriversase:platform.c
    plateform_device_register
    platform_device_add
    kernaldriversase:core.c
    device_add()
    \ device_add 中有很多操作kobject,注册sysfs,形成硬件hiberarchy结构的代码。
    如果您忘记了,先回头去参考参考"我是sysfs"
    -> bus_probe_device(struct device *dev) -> device_attach() (driver/base:dd.c)->bus_for_each_drv()
    bus_for_each_drv与bus_for_each_dev类似,遍历该总线上所有的driver,执行一次__device_attach(),看能不能将设备关联(attach)到某个已登记的驱动上去。
    __device_attach()
    ->driver_probe_device() //后面与上面一样



    platform_driver结构体:platform_device.h
    static struct platform_device mt6575_device_fb  :Mt_devs.c(定义设备与资源的地方)

  • 相关阅读:
    day05 集合
    day05 判断敏感字符
    day05 None类型
    day05 字典
    day04元组
    day04列表
    HDFS配额管理(实战)
    hive数据库的哪些函数操作是否走MR
    oracle 裸设备划分 --centos6.5
    redis3.0.7集群部署手册
  • 原文地址:https://www.cnblogs.com/reality-soul/p/4663501.html
Copyright © 2011-2022 走看看