Chinaunix首页 | 论坛 | 博客
  • 博客访问: 36537
  • 博文数量: 8
  • 博客积分: 1415
  • 博客等级: 上尉
  • 技术积分: 100
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-17 23:30
文章分类
文章存档

2011年(1)

2009年(7)

我的朋友

分类:

2009-12-10 11:22:16

在学习LDD过程中,发现自己要写一个驱动程序很麻烦,老是要做重复的工作。于是在scull驱程的基础上写了一个shell脚本,用以生成新驱程的Makefile, load脚本, unload脚本及主要的.c文件。

在ModuleScripts下有5个文件:
- genmod.sh 
- module_load 
- module_make 
- module_src 
- module_unload

进入ModuleScripts目录,运行./genmod.sh NEW_MODULE_NAME,会生成包含驱动程序各种文件的新目录,如下:
jackz@jackz-laptop:~/ModuleScipts$ ./genmod.sh chardev
jackz@jackz-laptop:~/ModuleScipts$ ls
chardev  genmod.sh  module_load  module_make  module_src  module_unload

可以看到生成了新目录chardev.进入chardev目录,运行make:
jackz@jackz-laptop:~/ModuleScipts/chardev$ ls
chardev.c  chardev_load.sh  chardev_unload.sh  Makefile
jackz@jackz-laptop:~/ModuleScipts/chardev$ make

看看生成的.ko文件:
jackz@jackz-laptop:~/ModuleScipts/chardev$ ls
chardev.c   chardev_load.sh  chardev.mod.o  chardev_unload.sh  Module.symvers
chardev.ko  chardev.mod.c    chardev.o      Makefile

好,现在把新模块加入内核:
jackz@jackz-laptop:~/ModuleScipts/chardev$ sudo ./chardev_load.sh
jackz@jackz-laptop:~/ModuleScipts/chardev$ lsmod | grep chardev
chardev                 3976  0
jackz@jackz-laptop:~/ModuleScipts/chardev$ cat /proc/devices | grep chardev
252 chardev
jackz@jackz-laptop:~/ModuleScipts/chardev$ ls -l /dev/chardev
crw-rw-r-- 1 root staff 252, 0 2009-12-10 11:08 /dev/chardev
从上面输出可以看出,chardev_load脚本把chardev加载入内核,并建立了设备文件/dev/chardev。

把新模块从内核中删除:
jackz@jackz-laptop:~/ModuleScipts/chardev$ sudo ./chardev_unload.sh

在所生成的chardev.c中,已经写好了一个字符设备驱动的框架,默认情况下这个设备什么也不做,只是提供了init, exit函数,及file_operations的接口open, release, read, write,可以根据需要往这个文件添加代码。

这个脚本在Ubuntu 8.04 (linux-2.6.24)上测试通过。

文件:ModuleScipts.tar.gz
大小:2KB
下载:下载




阅读(993) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~