您的位置:首页 > 其它

(4)x210: 2.4之前的字符驱动

2017-10-10 11:32 218 查看
1 chardev.c

#include <linux/module.h>

#include <linux/kernel.h>

#include <linux/init.h>

#include <linux/fs.h>

#define MYMAJOR 200

#define MYNAME "chardev"

static int test_chardev_open(struct inode *inode,struct file *file)

{

printk(KERN_INFO "test chardev_open\n");

return 0;

}

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

printk(KERN_INFO "test chardev_relase\n");

return 0;

}

static const struct file_operations test_fops={

.owner=THIS_MODULE,

.open=test_chardev_open,

.release=test_chardev_release,

};

static int __init chardev_init(void)

{ int ret=-1;

printk(KERN_INFO "jimmy module chardev init");

ret=register_chrdev(MYMAJOR,MYNAME,&test_fops);

if(ret)

{

printk(KERN_ERR "register_chrdev fail\n");

return -EINVAL;

}

printk(KERN_INFO "register_chrdev success...\n");

return 0;

}

static void __exit chardev_exit(void)

printk(KERN_INFO "jimmy module chardev exit\n");

unregister_chrdev(MYMAJOR, MYNAME);

}

module_init(chardev_init);

module_exit(chardev_exit);

// MODULE_xxx这种宏作用是用来添加模块描述信息

MODULE_LICENSE("GPL");                          // 描述模块的许可证

MODULE_AUTHOR("aston");                         // 描述模块的作者

MODULE_DESCRIPTION("module test");      // 描述模块的介绍信息

MODULE_ALIAS("alias xxx");                      // 描述模块的别名信息

2. app.c

#include <stdio.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#define FILE    "/dev/chardev"                  // mknod /dev/chardev c 2000  只要主设备号和驱动里定义的一样就可,名字可以和驱动里的MYNAME不同

int main(void)

{

        int fd = -1;

        fd = open(FILE, O_RDWR);

        if (fd < 0)

        {

                printf("open %s error.\n", FILE);

                return -1;

        }

        printf("open %s success..\n", FILE);

        close(fd);

        return 0;

}

3. Makefile

#ubuntu的内核源码树,如果要编译在ubuntu中安装的模块就打开这2个

#KERN_VER = $(shell uname -r)

#KERN_DIR = /lib/modules/$(KERN_VER)/build

# 开发板的linux内核的源码树目录

KERN_DIR = /arm/s5pv210/kernel

obj-m   += chardev.o

all:

        make -C $(KERN_DIR) M=`pwd` modules

        arm-none-linux-gnueabi-gcc app.c -o app -static // static编译,否则执行时会报错 " ./app not found"

cp:

        cp *.ko /arm-nfs/jimmy_test

        cp app /arm-nfs/jimmy_test

.PHONY: clean

clean:

        make -C $(KERN_DIR) M=`pwd` modules clean
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: