dhkim1027
8/24/2017 - 12:18 PM

linux driver simple sample

linux driver simple sample

#ifndef __KERNEL__
#define __KERNEL__
#endif

#ifndef MODULE
#define MODULE
#endif

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/version.h>
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/sched.h>
#include <linux/interrupt.h>
#include <linux/wait.h>
#include <linux/ioport.h>
#include <linux/slab.h>
#include <linux/poll.h>
#include <linux/proc_fs.h>
#include <linux/irq.h>
#include <linux/io.h>
#include <linux/delay.h>

#include  "dev_gpio.h"

#if 0
static int major  = GPIO_MAJOR_DEF;

static struct file_operations gpio_fops =
{
    // .open     = gpio_open,
    // .release = gpio_release,
    // .poll  = gpio_poll,
    // .ioctl    = gpio_ioctl,
};
#endif

static __init int gpio_init( void )
{
    printk("\nRegister %s Ok\n\n", GPIO_DEV_NAME );
    /*
    major &= 0xff;
    if( !register_chrdev( major, GPIO_DEV_NAME, &gpio_fops ) ){
        printk("\nRgister device %s Ok (major=%d)\n", GPIO_DEV_NAME, major );
    } else {
        printk("\nUnable to get major %d for %s \n", major, GPIO_DEV_NAME );
        return -EBUSY;
    }
    */

    return 0;
}

static __exit void gpio_free( void )
{
    //unregister_chrdev( major, GPIO_DEV_NAME );
    printk("\nUnregister %s Ok\n\n", GPIO_DEV_NAME );
}

module_init(gpio_init);
module_exit(gpio_free);

MODULE_AUTHOR("dhkim1027");
MODULE_LICENSE("GPL");
#ifndef _DEV_GPIO_H_
#define _DEV_GPIO_H_

#define GPIO_MAJOR_DEF 203
#define GPIO_DEV_NAME "GPIO Ver 1.0"

#endif 
# Define variables to be used within the build 
obj-m += dev_gpio.o
#CROSS_COMPILE=/home/dhkim/project/IF-S200N/face/LINUX/android/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/arm-linux-androideabi-
CROSS_COMPILE=/home/dhkim/project/IF-S200N/face/LINUX/android/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-
KERNEL_DIR ?= /home/dhkim/project/IF-S200N/face/LINUX/android/out/target/product/if_s200n/obj/KERNEL_OBJ
MODULE_SIGN_FILE = /home/dhkim/project/IF-S200N/face/LINUX/android/kernel/msm-3.18/scripts/sign-file
MODSECKEY = /home/dhkim/project/IF-S200N/face/LINUX/android/out/target/product/if_s200n/obj/kernel/msm-3.18/signing_key.priv
MODPUBKEY = /home/dhkim/project/IF-S200N/face/LINUX/android/out/target/product/if_s200n/obj/kernel/msm-3.18/signing_key.x509

#CROSS_COMPILE=/home/dhkim/project/msm8909w/trunk/LINUX/android/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/arm-linux-androideabi-
#KERNEL_DIR ?= /home/dhkim/project/msm8909w/trunk/LINUX/android/out/target/product/if_w520demo/obj/KERNEL_OBJ

default:
	make -C $(KERNEL_DIR) M=$(PWD) ARCH=arm64 CROSS_COMPILE=$(CROSS_COMPILE) modules
#perl $(MODULE_SIGN_FILE) sha512 $(MODSECKEY) $(MODPUBKEY) dev_gpio.ko

# define to clean the directory
clean:
	rm -f *.ko *.o *.mod.* modules.*