【Tiny6410 And Linux】—(1.2)—kset——代码
来源:互联网 发布:plc多功能编程线 编辑:程序博客网 时间:2024/05/16 14:57
昨天做实验的时候没有成功,真的挺烦的,我怕我继续不下去,不过今天阳光挺好的,心情也就好点了,所以也就可以好好看看了!!
竟然在 kset 的创建过程中,新版内核跟老板内核还是有差距的,其中 ktype 在新版内核中是必须要加的,(*^__^*) 嘻嘻……
1、驱动程序
①、kset.c
#include <linux/device.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/init.h>#include <linux/string.h>#include <linux/sysfs.h>#include <linux/stat.h>#include <linux/kobject.h>MODULE_AUTHOR("_Justin");MODULE_LICENSE("GPL");struct kset *kset_p;//struct kset *kset_c;//struct kset kset_p;struct kset kset_c;/* 函数声明 */void obj_test_release(struct kobject *);ssize_t kobj_test_show(struct kobject *,struct attribute *,char *);ssize_t kobj_test_store(struct kobject *,struct attribute *,const char *,size_t);static struct attribute test_attr ={ .name = "kobj_config", .mode = S_IRWXUGO,};static struct attribute *def_attrs[] ={ &test_attr, NULL,};static struct sysfs_ops obj_test_sysops ={ .show = kobj_test_show, .store = kobj_test_store,};static struct kobj_type ktype ={ .release = obj_test_release, .sysfs_ops = &obj_test_sysops, .default_attrs = def_attrs,};void obj_test_release(struct kobject *kobject){ printk("[kobj_test: release!]\n");}ssize_t kobj_test_show(struct kobject *kobject,struct attribute *attr,char *buf){ printk("Have show -->\n"); printk("attrname: %s.\n",attr->name); sprintf("buf,%s\n",attr->name); return strlen(attr->name) + 2;}ssize_t kobj_test_store(struct kobject *kobject,struct attribute *attr, const char *buf,size_t size){ printk("Have store -->\n"); printk("write: %s.\n",buf); return size;}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("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 int __init kset_test_init(void){int ret = 0;printk("kset test init!\n");/* 创建并注册 kset_p */kset_p = kset_create_and_add("kset_p",&uevent_ops,NULL);//kobject_set_name(&kset_p.kobj,"kset_p");//kset_p.uevent_ops = &uevent_ops;//kset_p.kobj.parent = NULL;//kset_register(&kset_p);/* 添加 kset_c 到 kset_p */kobject_set_name(&kset_c.kobj,"kset_c");kset_c.kobj.kset = kset_p;/* 对于较新版本的内核,在注册 kset 之前,需要 * 填充 kset.kobj 的 ktype 成员,否则注册不会成功 */kset_c.kobj.ktype = &ktype;ret = kset_register(&kset_c);if(ret)kset_unregister(kset_p);return 0;}static void __exit kset_test_exit(void){printk("kset test exit!\n");kset_unregister(kset_p);kset_unregister(&kset_c);}module_init(kset_test_init);module_exit(kset_test_exit);
②、Makefile
ifneq ($(KERNELRELEASE),)obj-m := kset.oelseKDIR := /home/_Jana/linux-2.6.38all:make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-clean:rm -f *.ko *.o *.mod.o *.mod.c *.symvers *.orderendif
2、测试结果
- 【Tiny6410 And Linux】—(1.2)—kset——代码
- 【Tiny6410 And Linux】—(1.2)—kset——原理
- 【Tiny6410 And Linux】—(1.1)—kobject——代码
- 【Tiny6410 And Linux】—(1.3)—bus 设备模型——代码
- 【Tiny6410 And Linux】—(1.4)—device 设备模型——代码
- 【Tiny6410 And Linux】—(1.5)—driver 设备模型——代码
- 【Tiny6410 And Linux】—(2.1)—platform 总线、设备、驱动——代码
- 【Tiny6410 And Linux】—(2.3)—使用工作队列处理按键中断——代码
- 【Tiny6410 And Linux】—(2.4)—实现 input 模型按键驱动——代码
- 【Tiny6410 And Linux】—(6.1)—LCD 驱动测试程序——代码
- 【Tiny6410 And Linux】——LED 驱动程序设计——代码
- 【Tiny6410 And Linux】——基于 platform 总线的按键驱动——代码
- 【Tiny6410 And Linux】—(5.1)—RamDisk 驱动实现(内核缺省的处理函数 __make_request())——代码
- 【Tiny6410 And Linux】—(5.2)—RamDisk 驱动实现(自己绑定 make_request_fn() )——代码
- 【Tiny6410 And Linux】—(6.2)—LCD 驱动测试程序(BMP 显示位图)——代码
- 【Tiny6410 And Linux】—(2.2)—Linux 中断处理——原理
- Tiny6410学习—Linux命令
- 【Tiny6410 And Linux】—(1.1)—kobject——原理
- ORACLE自动导出备份
- 关于hibernate的缓存使用
- CAGradientLayer简介
- 自动下载安装控件,浏览监控视频控件开发
- JXL操作Excel java 操作excel
- 【Tiny6410 And Linux】—(1.2)—kset——代码
- C++中extern “C”含义深层探索
- 思科将收购实时网络分析软件公司Truviso
- POI 2003/2007 下拉列表
- Android系统信息(内存、cpu、sd卡、电量、版本)获取
- linux常用命令
- 多线程案例:生产者与消费者
- 大学的价值
- MongoDB