sys/class文件节点的制作

制作一个/sys/class/下的文件节点;

1. 定义变量

struct class *oled_bklight_class;
struct device *oled_bklight_dev;

2.  定义需要操作的函数;

static ssize_t oled_bklight_show(struct device *dev,
                                     struct device_attribute *attr, char *buf)
{
    return sprintf(buf, "%s ok\n", __func__);
}


static ssize_t oled_bklight_store(struct device *dev,
                                      struct device_attribute *attr, const char *buf, size_t size)
{
    switch (buf[0])
    {
    case '0':
        printk(KERN_INFO "%s: turn off bklight\n", __func__);
        ssd1305fb_full_screen(global_par, 0);
        gpio_set_value(global_par->bklight, 0);
        break;
    case '1':
        printk(KERN_INFO "%s: turn on bklight\n", __func__);
        ssd1305fb_update_display(global_par);
        gpio_set_value(global_par->bklight, 1);
        break;
    default:
        printk(KERN_INFO "%s: err paramater\n", __func__);
        break;
    }
    return size;
}

static struct device_attribute oled_bklight_on_off_attr = {
	.attr = {
		.name = "oled_bklight_on_off",
		.mode = S_IRUSR | S_IWUSR,
	},
	.show = oled_bklight_show,
	.store = oled_bklight_store,
};


3.  创建节点:

    oled_bklight_class = class_create(THIS_MODULE, "oled_bklight");
    if (IS_ERR(oled_bklight_class))
    {
        dev_err(&client->dev, "Failed to create class!\n");
    }
    oled_bklight_dev = device_create(oled_bklight_class, NULL, 0, NULL, "enable");
    if (device_create_file(oled_bklight_dev, &oled_bklight_on_off_attr) < 0)
    {
        dev_err(&client->dev, "Failed to create device file(%s)!\n", oled_bklight_on_off_attr.attr.name);
    }

4. remove掉创建的节点:

    device_create_file(oled_bklight_dev, &oled_bklight_on_off_attr);
    device_destroy(oled_bklight_class, 0);
    class_destroy(oled_bklight_class);



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在 Linux 内核中,PWM 驱动程序通常会通过设备树(Device Tree)来描述硬件的信息,包括 PWM 控制器的地址、中断、时钟等。驱动程序会解析设备树,并根据设备树中描述的信息来初始化 PWM 控制器。在设备树中,PWM 控制器通常会被描述为一个 platform 设备,而 /sys/class/pwm/ 节点则是通过 platform 设备注册到系统中的。 当 PWM 控制器被成功初始化后,驱动程序会调用 sysfs 接口来注册 /sys/class/pwm/ 节点。具体来说,驱动程序会调用 pwmchip_add() 函数来注册 PWM 控制器,并在此过程中创建 /sys/class/pwm/ 节点。该函数会将 PWM 控制器作为一个 PWM chip 注册到内核 PWM 子系统中,并分配一个唯一的编号(PWM chip ID),该编号可以用于在 sysfs 中访问 PWM 控制器。例如,/sys/class/pwm/pwmchip0/ 目录下的文件就对应着 PWM chip ID 为 0 的 PWM 控制器。在 /sys/class/pwm/pwmchipX/ 目录下,还会有一个叫做 export 的文件,通过向该文件写入 PWM 通道号,可以将该 PWM 通道导出为一个独立的 PWM 设备,此时会在 /sys/class/pwm/pwmchipX/ 目录下创建一个名为 pwmY 的目录,表示导出的 PWM 设备。例如,向 /sys/class/pwm/pwmchip0/export 文件写入 0,就可以将 PWM chip ID 为 0 的 PWM 控制器的第一个 PWM 通道导出为一个独立的 PWM 设备,此时会在 /sys/class/pwm/pwmchip0/ 目录下创建一个名为 pwm0 的目录。在该目录下,可以通过 sysfs 接口来配置该 PWM 通道的参数,例如占空比、周期等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值