嵌入式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);

[email protected]:~/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平臺都不會有這樣的問題。

? 江苏快3号码表