嵌入式Linux热门培训内容之Linux当前进程

时间:2018-12-13 17:34:49

我们在内核开发的时候,我们有时候非常需要知道,是哪个进程调用了我的驱动代码,通过这个打印,我能对我的代码健壮性更加自信。

尽管内核模块不像应用程序一样顺序执行,内核做的大部分动作是代表一个特定进程的,内核代码可以引用当前进程,通过存取全局项current,它在asm/current.h中定义,它产生一个指针指向结构task_struct,在linux/sched.h定义,current指针指向当前在运行的进程,在一个系统调用执行期间,例如open 或者read,当前进程是发出调用的进程,内核代码可以通过使用current来使用进程特定的信息

代码例子如下:

--- 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平台的打印是一个奇葩,没有任何操作的时候,也会打印出一大堆日志,rockchip平台和Qcom平台都不会有这样的问题。