Linux驅動 核心延時測試

2021-08-26 13:50:24 字數 1451 閱讀 7521

linux驅動:核心延時測試

環境:

主機:fedora12

目標板:mini6410

目標板linux核心版本:2.6.38

實現功能:

延遲2s

方法1:利用系統全域性變數jiffies

jiffies記錄系統節拍,每一次節拍,核心時鐘中斷函式會將jiffies加1.

hz在arm中為100,表示1s被分為100份,系統每個節拍為10ms.

修改上篇《linux驅動編寫:led驅動測試》中的ioctl函式,測試延時

//功能:ioctl操作函式 //返回值:成功返回0 static long led_driver_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) else //等待2s t = jiffies; while (time_after(jiffies,t + 2 * hz) != 1); writel(temp,s3c64xx_gpkdat); printk (device_name"\tjdh:led_driver cmd=%d arg=%d jiffies = %d\n",cmd,arg,jiffies); return 0; }

這個方法會使核心忙等待,會影響系統效率.

2.利用巨集ndelay(n),延時ns

udelay(n),延時us

mdelay(n),延時ms

這個簡單,不做介紹

3.利用核心進行延時

long sleep_on_timeout(wait_queue_head 8q,long time_out);

long interruptible_sleep_on_timeout(wait_queue_head 8q,long time_out);

第2個與第1個相比差別在於會被中斷喚醒。呼叫這兩個函式,核心會阻塞當前程序,將其放入等待佇列,等待時間到。

**:

//功能:ioctl操作函式 //返回值:成功返回0 static long led_driver_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) else //等待2s //t = jiffies; //while (time_after(jiffies,t + 2 * hz) != 1); init_waitqueue_head(&wait); sleep_on_timeout(&wait,2 * hz); writel(temp,s3c64xx_gpkdat); printk (device_name"\tjdh:led_driver cmd=%d arg=%d jiffies = %d\n",cmd,arg,jiffies); return 0; }

Linux驅動 核心延時測試

linux驅動 核心延時測試 環境 主機 fedora12 目標板 mini6410 目標板linux核心版本 2.6.38 實現功能 延遲2s 方法1 利用系統全域性變數jiffies jiffies記錄系統節拍,每一次節拍,核心時鐘中斷函式會將jiffies加1.hz在arm中為100,表示1s...

《Linux裝置驅動開發詳解》 核心延時

10.6.1 短延遲 linux 核心中提供了如下 3 個函式分別進行納秒 微秒和毫秒延遲。void ndelay unsigned long nsecs void udelay unsigned long usecs void mdelay unsigned long msecs 上述延遲的實現原...

Linux 核心延時函式

linux核心提供3個函式分別進行納秒,微妙和毫秒延時 void ndelay unsigned long nsecs void udelay unsigned long usecs void mdelay unsigned long msecs 這3個函式的延時原理是忙等待,也就是說在延時的過程中...