嵌入式LINUX驱动学习之4.字符设备驱动编程(三)用户空间实现代码之驱动注册和卸载


说明:本例以生成的驱动模块为文件mychrdev.ko为例 ,所有执行都在下位机

一、注册驱动 模块:

insmod mychrdev.ko

二、查看注册的主设备号

cat  /proc/devices 
     Character devices:
      1 mem
      5 /dev/tty
      5 /dev/console
      5 /dev/ptmx
      ........
      244 myfile_cdev     //主设备号244
      ........

三、根据主设备号创建字符设备文件

3.1方式一:通过bash创建

mknod /dev/mychrdev0 c 244 0
mknod /dev/mychrdev1 c 244 1
mknod /dev/mychrdev2 c 244 2
mknod /dev/mychrdev3 c 244 3
#命令说明:
#      Usage: mknod [-m MODE] NAME TYPE MAJOR MINOR
#      TYPE:
#        b       Block device
#        c or u  Character device
#        p       Named pipe (MAJOR and MINOR are ignored)
#

方式二:通过C语言编写代码创建,代码见附A,以编译好的文件名为:mychrdev_reg为例:

./mychrdev_reg 244 4 mychrdev
#命令说明:
#      Usage:comm MAJOR minorct chrdev_name

四卸载驱动模块

rmmod mychrdev.ko

附A

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
int main(int argc , char * argv[]){
    
    
    //对命令行输入的参数做判断
    if (argc !=4){
    
    
        printf("参数错误:\n");
        printf("         comm <major> <minorct> <name>\n");
        return -1;
    }
    unsigned long int i = 0;
    dev_t dev_num;//定义设备号
    dev_t major = strtoul(argv[1],NULL,0); 将主设备号转为整数型
    int minorct = strtoul(argv[2],NULL,0);//将次设备号数量由字符型转为整形
    int path_name_len;
    char path_name[128] = "/dev/";//定义初始化保存设备名称的字符数组
    char buf[4];//用于保存字符设备名称最后一位,即整形转为字符型的内容
    strcat(path_name,argv[3]);//strcat(3)
    path_name_len = strlen(path_name);   
    for(; i<minorct ;i++){
    
    
        dev_num = makedev(major,i);//见帮忙手册mknod(2) makedev(3)
        sprintf(buf,"%d",i);//sprintf(3)
        strcat(path_name,buf);//为字符设备名称加编号
        mknod(path_name,S_IFCHR,dev_num);//创建字符设备
        path_name[path_name_len] = '\0';
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_47273317/article/details/107822759
今日推荐