目的:学习sysfs文件系统,直接在应用层使用cat 和echo命令来控制LED。
===============================================
驱动:
#include <linux/module.h>
#include <asm/uaccess.h>
#include <linux/version.h>
#include <linux/io.h>
#include <linux/gpio.h>
#include <plat/gpio-cfg.h>
#include <mach/regs-gpio.h>
#include <asm/mach/arch.h>
#include <linux/kobject.h>
#include <linux/string.h>
#define GPIO_LED1 S5PV210_GPH1(3)
struct kobject *kobj;
const static char *str_ledon = "ledon";
const static char *str_ledoff= "ledoff";
static ssize_t led_show(struct kobject *kobj, struct kobj_attribute *attr,char *buf )
{
char *s= buf;
int len;
if(gpio_get_value(GPIO_LED1))
s += sprintf(s,"%s\n",str_ledon);
else
s += sprintf(s,"%s\n",str_ledoff);
if (s != buf)
*(s-1) = '\n';
return (s - buf);
}
static ssize_t led_store(struct kobject *kobj,struct kobj_attribute *attr,const char* buf, size_t n)
{
char *p;
int len;
p = memchr(buf, '\n', n);
len = p ? p - buf : n;
printk(KERN_INFO "%s:enter\n",__func__);
s3c_gpio_cfgpin(GPIO_LED1,S3C_GPIO_OUTPUT );
s3c_gpio_setpull(GPIO_LED1,S3C_GPIO_PULL_UP );
if(gpio_request(GPIO_LED1,"led_sysfs")> 0)
{
if(!strncmp(buf,str_ledon,len ))
{
printk(KERN_INFO "%s:1\n",__func__);
gpio_set_value(GPIO_LED1,0);
}
else if(!strncmp(buf,str_ledoff,len ))
{
printk(KERN_INFO "%s:2\n",__func__);
gpio_set_value(GPIO_LED1,1);
}
}
else
printk(KERN_INFO "%s:3\n",__func__);
return len ;
}
//具体属性参数
static struct kobj_attribute kobj_attr ={
.attr = {
.name = __stringify(ledstate), //把ledstate转换成字符串
.mode = 0666, //表示此属性可读可写
},
.show = led_show, //对应读
.store= led_store, //对应写
};
//属性数组
static struct attribute *attr_g[] ={
&kobj_attr.attr,
NULL,// 必须包含NULL
};
//对属性数组的封装。
static struct attribute_group grp ={
.attrs = attr_g,
};
static int __init led_init(void)
{
kobj = kobject_create_and_add("led_sysfs",NULL);
if(!kobj )
{
printk(KERN_INFO "kobject don't create \n");
return -ENOMEM;
}
return sysfs_create_group(kobj, &grp);
}
static void __exit led_exit(void)
{
printk(KERN_INFO "%s:enter\n",__func__);
sysfs_remove_group(kobj, &grp);
kobject_del(kobj);
}
module_init(led_init);
module_exit(led_exit);
MODULE_LICENSE("GPL");
Makefile:
OBJ = /home/xhy/kernel
all :
make -C $(OBJ) M=`pwd` modules
clean:
make -C $(OBJ) M=`pwd` clean
obj-m += led_sysfs.o
--------------------------------------------------
make后把生成的led_sysfs.ko文件push到小机上,
adb shell
insmod led_sysfs.ko
cd /sys/
# lsmod
led_sysfs 1432 0 - Live 0xbf02a000
cd led_sysfs
# cat ledstate
ledoff
分享到:
相关推荐
在Android系统中,驱动程序通常通过`sysfs`文件系统暴露给用户空间,用户可以通过读写特定的系统文件来控制LED。例如,创建一个`/sys/class/leds/led_name`目录结构,其中`led_name`是LED的标识。 在"android驱动...
一旦驱动加载,用户空间应用程序可以通过sysfs文件系统与LED驱动进行交互。sysfs会在`/sys/class/leds`目录下创建相应的设备节点,如`/sys/class/leds/my_led`,用户可以通过读写`brightness`文件来控制LED的亮度,...
Yaffs2 文件系统提供了一个快速稳定的文件存储机制,允许 Android 设备快速读写 NAND Flash 存储器。 Android 内核添加或修改的文件很多,下面的列表描述了 Android Emulator 内核的文件: drivers/misc/kernel_...
11. Yaffs2 文件系统:Android 采用 Yaffs2 作为 MTD nand flash 文件系统,源代码位于 fs/yaffs2/ 目录下。 Yaffs2 是一个快速稳定的应用于 NAND 和 NOR Flash 的跨平台的嵌入式设备文件系统,使用更小的内存来...
总的来说,基于i.MX6Q-C开发板的LED驱动程序涉及硬件控制、内核驱动编程、设备树配置以及Android系统的集成。理解和调试这样的驱动程序有助于提升对嵌入式系统底层运作的掌握,从而更好地定制和优化硬件功能。
驱动程序会注册到内核的LED子系统,以便用户空间可以通过`sysfs`文件系统或特定的服务接口与之交互。 2. **yu6h主板**:描述中提到的`yu6h`可能是某个特定的Android设备主板型号。每个主板可能会有自己独特的硬件...
在Linux系统下,这通常通过sysfs文件系统或者设备树overlay(设备树片段,用于配置硬件资源)来实现。 具体实现步骤可能包括: 1. **配置GPIO**:在内核中配置GPIO引脚为输出模式,通常通过修改设备树源文件或加载...
这通常涉及到编写或修改相关的驱动程序,使得可以通过特定的接口(如sysfs文件系统)来控制LED的状态。 ```c #include #include #include #include #include static dev_t led_dev; static struct cdev led_...
在JNI中,我们需要操作Linux的sysfs文件系统或者直接调用Ioctl函数来配置和控制PWM通道。这包括设置频率、占空比等参数,进而控制硬件设备如电机的速度或LED的亮度。 3. **ADC转换**:ADC用于将模拟信号转换为数字...
在Android操作系统中,LED驱动是设备硬件与上层软件之间的一个关键接口,负责控制设备上的各种LED灯,如通知灯、背光等。`android_leds_hal`是Android系统中LED硬件抽象层(Hardware Abstraction Layer)的具体实现...
在实际项目中,LED的控制可能会集成到更复杂的驱动程序或操作系统内核模块中,例如在Linux系统下,可能需要编写设备树节点、驱动模块等。但基本的控制逻辑仍然与上述示例类似,只是操作方式会有所不同,比如使用`...
开发者可以通过`sysfs`文件系统或ioctl调用来与GPIO驱动进行通信。 2. **Android HAL**:在Android系统中,GPIO的管理主要由`libhardware`库实现,它定义了`IGpio`接口。MTK6737平台会有一个对应的硬件模块实现这个...
此外,Linux内核也提供了sysfs文件系统,将PWM设备的属性映射为文件,通过读写这些文件来改变PWM的设置。 6. **电源管理**:PWM在电源管理中起着重要作用,比如动态调整LED亮度或电机速度。Linux内核的PM子系统可以...
在Android系统中,"backlight"一词通常指的是设备的屏幕背光控制。这个压缩包文件"backlight.zip"很可能包含与Android操作系统源代码中背光管理相关的组件和配置文件。接下来,我们将深入探讨Android源码中的背光...
这些知识点对于在Rockchip平台的Android 9.0操作系统上进行LED灯控制的配置工作至关重要。开发者需要根据具体的硬件设计和需求,编写正确的DTS文件,并通过sysfs接口与硬件进行交互,从而实现对LED灯的有效管理。
3. **用户空间通信**:通过sysfs或者input子系统将按键事件传递给用户空间。 #### 七、振动电机驱动设计及实现 振动电机驱动负责控制设备的振动反馈,提升用户体验。具体实现包括: 1. **硬件连接**:连接振动...
描述“基于s3c2440下的linux 下的背光驱动程序”表明,这个驱动程序专为三星的S3C2440微处理器设计,该处理器广泛应用于各种嵌入式系统,特别是早期的Android设备。Linux内核支持这样的硬件,允许开发者编写特定的...