目录
一、模块工程
1.创建驱动模块
2.模块编译
二、运行
在传统的Linux驱动开发中,一般是以Linux内核为基础进行模块编译,但是以petalinux创建的工程系统,并没有找到对应的内核源码,不过赛灵思的官网肯定能找得到的。
这里直接使用 petalinux 工具进行驱动的编写,而不使用在内核源码目录下进行编译,只不过 Petalinux 编译有点慢。
关于字符设备驱动开发相关内容可参考:字符设备驱动开发 这里是记录petalinux工具的使用。
一、模块工程 1.创建驱动模块petalinux-create -t modules --name chrdevbase --enable
注意要在原来搭建Linux系统下创建驱动模块,并且要使能相关petalinux的环境变量
执行该指令后, 会创建一个内核模块,工具会自动在project-spec/meta-user/recipes-modules下创建chrdevbase设备模块。
进入chrdevbase目录
然后进入files,在该目录下所有驱动相关的配置都已经配置好了,我们只需要修改chrdevbase.c文件,完成驱动开发。
打开chrdevbase.c文件替换成如下内容
#include
#include
#include
#include
#include
#include
#define CHRDEVBASE_MAJOR 200 // 主设备号
#define CHRDEVBASE_NAME "chrdevbase" //设备名字
static char readbuf[100];
static char writebuf[100];
static char kerneldata[]={"kernel data!"};
static int chrdevbase_open(struct inode* inode,struct file* filp)
{
printk("chrdevbase open!\r\n");
return 0;
}
static ssize_t chrdevbase_read(struct file* filp,char __user *buf,size_t cnt,loff_t* offt)
{
int retvalue=0;
printk("chrdevbase read\r\n");
memcpy(readbuf,kerneldata,sizeof(kerneldata));
retvalue=copy_to_user(buf,readbuf,cnt);
if(retvalue==0)
{
printk("kernel send data ok!\r\n");
}
else
{
printk("kernel send data failed\e\n");
}
return 0;
}
static ssize_t chrdevbase_write(struct file* filp,const char __user *buf,size_t cnt,loff_t* offt)
{
int retvalue=0;
printk("chrdevbase write\r\n");
retvalue=copy_from_user(writebuf,buf,cnt);
if(retvalue==0)
{
printk("kernel recv data:%s\r\n",writebuf);
}
else
{
printk("kernel recv data failed\r\n");
}
return 0;
}
static int chrdevbase_release(struct inode* inode,struct file* filp)
{
printk("chrdevbase release\r\n");
return 0;
}
static struct file_operations chrdevbase_fops={
.owner=THIS_MODULE,
.open=chrdevbase_open,
.read=chrdevbase_read,
.write=chrdevbase_write,
.release=chrdevbase_release,
};
static int __init chrdevbase_init(void)
{
int retvalue=0;
printk("chrdevbase character device init\r\n");
retvalue=register_chrdev(CHRDEVBASE_MAJOR,CHRDEVBASE_NAME,&chrdevbase_fops);
if(retvalue
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?