linux设备驱动模型实例代码以及原理性文章

static struct kobject *parent, *child;
static struct kset *c_kset;
static unsigned long flag = 1;
static ssize_t att_show(struct kobject *kobj, struct attrribute *attr, char *buf)
{
    size_t count = 0;
	count += sprintf(&buf[count], "%lu\n", flag);
	return count;
}
static ssize_t att_store(struct kobject *kobj, struct attribute *attr, const char *buf, size_t count)
{
	flag = buf[0] - '0';
	//通过kobject_uevent来将内核对象kobj的状态变化通知用户程序
	switch(flag) {
	case 0:
		kobject_uevent(kobj, KOBJ_ADD);
		break;
	case 1:
		kobject_uevent(kobj, KOBJ_REMOVE);
		break;
	case 2:
		kobject_uevent(kobj, KOBJ_CHANGE);
		break;
	case 3:
		kobject_uevent(kobj, KOBJ_MOVE);
		break;
	case 4:
		kobject_uevent(kobj, KOBJ_ONLINE);
		break;
	case 5:
		kobject_uevent(kobj, KOBJ_OFFLINE);
		break;
	}
	return count;
}
static struct attribute cld_att = {
	.name = "cldatt",
	.mode = S_IRUGO | S_IWUSR,
};
static const struct sysfs_ops att_ops = {
	.show = att_show,
	.store = att_store,
};
static struct kobj_type cld_ktype = {
	.sysfs_ops = &att_ops,
};
static int kobj_demo_init(void)
{
	int err;
	parent = kobject_create_and_add("pa_obj", NULL);
	
	child = kzalloc(sizeof(*child), GFP_KERNEL);
	if (!child)
		return child;
	
	//一个能够通知用户空间状态变化的kobject必须隶属于某一个kset, 也就是所谓的
	//subsystem, 所以此处给内核对象child创建一个kset对象c_kset
	c_kset = kset_create_and_add("c_kset", NULL, parent);
	if (!c_kset)
		return -1;
	
	child->kset = c_kset;
	
	err = kobject_init_and_add(child, &cld_ktype, parent, "cld_obj");
	if (err)
		return err;
	
	//为内核对象child创建一个属性文件
	err = sysfs_create_file(child, &cld_att);
	return err;
}
static void kobj_demo_exit(void)
{
	sysfs_remove_file(child, &cld_att);
	
	kset_unregister(c_kset);
	kobject_del(child);
	kobject_del(parent);
}
module_init(kobj_demo_init);
module_exit(kobj_demo_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("dennis chen@AMDLinuxFGL");
MODULE_DESCRIPTION("A simple kernel module to demo the kobject behavior");
obj-m := kobj_demo.o
KDIR := /home/zlx/S5-driver/lesson7/linux-ok6410
all:
	make -C $(KDIR) M=$(PWD) modules CROSS_COMPILE=arm-linux- ARCH=arm
clean:
	rm -f *.ko *.o *.mod.o *.mod.c *.symvers *.bak *.order**

详解Linux2.6内核中基于platform机制的驱动模型
http://blog.csdn.net/davion_zhang/article/details/46697821
Linux Platform总线+SPI总线分析
http://blog.csdn.net/davion_zhang/article/details/46813785

Linux设备模型浅析之设备篇
https://wenku.baidu.com/view/cbe7d263f5335a8102d220c8.html

Linux设备模型——设备驱动模型和sysfs文件系统解读
https://blog.csdn.net/yj4231/article/details/7799245

Linux设备模型浅析之uevent篇
http://blog.chinaunix.net/uid-14163325-id-64567.html

Linux设备驱动之Kobject、Kset
https://blog.csdn.net/lizuobin2/article/details/51523693

Linux 设备总线驱动模型 这篇文章很不错,好好学习
https://blog.csdn.net/lizuobin2/article/details/51570196

关于linux设备模型kobject,kset,ktype
https://blog.csdn.net/gdt_A20/article/details/6424597?utm_source=blogxgwz1

嵌入式Linux驱动笔记(十六)------设备驱动模型(kobject、kset、ktype)
https://blog.csdn.net/Guet_Kite/article/details/78368928?utm_source=blogxgwz0

linux设备驱动模型
https://blog.csdn.net/column/details/linux-driver-study.html

linux设备驱动模型一三基础结构之Kset
https://blog.csdn.net/new_abc/article/details/7559732

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值