Linux应用层想要操作kernel层的API,比如想操作相关GPIO或寄存器,可以通过写一个字符设备驱动来实现。
1、先在rootfs中的 /dev/ 下生成一个字符设备。注意主设备号 和 从设备号。可用如下shell脚本生成:
if [ ! -e audioIN ];then
sudo mknod audioIN c 240 0
fi
生成的设备为 /dev/audioIN ,主设备号240,从设备号0。
2、写audioINdriver.ko ,audioINdriver.c 基本代码框架如下:代码中定义了设备名audioIN,设备号240, 0 ,与之前创建的设备一致。
/**************************************************************************\
* audioINdriver.c
*
* kang_liu <liukang325@qq.com>
* 2014-07-15
\**************************************************************************/
#include <asm/uaccess.h>
#include <asm/errno.h>
#include <linux/types.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/cdev.h>
#include <mach/gpio.h>
//#include <mach/at91_rstc.h> /* debug */
//#include <mach/at91_pmc.h>
//#include <mach/at91_rstc.h>
//#include <mach/at91_shdwc.h>
#include <mach/irqs.h>
//#include "generic.h"
//#include "clock.h"
#include <mach/w55fa92_reg.h>
#include <asm/io.h>
#define DEV_MAJOR 240
#define DEV_MINOR 0
#define NUM_MINORS 1
#define DEVICE_NAME "audioIN"
#define ERR(fmt, args...) p