/***********************************************************************************
* 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, , "power-key", , ), --->----*--+ |
}; ^------------------------------------------------------*----+
|
static struct gpio_keys_platform_data new_sabresd_button_data = { <-------+ |
.buttons = new_sabresd_buttons, >------------>---------------*--+
.nbuttons = ARRAY_SIZE(new_sabresd_buttons), |
}; |
|
static struct platform_device sabresd_button_device = { <--+ |
.name = "gpio-keys", | |
.id = -, | ^
.num_resources = , | |
}; | |
| |
static void __init imx6q_add_device_buttons(void) <-----*-------+ |
{ | | |
platform_device_add_data(&sabresd_button_device, >---+ | |
&new_sabresd_button_data, | |
sizeof(new_sabresd_button_data)); >-------------*-------+
|
platform_device_register(&sabresd_button_device); |
} |
|
|
...... ^
/*! |
* Board specific initialization. |
*/ |
static void __init mx6_sabresd_board_init(void) <------------<---*--------<-----+
{ | |
...... | |
imx6q_add_device_buttons(); ------>------------->-------------+ |
...... |
} |
|
...... |
/* ^
* 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, ----->------------->------->--------+
.timer = &mx6_sabresd_timer,
.reserve = mx6q_sabresd_reserve,
MACHINE_END

Linux driver 板级文件跟踪一般方法的更多相关文章

  1. 【转】 Linux内核中读写文件数据的方法--不错

    原文网址:http://blog.csdn.net/tommy_wxie/article/details/8193954 Linux内核中读写文件数据的方法  有时候需要在Linuxkernel--大 ...

  2. kernel 3.2.0 上加入自己的板级文件

    第一步.复制自己的参考的板级文件 cp arch/arm/mach-omap2/board-am335xevm.c arch/arm/mach-omap2/board-aplex_ECM_5412.c ...

  3. linux下查看某个文件位置的方法

    linux下查看某个文件位置的方法: 例如,不知道apache的配置文件httpd.conf的位置,可以有两种方法来查看: 1.find / -name httpd.conf2.locate http ...

  4. (linux)BSP板级支持包开发理解

    1. 概述 嵌入式系统由硬件环境.嵌入式操作系统和应用程序组成,硬件环境是操作系统和应用程序运行的硬件平台,它随应用的不同而有不同的要求.硬件平台的多样性是嵌入式系统的主要特点,如何使嵌入式操作系统在 ...

  5. linux下查找某个文件位置的方法

    一.通过文件名查找法: 举例说明,假设你忘记了httpd.conf这个文件在系统的哪个目录 下,甚至在系统的某个地方也不知道,则这是可以使用如下命令: find / -name httpd.conf ...

  6. linux下快速列出文件列表的方法

    前言 这两天碰到一个很棘手的问题,需要读取出ubuntu系统中某个目录下所有文件,由于服务器中存储的文件实在太多,导致此过程效率十分低下,动辄需要等待一个小时之久,还只是一个目录.于是如何快速获取文件 ...

  7. Linux系统启动过程内核文件丢失解决方法

    一.问题描述 公司近期因机房断电,导致服务器重启后,引导进入不了操作系统.经过检查发现启动文件缺失,导致系统启动失败,网上搜了好多资料,解决都比较零散,现结合实际处理经验和网友的建议整理接方案. 二. ...

  8. linux下tar.bz2文件的 解压缩方法

    一 使用bzip2解压缩命令进行解压缩: bzip2 -d  gcc-4.1.0.tar.bz2 二 上面解压完之后执行下面的命令. tar -xvf gcc-4.1.0.tar 或 tar -xvf ...

  9. 在Linux中的.iso文件的处理方法

    1,mkdir /a 2,mount MLNX_OFED_LINUX-4.4-2.0.7.0-rhel7.3-x86_64.iso  /a3,cd /a4,这样就可以对文件进行操作了

随机推荐

  1. 视图层view layer

    视图层是Django处理请求的核心代码层,我们大多数Python代码都集中在这一层面. 它对外接收用户请求,对内调度模型层和模版层,统合数据库和前端,最后根据业务逻辑,将处理好的数据,与前端结合,返回 ...

  2. select 操作

    一:JavaScript 1:拿到select对象: var myselect=document.getElementById(“test”); 2:拿到选中项的索引:var index=mysele ...

  3. U3D协程yield的使用和理解

    部分内容参考网址:http://blog.csdn.net/huang9012/article/details/29595747 Win7+U3D 4.6.7 1.在c#中使用①首选需要定义一个返回值 ...

  4. Codeforces 837D - Round Subset(dp)

    837D - Round Subset 思路:dp.0是由2*5产生的. ①dp[i][j]表示选i个数,因子2的个数为j时因子5的个数. 状态转移方程:dp[i][j]=max(dp[i][j],d ...

  5. 关于Dos命令中存在中文的解决方法

    问题:当我们直接打开dos窗口并在里面写入中文时是没有问题的,但是当我们把这些命令放在bat文件中执行时就出问题了解决:1.首先可以通过pause命令来查看错误原因2.记事本默认是UTF-8格式的,而 ...

  6. JQuery.Ajax()的data参数传递方式

    最近,新学c# mvc,通过ajax post方式传递数据到controller.刚开始传递参数,controller中总是为null.现记录一下,可能不全,纯粹记个学习日记. 重点在于参数的方式,代 ...

  7. android--------验证码倒计时

    在我们注册或者修改信息的时候,常会用到60s倒计时这个功能,写了这篇文章,大家共享一下: 效果图: 直接上代码: activity.java public class MainActivity ext ...

  8. java.lang.RuntimeException: Unable to start activity ComponentInfo{com.autumn.book/com.autumn.book.MainActivity}: android.os.NetworkOnMainThreadException

    不能把http请求写在主线程里,改为这样 Runnable runnable = new Runnable() { public void run() { HttpClient.post2(" ...

  9. Java compiler level does not match the version of the installed Java project facet.解决方法

    右键项目“Properties”,在弹出的“Properties”窗口左侧,单击“Project Facets”,打开“Project Facets”页面. 在页面中的“Java”下拉列表中,选择相应 ...

  10. 关于二级指针的使用(使用node指针建树)

    struct node { int v; node *l,*r; }*p; 使用二级指针建树的话,如果p是非全局变量且一开始没有指向变量的话递归建树时必然要传递参数,但是如果只是简单的build(no ...