⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hello_1.c

📁 支持Linux 内核2.4版本的字符设备模块示例
💻 C
字号:
#ifndef MODULE#define MODULE#endif //MODULE#ifndef __KERNEL__#define __KERNEL__#endif //__KERNEL__#ifndef LINUX#define LINUX#endif //LINUX#include <linux/module.h>#include <linux/init.h>#include <linux/fs.h>#include <linux/kernel.h>MODULE_LICENSE("GPL");static int g_iMajor = 0;#define DRIVER_NAME "my_device"//wrapper "read" functionstatic int my_read(struct file *filp, char *charp, size_t iLen, loff_t *pPos){    printk("my driver read.\n");    return 0;}//wrapper "write" functionstatic int my_write(struct file *filp, const char *charp, size_t iLen, loff_t *pPos){    printk("my driver write.\n");    return 0;}//wrapper "open" functionstatic int my_open(struct inode *pinode, struct file *filp){    MOD_INC_USE_COUNT;    printk("my driver open.\n");    return 0;}//wrapper "release" functionstatic int my_release(struct inode *pinode, struct file *filp){    MOD_DEC_USE_COUNT;    printk("my driver close");    return 0;}//register callback functionstatic struct file_operations my_fops = {    open        : my_open,    release     : my_release,    read        : my_read,    write       : my_write,};//driver initial functionstatic int __init my_init(void){    printk("Hello! My friend! this is my first driver in linux.\n");//    printk("kernel version:%d.%d.%d\n", (LINUX_VERSION_CODE>>16)&0xff, (LINUX_VERSION_CODE>>8)&0xff, LINUX_VERSION_CODE&0xff);    printk("kernel version:%s\n", UTS_RELEASE);        g_iMajor = register_chrdev(0, DRIVER_NAME, &my_fops);    if(g_iMajor < 0)    {        return 1;    }    return 0;}//driver uninitital functionstatic void __exit my_cleanup(void){    printk("Goodbye my friend! my first driver exit.\n");    unregister_chrdev(g_iMajor, DRIVER_NAME);}//register driver initial functionmodule_init(my_init);//register driver uninitital functionmodule_exit(my_cleanup);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -