1、单板通过nfs启动后准备如下文件
first_drv.c
first_drv_test.c
Makefile
添加代码如下:
first_drv.c
#include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/device.h> #include <asm/io.h> #include <linux/init.h> //#include <linux/platform_device.h> #include <linux/miscdevice.h> #include <linux/ioport.h> #include <linux/of.h> #include <linux/uaccess.h> static int first_drv_open(struct inode * inode, struct file * filp) { printk("first_drv_open!\n"); return 0; } static int first_drv_write(struct file *file, const char __user *buf, size_t count, loff_t * ppos) { printk("first_drv_write!\n"); return 0; } static struct file_operations first_drv_fops = { .owner = THIS_MODULE, .open = first_drv_open, .write = first_drv_write, }; int first_drv_init(void) { register_chrdev(111, "first_drv", &first_drv_fops); return 0; } void first_drv_exit(void) { unregister_chrdev(111, "first_drv"); } module_init(first_drv_init); //模块初始化接口 module_exit(first_drv_exit); //模块推出接口
first_drv_test.c
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <unistd.h> int main(int argc, char **argv) { int fd; int val=1; fd = open("/dev/xxx", O_RDWR); //打开设备 if(fd < 0) printf("can`t open!\n"); write(fd, &val, 4); return 0; }Makefile
#内核路径 KERN_DIR = /home/zhoufeng/workspace/Hi3519V101_SDK_V1.0.4.0/osdrv/opensource/kernel/linux-3.18.y all: make -C $(KERN_DIR) M=`pwd` modules clean: make -C $(KERN_DIR) M=`pwd` modules clean rm -rf modules.order obj-m += first_drv.o2、编译驱动、测试程序
在命令串口输入如下命令指定编译参数
export ARCH=arm CROSS_COMPILE=arm-hisiv500-linux-编译驱动
make编译测试程序
arm-hisiv500-linux-gcc -o first_drv_test first_drv_test.c3、单板执行
将编译生成的first_drv.ko、first_drv_test拷贝到单板
加载驱动
insmod first_drv.ko查看加载驱动
cat /proc/devices Character devices: 1 mem 4 /dev/vc/0 4 tty 5 /dev/tty 5 /dev/console 5 /dev/ptmx 7 vcs 10 misc 13 input 29 fb 89 i2c 90 mtd 111 first_drv 128 ptm 136 pts 153 spi 180 usb 189 usb_device 204 ttyAMA 254 bsg创建设备节点
mknod /dev/xxx c 111 0查看驱动
lsmod Module Size Used by Tainted: P first_drv 1064 0执行测试程序
./first_drv_test first_drv_open! first_drv_write!卸载驱动
rmmod first_drv
