字符设备驱动开发实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

字符设备驱动实验
实验步骤:
1、将设备驱动程序使用马克file文件编译
生成模块firstdev.ko
2、将模块加载到系统中insmod firstdev.ko
3、手动创建设备节点
mknod /dev/first c 122 0
4、使用gcc语句编译firsttest.c生成可执行
文件
5、运行可执行文件firsttest,返回驱动程序
中的打印输出语句。

查看设备号:cat /proc/devices
卸载驱动:rmmod firstdev
删除设备节点:rm /dev/first
显示printk语句,(打开一个新的终端)while true
do
sudo dmesg -c
sleep 1
done
源码分析
设备驱动程序firstdev.c
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <asm/irq.h>
//#include <asm/hardware.h>
static int first_dev_open(struct inode *inode, struct file *file)
{
//int i;
printk("this is a test!\n");
return 0;
}
static struct file_operations first_dev_fops ={
.owner = THIS_MODULE,
.open = first_dev_open,
};
static int __init first_dev_init(void)
{
int ret;
ret = register_chrdev(122,"/dev/first",&first_dev_fo ps);
printk("Hello Modules\n");
if(ret<0)
{
printk("can't register major number\n");
return ret;
}
printk("first_dev initialized\n");
return 0;
}
static void __exit first_dev_exit(void)
{
unregister_chrdev(122,"/dev/first");
printk("Bye Modules\n");
}
module_init(first_dev_init);
module_exit(first_dev_exit);
makefile分析:
ifneq ($(KERNELRELEASE),)
obj-m:= firstdev.o
else
KDIR :=/lib/modules/3.13.0-32-generic/build
all:
make -C $(KDIR) M=$(PWD) modules clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers endif
应用程序firsttest.c
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/ioctl.h>
int main()
{
int fd;
fd = open ("/dev/first",0);
if (fd<0)
{
printf("can't open /dev/first");
return -1;
}
close(fd);
return 0; }。

相关文档
最新文档