一,驱动文件的编写,将文件的名字命名为globalvar.c ,源码如下:
#include <linux/module.h> //支持动态加载和卸载模块的头文件
#include <linux/init.h> //最基本的头文件,内核初始化
#include <linux/fs.h> //文件系统头文件,包括设备注册函数和注销函数等
#include <asm/uaccess.h> //声明了在内核代码和用户空间之间移动数据的函数的头文件
MODULE_LICENSE("GPL"); //模块许可证
#define MAJOR_NUM 1025 //主设备号
#define DEVICE_NAME "globalvar" //设备名称
static char drv_buf[1024];
//****************************定义read方法********************************
static ssize_t globalvar_read(struct file *filp, const char *buf ,ssize_t len, loff_t *off)
{
//将drv_buf里的数据从内核空间复制到用户空间
if (copy_to_user(buf, drv_buf, sizeof(int)))
{
return - EFAULT;
}
return sizeof(int);
}
//***************************定义write方法**********************
static ssize_t globalvar_write(struct file *filp,const char *buf,ssize_t len)
{
//将用户空间的数据复制到内核空间
if (copy_from_user(drv_buf, buf, sizeof(int)))
{
return - EFAULT;
}
return sizeof

本文介绍了如何从零开始编写Linux内核驱动,以globalvar为例,涵盖了驱动文件编写、Makefile配置、模块编译、模块加载、测试程序创建以及设备操作的过程。通过insmod加载模块并验证,最后使用mknod建立设备节点,并通过测试程序实现数据交换。
最低0.47元/天 解锁文章
916

被折叠的 条评论
为什么被折叠?



