当前进程(Linux Devices Driver)
2015-11-16 14:45
459 查看
尽管内核模块不像应用程序一样顺序执行,内核做的大部分动作是代表一个特定进程的,内核代码可以引用当前进程,通过存取全局项current,它在asm/current.h中定义,它产生一个指针指向结构task_struct,在linux/sched.h定义,current指针指向当前在运行的进程,在一个系统调用执行期间,例如open 或者read,当前进程是发出调用的进程,内核代码可以通过使用current来使用进程特定的信息,如果它需要这样,这种技术的一个例子在第六章展示。
实际上, current 不真正地是一个全局变量. 支持 SMP 系统的需要强迫内核开发者去开发一种机制, 在相关的 CPU 上来找到当前进程. 这种机制也必须快速, 因为对 current 的引用非常频繁地发生. 结果就是一个依赖体系的机制, 常常, 隐藏了一个指向task_struct 的指针在内核堆栈内. 实现的细节对别的内核子系统保持隐藏, 一个设备驱动可以只包含linux/sched.h 并且引用当前进程. 例如, 下面的语句打印了当前进程的进程 ID 和命令名称, 通过存取结构 task_struct 中的某些字段.printk(KERN_INFO “The process is \”%s\” (pid %i)\n”, current->comm, current->pid);存于 current->comm 的命令名称是由当前进程执行的程序文件的基本名称( 截短到 15 个字符, 如果需要 ).
代码修改如下:
日志打印如下:
MTk平台的不好之处在于,你什么操作都没有,都会打印一大堆日志出来,我是真心搞不懂。
实际上, current 不真正地是一个全局变量. 支持 SMP 系统的需要强迫内核开发者去开发一种机制, 在相关的 CPU 上来找到当前进程. 这种机制也必须快速, 因为对 current 的引用非常频繁地发生. 结果就是一个依赖体系的机制, 常常, 隐藏了一个指向task_struct 的指针在内核堆栈内. 实现的细节对别的内核子系统保持隐藏, 一个设备驱动可以只包含linux/sched.h 并且引用当前进程. 例如, 下面的语句打印了当前进程的进程 ID 和命令名称, 通过存取结构 task_struct 中的某些字段.printk(KERN_INFO “The process is \”%s\” (pid %i)\n”, current->comm, current->pid);存于 current->comm 的命令名称是由当前进程执行的程序文件的基本名称( 截短到 15 个字符, 如果需要 ).
代码修改如下:
--- a/mediatek/custom/mid713l_lp_lvds/kernel/touchpanel/GSLX680/mtk_gslX680.c +++ b/mediatek/custom/mid713l_lp_lvds/kernel/touchpanel/GSLX680/mtk_gslX680.c @@ -687,8 +687,8 @@ static void record_point(u16 x, u16 y , u8 id) void tpd_down( int id, int x, int y, int p) { - print_info("============tpd_down id: %d, x:%d, y:%d============ \n", id, x, y); - + printk("============tpd_down id: %d, x:%d, y:%d============ \n", id, x, y); + printk("weiqifa The process is -%s pid -%i\n",current->comm,current->pid); input_report_key(tpd->dev, BTN_TOUCH, 1); input_report_abs(tpd->dev, ABS_MT_TOUCH_MAJOR, 1); input_report_abs(tpd->dev, ABS_MT_POSITION_X, x); weiqifa@weiqifa-Inspiron-3847:~/weiqifa/new_tm100/tm100$
日志打印如下:
<6>[ 92.546337]-(2)[[FH]] dis ok <6>[ 92.546353]-(2)[Power/clkmgr] [mt_disable_clock]: id=50, names=MFG ()mknt[oetsce_ls[84 <4>[ 92.605413] (3)============tpd_down id: 1, x:683, y:210============ <4>[ 92.605443] (3)weiqifa The process is -mtk-tpd pid -104 223 1slc i.rnsolr 94,omsoeaj10,omaj1,sz 43 okl 4[ 9.227 1Klig'dpitpoe'(8) o_cr_d 00(o_d 8,<> 2650]() t re272Bo eafo dodluce3 98 e 92.650]() cce622Bi eo ii 91k o o_cr_d 00<> 2651]() Fe eoyi 70k bv eevd[f(x0d) > 2654]()98dodluce3 i o[8:dpitpoe]<> 2655]()98G]ei
MTk平台的不好之处在于,你什么操作都没有,都会打印一大堆日志出来,我是真心搞不懂。
相关文章推荐
- windows文件上传到linux系统的文件内容问题
- linux centOS 安装mysql5.7.9
- linux下部署JDK
- 如何在 Linux 上使用 SSHfs 挂载一个远程文件系统
- centos系统设置通过windows代理上网
- Linux下查找包含BOM头的文件和清除BOM头命令
- centos系统设置通过windows代理上网
- Linux---关机与机器重启
- linux中fork()函数详解
- 一直未使用过的Linux API,还是要不停的学习啊
- Linux 下 java 监控 程序运行
- Linux环境下 使用JXL生成Excel时发生java.lang.ArrayIndexOutOfBoundsException
- CentOS6.5 配置VNC配置
- 【CentOS 7】Linux 分区方案参考
- Linux pipe函数
- Linux中iptables设置详细
- 英特尔 QSV 在 FFMPEG 中的使用(Linux)
- linux c 信号量编程
- linux在某个文件目录下右击打开终端 的小工具安装
- Linux下mysql的root密码忘记解决方法