博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LINUX学习笔记:(2)编写驱动模块
阅读量:4087 次
发布时间:2019-05-25

本文共 1876 字,大约阅读时间需要 6 分钟。

LINUX学习笔记:(2)编写驱动模块

宿主机 : 虚拟机 Ubuntu 16.04 LTS / X64

目标板[底板]: Tiny4412SDK - 1506
目标板[核心板]: Tiny4412 - 1412
LINUX内核: 4.12.0
交叉编译器: arm-none-linux-gnueabi-gcc(gcc version 4.8.3 20140320)
日期: 2018-2-28 19:35:35
作者: SY

简介

本章节主要介绍如何编写驱动模块运行在基于 ARMLinux 上。模块可以在运行期间手动安装、卸载,具有即插即用的好处!

APP

led.c

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
/* 平台头文件 */#include
#include
#include
#define DEVICE_NAME "LED"/* 配置IO端口 */static unsigned int gpio_table[] = { EXYNOS4X12_GPM4(0), EXYNOS4X12_GPM4(1), EXYNOS4X12_GPM4(2), EXYNOS4X12_GPM4(3),}; #define LED_NUMS ARRAY_SIZE(gpio_table)/* LED操作方法 */#define CMD_LED_OPEN (0)#define CMD_LED_CLOSE (1)static long led_device_ioctl( struct file *filp, unsigned int cmd, unsigned long arg ){ if (arg >= LED_NUMS) { return -EINVAL; } switch ( cmd ) { case CMD_LED_OPEN: gpio_set_value(gpio_table[arg], CMD_LED_OPEN); break; case CMD_LED_CLOSE: gpio_set_value(gpio_table[arg], CMD_LED_CLOSE); break; default: return -EINVAL; } return 0;}static struct file_operations led_device_fops = { .owner = THIS_MODULE, .unlocked_ioctl = &led_device_ioctl,};/** * 模块归属为misc设备,所有的misc设备共享同一个主设备号 * 次设备号为MISC_DYNAMIC_MINOR,表示由系统自动分配 */static struct miscdevice led_dev = { .minor = MISC_DYNAMIC_MINOR, .name = DEVICE_NAME, .fops = &led_device_fops,};static int __init led_device_init( void ){ int ret,i; printk("led register!\n"); for (i=0; i

Makefile

Makefile

CROSS   := arm-linux-obj-m   := bsp_led.oKDIR    := /lib/modules/3.5.0-FriendlyARM/buildPWD     := $(shell pwd)default:    $(MAKE) -C $(KDIR) M=$(PWD) modulesclean:    rm -rf *.o *.ko *.mod.c *.temp_versions *.symvers *.order

编译

在驱动模块当前文件夹中执行:

$ make

即可生成内核模块 led.ko

模块加载

将模块拷贝到开发板中,加载模块:

$ insmod led.ko$ led register!

列举模块

$ lsmod

删除模块

$ rmmod led.ko$ led deregister!

转载地址:http://bizii.baihongyu.com/

你可能感兴趣的文章
缓存篇-Redisson的使用
查看>>
phpquery抓取网站内容简单介绍
查看>>
找工作准备的方向(4月22日写的)
查看>>
关于fwrite写入文件后打开查看是乱码的问题
查看>>
用结构体指针前必须要用malloc,不然会出现段错误
查看>>
Linux系统中的美
查看>>
一些实战项目(linux应用层编程,多线程编程,网络编程)
查看>>
我觉得专注于去学东西就好了,与世无争。
查看>>
原来k8s docker是用go语言写的,和现在所讲的go是一个东西!
查看>>
STM32CubeMX 真的不要太好用
查看>>
STM32CubeMX介绍、下载与安装
查看>>
不要买铝合金机架的无人机,不耐摔,易变形弯曲。
查看>>
ACfly也是基于FreeRTOS的
查看>>
F330装GPS的位置
查看>>
pixhawk也可以用Airsim仿真
查看>>
《无人机电机与电调技术》可以看看
查看>>
我发现七月在线的GAAS课程基本都讲到了
查看>>
电机堵转
查看>>
carzepony也在想往FreeRTOS上迁移
查看>>
可以买个好点的电烙铁
查看>>