jacky

A technique blog for jacky

here are my artitles about work(embeded system develop, docker, etc.) and life(cook, hiking)


生成设备节点

在mini linux测试过,可以生成设备节点

#include <linux/init.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/miscdevice.h>
#include <linux/fs.h>

#define DRIVER_NAME "hello_ctl"
#define DEVICE_NAME "hello_ctl123"

MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("TOPEET");

static long hello_ioctl(struct file *files, unsigned int cmd, unsigned long arg){
	printk("cmd is %d, arg is %d\n", cmd, arg);
	return 0;
}

static int hello_release(struct inode *inode, struct file *file){
	printk(KERN_EMERG "hello release\n");
	return 0;
}

static int hello_open(struct inode *inode, struct file *file){
	printk(KERN_EMERG "hello open\n");
	return 0;
}

static struct file_operations hello_ops = {
	.owner = THIS_MODULE,
	.open  = hello_open,
	.release = hello_release,
	.unlocked_ioctl = hello_ioctl,
};
static struct miscdevice hello_dev = {
	.minor = MISC_DYNAMIC_MINOR,
	.name  = DEVICE_NAME,
	.fops  = &hello_ops,
};

static int hello_shutdown(struct platform_device *pdv){
	return 0;
}
static int hello_suspend(struct platform_device *pdv){
	return 0;
}
static int hello_probe(struct platform_device *pdv){
	printk(KERN_EMERG "\tinitialzied!\n");
	misc_register(&hello_dev);

	return 0;
}

static int hello_remove(struct platform_device *pdv){
	printk(KERN_EMERG "\tremove\n");
	misc_deregister(&hello_dev);
	return 0;
}

static int hello_resume(struct platform_device *pdv){
	return 0;
}

struct platform_driver hello_driver = {
	.probe = hello_probe,
	.remove = hello_remove,
	.shutdown = hello_shutdown,
	.suspend = hello_suspend,
	.resume = hello_resume,
	.driver = {
		.name = DRIVER_NAME,
		.owner = THIS_MODULE,
	}
};

static int hello_init(void){
	int DriverState;
	
	printk(KERN_EMERG "HELLO WORLD enter!\n");
	DriverState = platform_driver_register(&hello_driver);
	
	printk(KERN_EMERG "\tDriverState is %d\n", DriverState);
	return 0;
}

static void hello_exit(void)
{
	printk(KERN_EMERG "HELLO WORLD exit!\n");
	platform_driver_unregister(&hello_driver);
}

module_init(hello_init);
module_exit(hello_exit);
最近的文章

调用驱动程序

#include<stdio.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>#include<sys/ioctl.h>void main(void){ int fd; char *hello_node = "/dev/hello_ctl123"; if((fd = open(hello_node, O_R...…

继续阅读
更早的文章

Welcome to Jacklin's Blogll!

test!!!You’ll find this post in your _posts directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run jekyll serve, which launches a web server and...…

继续阅读