openwrt 驱动编写

42 篇文章 2 订阅
35 篇文章 1 订阅

一个最简单的驱动包含二个文件

mydrv.c  源码文件

Makefiile    编译在KO

文件如下

mydrv.c     c源码文件

/*
*/

#include <linux/module.h>
#include <linux/major.h>
#include <linux/types.h>
#include <linux/errno.h>
#include <linux/delay.h>    /* guess what */
#include <linux/fs.h>
#include <linux/mm.h>
#include <linux/init.h>
#include <linux/device.h>
#include <linux/mutex.h>
#include <linux/firmware.h>
#include <linux/platform_device.h>
#include <linux/uaccess.h>    /* For put_user and get_user */


static struct class *mydrv_class;
/*
*/

static int mydrv_open(struct inode *inode, struct file *file)
{

    return 0;
}

/*

*/

static const struct file_operations mydrv_fops = {
    .owner        = THIS_MODULE,
    .open        = mydrv_open,
};

/*
入口函数
*/

int major;

static int __init mydrv_init(void)
{

     printk("module_init--->mydrv_init\n");

   //1
    if(major=register_chrdev(0, "mydrv", &mydrv_fops)) {
        printk("MYDRV driver: Unable to register driver\n");
        return 1;
    }
    //2
    mydrv_class = class_create(THIS_MODULE, "mydrv");
    //3
    device_create(mydrv_class, NULL, MKDEV(major, 0), NULL,
              "mydrv");

    //4 .初始化
    return 0;
}
module_init(mydrv_init);

/*
出口函数
*/

static void __exit mydrv_exit(void)
{

    printk("module_exit--->mydrv_exit\n");
    //1
    device_destroy(mydrv_class, MKDEV(major, 0));

   //2
    class_destroy(mydrv_class);

   //3
    unregister_chrdev(0, "mydrv");
}
module_exit(mydrv_exit);

MODULE_LICENSE("GPL");

 

Makefile   文件

KERN_DIR =/home/widora/openwrt_widora/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7688/linux-3.18.29

TOOLCHAIN="/home/widora/openwrt_widora/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mipsel-openwrt-linux-uclibc-"

all:
    make  -C $(KERN_DIR) ARCH=mips CROSS_COMPILE=$(TOOLCHAIN) M=`pwd` modules

clean:
    rm -f *.ko
    rm -f *.o
    rm -f *.mod.c
    rm -f *.mod.o
    rm -f *.order
    rm -f *.sysvers

obj-m +=mydrv.o

 

在linux虚拟机上建一个目录mydrv,copy 这二个文件到该目录下,运行make 生成

 mydrv.ko  copy mydrv.ko 开发板的/tmp 

然后 insmod mydrv.ko

会在/sys/class  里面看到mydrv类 在/dev 看到mydrv设备

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值