`

【Linux 驱动】第七章 时间 延迟及延缓操作 (例子详解一)

 
阅读更多

本文所涉及实验为博文http://blog.csdn.net/tianshuai11/article/details/7465587中示例,请先阅读上述博文,然后消化以下例子

一,模块方法

jit.c


Makefile


测试:

root@ubuntu:~/桌面/jit# make

root@ubuntu:~/桌面/jit# insmod jit.ko

root@ubuntu:~/桌面/jit# lsmod //查询安装完毕

其中文件currentime,jitbusy,jitsched,jitqueue,jitschedto,jitimer,jitasklet,jitasklethi都是模块jit创建

root@ubuntu:~/桌面/jit#head -6 /proc/currentime //查询currentime 文件的前六行(currentime 为jit程序创建)

/*返回的值为:当前的 jiffies 和 jiffies_64 值, 以 16 进制数的形式.

如同 do_gettimeofday 返回的相同的当前时间.

由 current_kernel_time 返回的 timespec.*/


0x004e4a3e 0x00000001004e4a3e 1334565617.514572
1334565617.511113437
0x004e4a3e 0x00000001004e4a3e 1334565617.514575
1334565617.511113437
0x004e4a3e 0x00000001004e4a3e 1334565617.514576
1334565617.511113437


root@ubuntu:~/桌面/jit# dd bs=20 count=5 < /proc/jitbusy //dd 命令参见【补充1】
5183602 5183852
5183852 5184102
5184102 5184352
5184352 5184602
5184602 5184852
记录了5+0 的读入
记录了5+0 的写出
100字节(100 B)已复制,4.99935 秒,0.0 kB/秒

root@ubuntu:~/桌面/jit# dd bs=20 count=5 < /proc/jitsched
5198924 5199174
5199174 5199424
5199424 5199674
5199674 5199924
5199924 5200174
记录了5+0 的读入
记录了5+0 的写出
100字节(100 B)已复制,4.99645 秒,0.0 kB/秒

root@ubuntu:~/桌面/jit# dd bs=20 count=5 < /proc/jitqueue
5205914 5206164
5206164 5206414
5206414 5206664
5206664 5206914
5206914 5207164
记录了5+0 的读入
记录了5+0 的写出
100字节(100 B)已复制,4.99969 秒,0.0 kB/秒

root@ubuntu:~/桌面/jit# dd bs=20 count=5 < /proc/jitschedto
5212110 5212360
5212360 5212610
5212610 5212860
5212860 5213110
5213110 5213360
记录了5+0 的读入
记录了5+0 的写出
100字节(100 B)已复制,4.99915 秒,0.0 kB/秒

root@ubuntu:~/桌面/jit# cat /proc/jitimer //inirp有没有被中断
time delta inirq pid cpu command
5226700 0 0 4625 3 cat
5226710 10 1 0 3 kworker/0:1
5226720 10 1 0 3 kworker/0:1
5226730 10 1 0 3 kworker/0:1
5226740 10 1 0 3 kworker/0:1
5226750 10 1 0 3 kworker/0:1

root@ubuntu:~/桌面/jit# cat /proc/jitasklet
time delta inirq pid cpu command
5236006 0 0 4626 2 cat
5236006 0 1 13 2 ksoftirqd/2
5236006 0 1 13 2 ksoftirqd/2
5236006 0 1 13 2 ksoftirqd/2
5236006 0 1 13 2 ksoftirqd/2
5236006 0 1 13 2 ksoftirqd/2

root@ubuntu:~/桌面/jit# cat /proc/jitasklethi
time delta inirq pid cpu command
5241403 0 0 4627 2 cat
5241403 0 1 13 2 ksoftirqd/2
5241403 0 1 13 2 ksoftirqd/2
5241403 0 1 13 2 ksoftirqd/2
5241403 0 1 13 2 ksoftirqd/2
5241403 0 1 13 2 ksoftirqd/2


【补充1】dd 是 Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。 dd 的主要选项:

  指定数字的地方若以下列字符结尾乘以相应的数字:
  b=512, c=1, k=1024, w=2, xm=number m
  if=file 输入文件名,缺省为标准输入。
  of=file 输出文件名,缺省为标准输出。
  ibs=bytes 一次读入 bytes 个字节(即一个块大小为 bytes 个字节)。
  obs=bytes 一次写 bytes 个字节(即一个块大小为 bytes 个字节)。
  bs=bytes 同时设置读写块的大小为 bytes ,可代替 ibs 和 obs 。
  cbs=bytes 一次转换 bytes 个字节,即转换缓冲区大小。
  skip=blocks 从输入文件开头跳过 blocks 个块后再开始复制。
  seek=blocks 从输出文件开头跳过 blocks 个块后再开始复制。(通常只有当输出文件是磁盘或磁带时才有效)
  count=blocks 仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数。
  conv=conversion[,conversion...]
  用指定的参数转换文件。
  转换参数:
  ascii 转换 EBCDIC 为 ASCII。
  ebcdic 转换 ASCII 为 EBCDIC。
  ibm 转换 ASCII 为 alternate EBCDIC.
  block 把每一行转换为长度为 cbs 的记录,不足部分用空格填充。
  unblock
  使每一行的长度都为 cbs ,不足部分用空格填充。
  lcase 把大写字符转换为小写字符。
  ucase 把小写字符转换为大写字符。
  swab 交换输入的每对字节。
  noerror出错时不停止。
  notrunc不截短输出文件。
  sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。
  由于 dd 命令允许二进制方式读写,所以特别适合在原始物理设备上进行输入/输出。例如可以用下面的命令为软盘建立镜像文件:
  dd if=/dev/fd0 of=disk.img bs=1440k
  有趣的是,这个镜像文件能被 HD-Copy ,Winimage 等工具软件读出。再如把第一个硬盘的前 512 个字节存为一个文件:
  dd if=/dev/hda of=disk.mbr bs=512 count=1



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics