linux驱动成测试程序,linux驱动编写及测试简要指导

一、首先编写3个文件,分别为

1、下面为一个简单的驱动程序示例,文件名为led.c

#include #include #include #include #include static int led_device_open(struct inode *inode, struct file *file);

static ssize_t led_device_write(struct file *file, const char __user *buf, size_t count, loff_t *f_pos);

static ssize_t led_device_read(struct file *file, char __user *buf,size_t count, loff_t *f_pos);

struct file_operations driver_options = {

.open = led_device_open,

.read = led_device_read,

.write = led_device_write

};

static int device_number = 0;

static int led_device_open(struct inode *inode, struct file *file)

{

printk("led open\n");

return 0;

}

static ssize_t led_device_write(struct file *file, const char __user *buf, size_t count, loff_t *f_pos)

{

printk("led write\n");

return 0;

}

static ssize_t led_device_read(struct file *file, char __user *buf,size_t count, loff_t *f_pos)

{

printk("led read\n");

return 0;

}

MODULE_LICENSE("GPL");

static int __init led_init(void)

{

device_number = register_chrdev(0, "led_drv", &driver_options);

if (device_number < 0)

{

printk("sorry, register char device failed!");

return -1;

}

printk("led driver initialized!\n");

return 0;

}

static void __exit led_exit(void)

{

unregister_chrdev(device_number, "led_drv");

printk("led driver exit!\n");

}

module_init(led_init);

module_exit(led_exit);

2、驱动编译文件 Makefile

KERN_DIR=/lib/modules/4.15.0-43-generic/build

all:

make -C $(KERN_DIR) M=`pwd` modules

clean:

make -C $(KERN_DIR) M=`pwd` modules clean

rm -rf modules.order

obj-m += led.o

注意第一行,为内核源目录,不同版本不同。

示例为unbantu中一个版本。具体哪个版本可以在linux中用uname -a查看

3、驱动测试程序,命名为test_led.c

#include #include #include #include int main(void)

{

int val=1;

printf("this is led drive test\n");

int fd = open("/dev/leddev",O_RDWR);

if(fd<0)

{

printf("can't open led device\n");

}

write(fd, &val, 4);

return 0;

}

二、编译及测试方法

1. 本目录传到linux服务器

2.执行make编译。 编译完成后会生成led.ko文件

3.执行insmod led.ko.   安装驱动程序

4. cat /proc/devices|grep led_drv  查看系统分配的设备号sn。 (注:“led_drv"为led.c中注册的设备名)

三、创建设备文件

1、执行以下命令 ,创建设备文件。(注sn为上一步查到的设备号,为一个整形数字)

mknod leddev c sn 0

2、 复制上一步生成的leddev到/dev 目录

四、测试

1. 执行以下命令,编译测试程序

gcc -o test_led test_led.c

2. 执行下面命令运行测试程序

./test_led

五、内核消息查看及卸载驱动

1. 执行以下命令检查内核消息

dmesg

应当可以看到如下消息内容,中括号内的为时间戳,后面的为led.c中的消息

[1229543.190380] led driver initialized!

[1229550.950369] led open

[1229550.950374] led write

2. 执行 rmmod led (注意此处不用加ko),卸载led.ko驱动.

卸载成功后,dmesg查看内核消息可以看到如下内容

[1228368.334598] led driver exit!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值