This commit is contained in:
unknown 2022-01-06 23:00:33 +08:00
parent 1ef2324dc8
commit 0126dfe8c9
5 changed files with 26 additions and 52 deletions

View File

@ -18,15 +18,16 @@
static char tx_data[16] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}; static char tx_data[16] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};
static char rx_data[16] = {0}; static char rx_data[16] = {0};
static struct kobject *w25qxx_kobj; //定义一个led_kobj
struct spi_transfer xfer; struct spi_transfer xfer;
struct spi_device *w25qxx_spi; //保存spi设备结构体 struct spi_device *w25qxx_spi; //保存spi设备结构体
static ssize_t w25qxx_show(struct kobject* kobjs,struct kobj_attribute *attr,char *buf)
static ssize_t w25qxx_show(struct device *dev,struct device_attribute *attr,char *buf)
{ {
return sprintf(buf,"read status register=%d\n",rx_data[0]); return sprintf(buf,"read status register=%d\n",rx_data[0]);
} }
static ssize_t w25qxx_store(struct kobject *kobj, struct kobj_attribute *attr,const char *buf, size_t count) static ssize_t w25qxx_store(struct device *dev,struct device_attribute *attr,const char *buf, size_t count)
{ {
int ret; int ret;
int erase_addr=0x123456; int erase_addr=0x123456;
@ -45,7 +46,7 @@ static ssize_t w25qxx_store(struct kobject *kobj, struct kobj_attribute *attr,co
return count; return count;
} }
static struct kobj_attribute w25qxx_attr = __ATTR(w25q128_dev,0660,w25qxx_show,w25qxx_store); static DEVICE_ATTR(w25q128, 0660, w25qxx_show, w25qxx_store); //定义文件属性
static void w25qxx_init(void) static void w25qxx_init(void)
{ {
@ -59,13 +60,7 @@ static void w25qxx_init(void)
static int w25qxx_probe(struct spi_device *spi) static int w25qxx_probe(struct spi_device *spi)
{ {
int ret; int ret;
w25qxx_kobj = kobject_create_and_add("sys_w25qxx",NULL); ret = device_create_file(&spi->dev,&dev_attr_w25q128);//创建属性文件
if(w25qxx_kobj == NULL)
{
printk(KERN_INFO"create w25qxx_kobj failed!\n");
return -1;
}
ret = sysfs_create_file(w25qxx_kobj, &w25qxx_attr.attr);
if(ret != 0) if(ret != 0)
{ {
printk(KERN_INFO"create w25q128_dev file failed!\n"); printk(KERN_INFO"create w25q128_dev file failed!\n");
@ -78,8 +73,7 @@ static int w25qxx_probe(struct spi_device *spi)
static int w25qxx_remove(struct spi_device *spi) static int w25qxx_remove(struct spi_device *spi)
{ {
sysfs_remove_file(w25qxx_kobj, &w25qxx_attr.attr); //删除属性 device_remove_file(&spi->dev,&dev_attr_w25q128);//删除属性文件
kobject_put(w25qxx_kobj); //删除对象
printk(KERN_INFO "exit sysfs w25qxx!\n"); printk(KERN_INFO "exit sysfs w25qxx!\n");
return 0; return 0;
} }

View File

@ -13,10 +13,9 @@
#include <linux/sysfs.h> //包含sysfs操作文件函数 #include <linux/sysfs.h> //包含sysfs操作文件函数
static char recv[16] = {0}; //保存接收数据 static char recv[16] = {0}; //保存接收数据
static struct kobject *at24c02_kobj; //定义一个led_kobj
struct i2c_client *at24c02_dev; //定义一个i2c设备结构体指针 struct i2c_client *at24c02_dev; //定义一个i2c设备结构体指针
static ssize_t at24c02_show(struct kobject* kobjs,struct kobj_attribute *attr,char *buf) static ssize_t at24c02_show(struct device *dev,struct device_attribute *attr,char *buf)
{ {
int ret; int ret;
ret = i2c_smbus_write_byte(at24c02_dev,0x02); //先发写地址操作 ret = i2c_smbus_write_byte(at24c02_dev,0x02); //先发写地址操作
@ -28,7 +27,7 @@ static ssize_t at24c02_show(struct kobject* kobjs,struct kobj_attribute *attr,ch
return sprintf(buf,"read data = 0x%x\n",recv[0]); return sprintf(buf,"read data = 0x%x\n",recv[0]);
} }
static ssize_t at24c02_store(struct kobject *kobj, struct kobj_attribute *attr,const char *buf, size_t count) static ssize_t at24c02_store(struct device *dev,struct device_attribute *attr,const char *buf, size_t count)
{ {
int ret; int ret;
char data = 0x2f; char data = 0x2f;
@ -40,18 +39,13 @@ static ssize_t at24c02_store(struct kobject *kobj, struct kobj_attribute *attr,c
return count; return count;
} }
static struct kobj_attribute at24c02_attr = __ATTR(at24c02_dev,0660,at24c02_show,at24c02_store); static DEVICE_ATTR(at24c02, 0660, at24c02_show, at24c02_store); //定义文件属性
static int at24c02_probe(struct i2c_client *client, const struct i2c_device_id *id) static int at24c02_probe(struct i2c_client *client, const struct i2c_device_id *id)
{ {
int ret; int ret;
at24c02_kobj = kobject_create_and_add("sys_at24c02",NULL); ret = device_create_file(&client->dev,&dev_attr_at24c02);//创建属性文件
if(at24c02_kobj == NULL)
{
printk(KERN_INFO"create at24c02_kobj failed!\n");
return -1;
}
ret = sysfs_create_file(at24c02_kobj, &at24c02_attr.attr);
if(ret != 0) if(ret != 0)
{ {
printk(KERN_INFO"create at24c02_dev file failed!\n"); printk(KERN_INFO"create at24c02_dev file failed!\n");
@ -63,8 +57,7 @@ static int at24c02_probe(struct i2c_client *client, const struct i2c_device_id *
static int at24c02_remove(struct i2c_client *client) static int at24c02_remove(struct i2c_client *client)
{ {
sysfs_remove_file(at24c02_kobj, &at24c02_attr.attr); //删除属性 device_remove_file(&client->dev,&dev_attr_at24c02);//删除属性文件
kobject_put(at24c02_kobj); //删除对象
printk(KERN_INFO "exit sysfs at24c02!\n"); printk(KERN_INFO "exit sysfs at24c02!\n");
return 0; return 0;
} }

View File

@ -13,7 +13,6 @@
#include <linux/sysfs.h> //包含sysfs操作文件函数 #include <linux/sysfs.h> //包含sysfs操作文件函数
#include <linux/regmap.h> #include <linux/regmap.h>
static struct kobject *oled_kobj; //定义一个led_kobj
static struct regmap *oled_regmap; static struct regmap *oled_regmap;
@ -126,30 +125,24 @@ static const struct regmap_config oled_config =
.volatile_reg = false, .volatile_reg = false,
}; };
static ssize_t oled_show(struct kobject* kobjs,struct kobj_attribute *attr,char *buf) static ssize_t oled_show(struct device *dev,struct device_attribute *attr,char *buf)
{ {
oled_off(); oled_off();
return 1; return 1;
} }
static ssize_t oled_store(struct kobject *kobj, struct kobj_attribute *attr,const char *buf, size_t count) static ssize_t oled_store(struct device *dev,struct device_attribute *attr,const char *buf, size_t count)
{ {
oled_fill_screen(*buf); oled_fill_screen(*buf);
return count; return count;
} }
static struct kobj_attribute oled_attr = __ATTR(oled_dev,0660,oled_show,oled_store); static DEVICE_ATTR(oled, 0660, oled_show, oled_store); //定义文件属性
static int oled_probe(struct i2c_client *client, const struct i2c_device_id *id) static int oled_probe(struct i2c_client *client, const struct i2c_device_id *id)
{ {
int ret; int ret;
oled_kobj = kobject_create_and_add("sys_oled",NULL); ret = device_create_file(&client->dev,&dev_attr_oled);//创建属性文件
if(oled_kobj == NULL)
{
printk(KERN_INFO"create oled_kobj failed!\n");
return -1;
}
ret = sysfs_create_file(oled_kobj, &oled_attr.attr);
if(ret != 0) if(ret != 0)
{ {
printk(KERN_INFO"create oled_dev file failed!\n"); printk(KERN_INFO"create oled_dev file failed!\n");
@ -162,8 +155,7 @@ static int oled_probe(struct i2c_client *client, const struct i2c_device_id *id)
static int oled_remove(struct i2c_client *client) static int oled_remove(struct i2c_client *client)
{ {
sysfs_remove_file(oled_kobj, &oled_attr.attr); //删除属性 device_remove_file(&client->dev,&dev_attr_oled);//删除属性文件
kobject_put(oled_kobj); //删除对象
regmap_exit(oled_regmap); regmap_exit(oled_regmap);
printk(KERN_INFO "exit sysfs oled!\n"); printk(KERN_INFO "exit sysfs oled!\n");
return 0; return 0;

View File

@ -15,15 +15,16 @@
#include <linux/string.h> #include <linux/string.h>
#include <linux/gpio.h> //包含gpio一些宏 #include <linux/gpio.h> //包含gpio一些宏
static struct kobject *led_kobj; //定义一个led_kobj
struct gpio_desc *led_pin; //gpio资源 struct gpio_desc *led_pin; //gpio资源
static ssize_t led_show(struct kobject* kobjs,struct kobj_attribute *attr,char *buf)
static ssize_t led_show(struct device *dev,struct device_attribute *attr,char *buf)
{ {
return sprintf(buf,"led status=%d\n",gpiod_get_value(led_pin)); return sprintf(buf,"led status=%d\n",gpiod_get_value(led_pin));
} }
static ssize_t led_store(struct kobject *kobj, struct kobj_attribute *attr,const char *buf, size_t count) static ssize_t led_store(struct device *dev,struct device_attribute *attr,const char *buf, size_t count)
{ {
if(0 == memcmp(buf,"on",2)) if(0 == memcmp(buf,"on",2))
{ {
@ -40,18 +41,13 @@ static ssize_t led_store(struct kobject *kobj, struct kobj_attribute *attr,const
return count; return count;
} }
static struct kobj_attribute led_attr = __ATTR(led_dev,0660,led_show,led_store); static DEVICE_ATTR(led, 0660, led_show, led_store); //定义文件属性
static int led_probe(struct platform_device *pdev) static int led_probe(struct platform_device *pdev)
{ {
int ret; int ret;
led_kobj = kobject_create_and_add("sys_led",NULL); ret = device_create_file(&pdev->dev,&dev_attr_led);//创建属性文件
if(led_kobj == NULL)
{
printk(KERN_INFO"create led_kobj failed!\n");
return -1;
}
ret = sysfs_create_file(led_kobj,&led_attr.attr);
if(ret != 0) if(ret != 0)
{ {
printk(KERN_INFO"create w25q128_dev file failed!\n"); printk(KERN_INFO"create w25q128_dev file failed!\n");
@ -70,8 +66,7 @@ static int led_probe(struct platform_device *pdev)
static int led_remove(struct platform_device *pdev) static int led_remove(struct platform_device *pdev)
{ {
sysfs_remove_file(led_kobj, &led_attr.attr); //删除属性 device_remove_file(&pdev->dev,&dev_attr_led);//删除属性文件
kobject_put(led_kobj); //删除对象
devm_gpiod_put(&pdev->dev,led_pin); devm_gpiod_put(&pdev->dev,led_pin);
printk(KERN_INFO "exit sysfs sys_led!\n"); printk(KERN_INFO "exit sysfs sys_led!\n");
return 0; return 0;

Binary file not shown.