zoukankan      html  css  js  c++  java
  • 实验

    驱动文件hello.c

    #include <linux/module.h>
    #include <linux/kernel.h>
    #include <linux/fs.h>
    #include <linux/init.h>
    #include <linux/delay.h>
    
    #define    HELLO_MAJOR     231
    #define    DEVICE_NAME     "HelloModule"
    
    static int hello_open(struct inode *inode, struct file *file){
        printk(KERN_EMERG "hello open.
    ");
        return 0;
    }
    
    static int hello_write(struct file *file, const char __user * buf, size_t count, loff_t *ppos){
        printk(KERN_EMERG "hello write.
    ");
        return 0;
    }
    
    static struct file_operations hello_flops = {
        .owner  =   THIS_MODULE,
        .open   =   hello_open,     
        .write  =   hello_write,
    };
    
    static int __init hello_init(void){
        int ret;
        
        ret = register_chrdev(HELLO_MAJOR,DEVICE_NAME, &hello_flops);
        if (ret < 0) {
          printk(KERN_EMERG DEVICE_NAME " can't register major number.
    ");
          return ret;
        }
        printk(KERN_EMERG DEVICE_NAME " initialized.
    ");
        return 0;
    }
    
    static void __exit hello_exit(void){
        unregister_chrdev(HELLO_MAJOR, DEVICE_NAME);
        printk(KERN_EMERG DEVICE_NAME " removed.
    ");
    }
    
    module_init(hello_init);
    module_exit(hello_exit);
    MODULE_LICENSE("GPL");
    

    编译驱动所需的Makefile

    ifneq ($(KERNELRELEASE),)
    MODULE_NAME = hellomodule
    $(MODULE_NAME)-objs := hello.o
    obj-m := $(MODULE_NAME).o
    else
    KERNEL_DIR = /lib/modules/`uname -r`/build
    MODULEDIR := $(shell pwd)
    
    .PHONY: modules
    default: modules
    
    modules:
        make -C $(KERNEL_DIR) M=$(MODULEDIR) modules
    
    clean distclean:
        rm -f *.o *.mod.c .*.*.cmd *.ko
        rm -rf .tmp_versions
    endif
    

    1、编译驱动

    #make
    

    2、编译上层应用

    #gcc hellotest.c -o hellotest
    

    3、加载驱动

    #insmod hellomodule.ko
    

    insmod加载驱动的时候,会调用函数hello_init(),打印的调试信息如下。

    但是在"/proc/devices"中看不到已经加载的模块。

  • 相关阅读:
    promethus监控JVM jar包
    ubuntu中文乱码解决办法
    IT焦躁中的赤子青年
    ftp neo4j http kafka搭建
    查看python脚本执行过程
    解决coredns-7f9c544f75-2sjs2一直处于ContainerCreating
    番茄工作法
    数据库的性能优化
    MyBatis
    CentOS下安装JDK,Tomcat,Redis,Mysql,及项目发布
  • 原文地址:https://www.cnblogs.com/lsqz/p/12080574.html
Copyright © 2011-2022 走看看