zoukankan      html  css  js  c++  java
  • Linux driver 板级文件跟踪一般方法

    /***********************************************************************************
     *                      Linux driver 板级文件跟踪一般方法
     *  声明:
     *      1. 这是本人使用vim+ctags最常用的跟踪方法,也是唯一的方法;  :)
     *      2. 本人已经在跟踪线上标注了跟踪序号,也就是先后循序;
     *      3. 就目前而言,这种方法貌似是通用的;
     *      4. 这个例子仅仅是简单的演示,并没有全部展开,如果想要进一步跟踪,
     *          继续跟就行了。
     *      5. 源代码来自:myzr_android4_2_2_1_1_0.tar.bz2
     *
     *                                    2015-6-12 晴 深圳 南山平山村 曾剑锋
     **********************************************************************************/
    
    
    
    cat arch/arm/mach-mx6/board-mx6q_sabresd.c
    
    ......
    #define SABRESD_POWER_OFF   IMX_GPIO_NR(3, 29)          <--------------------------+
    ......                                                                             |
                                                                                       |
    #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)          |
    #define GPIO_BUTTON(gpio_num, ev_code, act_low, descr, wake, debounce)   <------+ |
    {                                                                               | |
        .gpio       = gpio_num,                                                     | |
        .type       = EV_KEY,                                                       | |
        .code       = ev_code,                                                      | |
        .active_low = act_low,                                                      | |
        .desc       = "btn " descr,                                                 | |
        .wakeup     = wake,                                                         ^ |
        .debounce_interval = debounce,                                              | |
    }                                                                                | |
                                                                                     | |
    static struct gpio_keys_button new_sabresd_buttons[] = {        <-----<-------+  | |
        //GPIO_BUTTON(SABRESD_VOLUME_UP, KEY_VOLUMEUP, 1, "volume-up", 0, 1),     |  | |
        //GPIO_BUTTON(SABRESD_VOLUME_DN, KEY_VOLUMEDOWN, 1, "volume-down", 0, 1), |  | |
        GPIO_BUTTON(SABRESD_POWER_OFF, KEY_POWER, 1, "power-key", 1, 1), --6->----*--+ |
    };                    ^-----------------------7-------------------------------*----+
                                                                                  |
    static struct gpio_keys_platform_data new_sabresd_button_data = {  <-------+  |
        .buttons    = new_sabresd_buttons,       >-------5----->---------------*--+
        .nbuttons   = ARRAY_SIZE(new_sabresd_buttons),                         |
    };                                                                         |
                                                                               |
    static struct platform_device sabresd_button_device = { <--+               |
        .name           = "gpio-keys",                         |               |
        .id             = -1,                                  |               ^
        .num_resources  = 0,                                   |               |
    };                                                         |               |
                                                               |               |
    static void __init imx6q_add_device_buttons(void)    <-----*-------+       |
    {                                                          |       |       |
        platform_device_add_data(&sabresd_button_device,  >--3-+       |       |
                    &new_sabresd_button_data,                          |       |
                    sizeof(new_sabresd_button_data));   >---4----------*-------+
                                                                       |
        platform_device_register(&sabresd_button_device);              |
    }                                                                  |
                                                                       |
                                                                       |
    ......                                                             ^
    /*!                                                                |
     * Board specific initialization.                                  |
     */                                                                |
    static void __init mx6_sabresd_board_init(void)   <------------<---*--------<-----+
    {                                                                  |              |
        ......                                                         |              |
        imx6q_add_device_buttons(); ------>-------2------>-------------+              |
        ......                                                                        |
    }                                                                                 |
                                                                                      |
    ......                                                                            |
    /*                                                                                ^
     * initialize __mach_desc_MX6Q_SABRESD data structure.                            |
     */                                                                               |
    MACHINE_START(MX6Q_SABRESD, "Freescale i.MX 6Quad/DualLite/Solo Sabre-SD Board")  |
        /* Maintainer: Freescale Semiconductor, Inc. */                               |
        .boot_params = MX6_PHYS_OFFSET + 0x100,                                       |
        .fixup = fixup_mxc_board,                                                     |
        .map_io = mx6_map_io,                                                         |
        .init_irq = mx6_init_irq,                                                     |
        .init_machine = mx6_sabresd_board_init,  ----->-------1------>------->--------+
        .timer = &mx6_sabresd_timer,
        .reserve = mx6q_sabresd_reserve,
    MACHINE_END
  • 相关阅读:
    数据库范式
    服务器防火墙
    Java垃圾回收(GC)机制详解
    Java内存模型
    类加载器
    Java类加载机制
    java虚拟机:Java内存区域及对象
    初识HashMap
    初识LinkedList
    java ArrayList
  • 原文地址:https://www.cnblogs.com/zengjfgit/p/4571354.html
Copyright © 2011-2022 走看看