linux静态分配设备号,Linux驱动开发之静态申请设备号
一、
1、头文件
include/linux/fs.h
2、API
静态申请设备号
int register_chrdev_region(dev_t, unsigned, const char *);
动态分配设备号
int alloc_chrdev_region(dev_t *, unsigned, unsigned, const char *);
3、注销设备号
void unregister_chrdev_region(dev_t, unsigned);
二、静态申请设备号实例
1、驱动源代码
#include #include #include #include static int hello_major = 248; // 主设备号
static int hello_minor = 0; // 次设备号
static int number_of_devices = 1; // 设备的数量
static __init char_driver_init(void)
{
int result;
dev_t dev = 0;
dev = MKDEV (hello_major, hello_minor); // 主设备号、次设备号合并为设备号
result = register_chrdev_region (dev, number_of_devices, "hello"); // 静态注册设备号: name 体现在"/proc/devices"中
if (result<0) {
printk (KERN_ERR "char_driver_init: can't get major number %d\n", hello_major);
return result;
}
printk(KERN_INFO "char_driver_init\n");
return 0;
}
static __exit char_driver_exit(void)
{
dev_t devno = MKDEV (hello_major, hello_minor);// 主设备号、次设备号合并为设备号
unregister_chrdev_region (devno, number_of_devices);// 注销设备号
printk(KERN_INFO "char_driver_exit\n");
}
module_init(char_driver_init);
module_exit(char_driver_exit);
MODULE_LICENSE("GPL");
MODULE_VERSION("v1.0");
MODULE_AUTHOR("xz@vichip.com.cn");
MODULE_DESCRIPTION("Char Driver Module");
MODULE_ALIAS("char driver module");
2、Makefile
ifeq ($(KERNELRELEASE),)
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
all:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
$(MAKE) -C $(KERNELDIR) M=$(PWD) clean
else
obj-m := char_reg.o
endif
3、验证
1)make
2)sudo insmod char_reg.ko
3)cat /proc/devices
xiezhi@sdtpad-desktop:~/xiezhi/linux_drivers/char_reg$ cat /proc/devices
Character devices:
1 mem
4 /dev/vc/0
4 tty
4 ttyS
5 /dev/tty
5 /dev/console
5 /dev/ptmx
5 ttyprintk
6 lp
7 vcs
10 misc
13 input
14 sound
21 sg
29 fb
99 ppdev
108 ppp
116 alsa
128 ptm
136 pts
180 usb
189 usb_device
216 rfcomm
226 drm
248 hello
250 mei
251 hidraw
252 usbmon
253 bsg
254 rtc4)sudo rmmod char_reg
linux静态分配设备号,Linux驱动开发之静态申请设备号相关推荐
- 个人微信号二次开发sdk协议,微信个人号开发API接口
个人微信号二次开发sdk协议,微信个人号开发API接口 微信SDK程序概要说明 个人微信号开发sdk非微信ipad协议.非mac协议,非安卓协议,api可实现微信99%功能: 无需扫码登录.可收发朋友 ...
- 公众号第三方平台开发 - 教程五 代公众号发起网页授权源码
教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 ...
- Linux 驱动开发 三:字符设备驱动框架
一.参考 (3条消息) Linux 字符设备驱动结构(一)-- cdev 结构体.设备号相关知识解析_知秋一叶-CSDN博客 (3条消息) linux设备驱动框架_不忘初心-CSDN博客_linux设 ...
- Linux驱动开发--写一个块设备驱动
原文地址:[原创] 写一个块设备驱动 http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=2017377&fromuid=288 ...
- linux驱动开发5之字符设备驱动新接口
1.新接口与老接口 1)老接口:register_chrdev static inline int register_chrdev(unsigned int major, const char *na ...
- 【嵌入式Linux】嵌入式Linux驱动开发基础知识之设备树模型
文章目录 前言 1.设备树的作用 2.设备树的语法 2.1.设备树的逻辑图和dts文件.dtb文件 2.1.1.1Devicetree格式 1DTS文件的格式 node的格式 properties的格 ...
- 一、linux驱动开发-1.2-字符设备实验
本节以chrdevbase虚拟设备为例,它有两个缓冲区写缓冲和读缓冲,大小都为100字节,应用程序可以向写缓冲区写入数据,从读缓冲区读取数据. 基本思路为:应用程序调用open函数打开chrdevba ...
- Linux驱动开发(三)---设备树
前文回顾 <Linux驱动开发(一)-环境搭建与hello world> <Linux驱动开发(二)-驱动与设备的分离设计> 继续宣传一下韦老师的视频 70天30节Linux驱 ...
- [linux]platform总线机制与wtd驱动开发
Linux之platform总线机制与wtd驱动开发 1.概述: 通常在Linux中,把SoC系统中集成的独立外设单元(如:I2C.IIS.RTC.看门狗等)都被当作平台设备来处理. 从Linux2. ...
最新文章
- Android中最简单的分享功能
- Solution : Cannot add new node – Rule SQL Server Database Services feature state failed.
- 如何利用MongoDB实现高性能,高可用的双活应用架构?
- 将宽度赋给高度_人生应知长度、懂宽度、有高度
- java面板换一个斜的圆形_java – 如何从底部设计圆形视图?
- java取json对象的值_java的JsonObject对象提取值方法
- docker之使用supervisor管理多个进程
- MySQL+create+base,MySQL中CREATE DATABASE和CREATE SCHEMA的区别
- FileReader图片上传并预览
- oracle 定时器时间分区_Oracle数据库之oracle按时间分区以及自动分区
- 设计模式 经典书籍必备推荐
- dell笔记本驱动安装失败_声卡驱动安装失败的解决方法
- python excel案例导入jira_用Python脚本批量添加JIRA用户,python,jira
- 二叉树遍历——递归算法
- 5种Alexa世界排名作弊方式(转)
- 智能眼镜的“减熵式增长”
- arcgis 空间交集 计算_基于ArcGIS的GIS缓冲区与叠加分析的综合应用——以大型商场选址为例...
- 有两个瓶子,一个瓶子是5升_隐藏的功能,装在瓶子中的消息和痴呆的面包师。...
- 2018甲骨文云大会:如何用“灵全快”抢占市场?
- csdn的,精彩连载!
热门文章
- OpenCASCADE:使用 扩展数据交换XDE之入门
- BOOST_TEST_FOREACH宏相关的测试程序
- boost::histogram::detail::make_default用法的测试程序
- GDCM:gdcm::StringFilter的测试程序
- Boost:cpu时间的实例
- VTK:可视化之FlatShading
- VTK:PolyData之RemoveOutsideSurface
- VTK:PolyData之PointLocatorRadius
- OpenGL窗口属性
- C++静态多态与动态多态