Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- obj-m := zad4.o
- KERNELDIR = /lib/modules/$(shell uname -r)/build
- default:
- $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
- clean:
- $(MAKE) -C $(KERNELDIR) M=$(PWD) clean
- zad4.c
- #include<linux/module.h>
- #include<linux/sysfs.h>
- #include<linux/kobject.h>
- static struct kobject kernel_object;
- static int number;
- static const char attribute_name[] = "number";
- static ssize_t number_show(struct kobject *kernel_object, struct attribute *attribute, char *buffer)
- {
- return sprintf(buffer,"%d\n",number);
- }
- static ssize_t number_store(struct kobject *kernel_object, struct attribute *attribute, const char *buffer, size_t count)
- {
- sscanf(buffer,"%d",&number);
- return count;
- }
- static struct sysfs_ops operations = {
- .show = number_show,
- .store = number_store,
- };
- static void number_release(struct kobject *kernel_object)
- {
- pr_notice("Release function activated!\n");
- }
- static struct attribute number_attribute = {
- .name = attribute_name,
- .mode = 0600
- };
- static struct attribute *attributes[] = {
- &number_attribute,
- NULL
- };
- static struct kobj_type ktype =
- {
- .release = number_release,
- .sysfs_ops = &operations,
- .default_attrs = attributes,
- };
- static int __init sysfs_test_init(void)
- {
- kobject_init(&kernel_object,&ktype);
- if(kobject_add(&kernel_object,&THIS_MODULE->mkobj.kobj,"test%d",2)) {
- pr_alert("Error adding a kobject\n");
- return -ENOMEM;
- }
- return 0;
- }
- static void __exit sysfs_test_exit(void)
- {
- kobject_put(&kernel_object);
- }
- module_init(sysfs_test_init);
- module_exit(sysfs_test_exit);
- MODULE_DESCRIPTION("A second kernel module demonstrating the usage of sysfs.");
- MODULE_LICENSE("GPL");
- //zad5
- #include<linux/module.h>
- #include<linux/sysfs.h>
- #include<linux/kobject.h>
- static struct kobject kernel_object;
- static int number;
- static const char attribute_name[] = "number";
- static ssize_t number_show(struct kobject *kernel_object, struct attribute *attribute, char *buffer)
- {
- return sprintf(buffer,"%d\n",number);
- }
- static ssize_t number_store(struct kobject *kernel_object, struct attribute *attribute, const char *buffer, size_t count)
- {
- sscanf(buffer,"%d",&number);
- return count;
- }
- static struct sysfs_ops operations = {
- .show = number_show,
- .store = number_store,
- };
- static void number_release(struct kobject *kernel_object)
- {
- pr_notice("Release function activated!\n");
- }
- static struct attribute number_attribute = {
- .name = attribute_name,
- .mode = 0600
- };
- static struct attribute *attributes[] = {
- &number_attribute,
- NULL
- };
- static struct kobj_type ktype =
- {
- .release = number_release,
- .sysfs_ops = &operations,
- .default_attrs = attributes,
- };
- static int __init sysfs_test_init(void)
- {
- if(kobject_add(&kernel_object,NULL,"test%d",2))
- goto err;
- return 0;
- err:
- pr_alert("Error adding a kobject\n");
- return -ENOMEM;
- }
- static void __exit sysfs_test_exit(void)
- {
- kobject_put(&kernel_object);
- }
- module_init(sysfs_test_init);
- module_exit(sysfs_test_exit);
- MODULE_DESCRIPTION("A second kernel module demonstrating the usage of sysfs.");
- MODULE_LICENSE("GPL");
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement