先把代码贴出来:
#include <linux/crypto.h>
#include <linux/errno.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/device.h>
#include <linux/bitops.h>
#include <asm/unaligned.h>
#include <asm/io.h>
static struct class *led_drv_class;
static struct device *led_drv_class_devs;
volatile unsigned long *PA_BASE_ADDR = NULL;
volatile unsigned long *PA_cfg1 = NULL;
volatile unsigned long *PA_dat = NULL;
static unsigned char kernel_buf[4];
static int led_drv_open(struct inode *inode, struct file *file)
{
//PA11 设置输出模式
*PA_cfg1 &= ~(7 << 12);
*PA_cfg1 |= (1 << 12);
return 0;
}
static ssize_t led_drv_write(struct file *filep, const char __user *buf, size_t count, loff_t *ppos)
{
int ret = 0;
int val = 0;
// 返回错误个数,正确返回0
if (copy_from_user((int *)&val, buf, count)) {
ret = -EFAULT;
} else {
*ppos += count;
ret = count;
}
if (val == 1
NanoPi Duo:构建与测试简单字符设备驱动

本文展示了如何在NanoPi Duo上编写和测试一个简单的字符设备驱动,用于控制LED。驱动代码包括初始化、打开、写入、读取和关闭函数,通过ioremap获取GPIO地址并设置IO输出模式。同时,提供了测试应用程序来开关LED,并说明了驱动的运行流程和操作GPIO的过程。
最低0.47元/天 解锁文章
1940

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



