嵌入式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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值