Linux kernel -- 设备驱动模型

0. 基于Linux kernel 2.6.xx

1. kset的测试使用

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kobject.h>
#include <linux/sysfs.h>

static struct kset kset_p;
static struct kset kset_c;

static int kset_filter(struct kset *kset, struct kobject *kobj)
{
	printk("Filter kobj %s.\n", kobj->name);
	return 1;
}

static const char *kset_name(struct kset *kset, struct kobject *kobj)
{
	static char buf[20];

	printk(KERN_ALERT"Name: kobj %s.\n", kobj->name);
	sprintf(buf, "%s", "kset_name");

	return buf;
}

static int kset_uevent(struct kset *kset, struct kobject *kobj, struct kobj_uevent_env *env)
{
	int i = 0;

	printk("uevent: kobj %s.\n", kobj->name);

	while (i < env->envp_idx) {
		printk("%s.\n", env->envp[i]);
		i++;
	}

	return 0;
}

static struct kset_uevent_ops uevent_ops = {
	.filter = kset_filter,
	.name   = kset_name,
	.uevent = kset_uevent,
};
static struct kobj_type my_kobj_type; /* 规避kernel oops bug */
static int __init kset_test_init(void)
{
	int err = 0;

	printk(KERN_ALERT"kset test init.\n");
	kobject_set_name(&kset_p.kobj, "kset_p");
	kset_p.uevent_ops = &uevent_ops;
	kset_p.kobj.ktype = &my_kobj_type;
	err = kset_register(&kset_p);
	if (err)
		return err;

	kobject_set_name(&kset_c.kobj, "kset_c");
	kset_c.uevent_ops = &uevent_ops;
	kset_c.kobj.ktype = &my_kobj_type;
	err = kset_register(&kset_c);
	if (err)
		return err;

	return 0;
}

static void kset_test_exit(void)
{
	printk(KERN_ALERT"kset test exit.\n");
	kset_unregister(&kset_p);
	kset_unregister(&kset_c);
}

module_init(kset_test_init);
module_exit(kset_test_exit);
MODULE_LICENSE("GPL");
执行命令insmod kset_test,ko会发现/sys/kset_p/和/sys/kset_c/两个目录,印证了一个kset对应sysfs中的一个目录。
参考:

http://www.cnblogs.com/sky-zhang/archive/2012/05/28/2521497.html

 http://blog.chinaunix.net/uid-27664726-id-3334662.html

Unknown symbol platform_device_put 问题

2013年02月08日 ⁄ 综合⁄ 共 592字 ⁄ 字号 小 中 大 ⁄ 评论关闭

 

写驱动遇到的问题

[15549.220492] platdevice: Unknown symbol platform_device_put (err 0)

[15549.224237] platdevice: Unknown symbol platform_device_unregister (err 0)

[15549.224315] platdevice: Unknown symbol platform_device_add (err 0)

[15549.224982] platdevice: Unknown symbol platform_device_alloc (err 0)

[15715.445864] platdevice: Unknown symbol platform_device_put (err 0)

[15715.445942] platdevice: Unknown symbol platform_device_unregister (err 0)

[15715.446018] platdevice: Unknown symbol platform_device_add (err 0)

[15715.446092] platdevice: Unknown symbol platform_device_alloc (err 0)

 

解决:

缺少

MODULE_AUTHOR("hacktao");

MODULE_LICENSE("Dual BSD/GPL");


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值