一、

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驱动开发之静态申请设备号相关推荐

  1. 个人微信号二次开发sdk协议,微信个人号开发API接口

    个人微信号二次开发sdk协议,微信个人号开发API接口 微信SDK程序概要说明 个人微信号开发sdk非微信ipad协议.非mac协议,非安卓协议,api可实现微信99%功能: 无需扫码登录.可收发朋友 ...

  2. 公众号第三方平台开发 - 教程五 代公众号发起网页授权源码

    教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 ...

  3. Linux 驱动开发 三:字符设备驱动框架

    一.参考 (3条消息) Linux 字符设备驱动结构(一)-- cdev 结构体.设备号相关知识解析_知秋一叶-CSDN博客 (3条消息) linux设备驱动框架_不忘初心-CSDN博客_linux设 ...

  4. Linux驱动开发--写一个块设备驱动

    原文地址:[原创] 写一个块设备驱动 http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=2017377&fromuid=288 ...

  5. linux驱动开发5之字符设备驱动新接口

    1.新接口与老接口 1)老接口:register_chrdev static inline int register_chrdev(unsigned int major, const char *na ...

  6. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之设备树模型

    文章目录 前言 1.设备树的作用 2.设备树的语法 2.1.设备树的逻辑图和dts文件.dtb文件 2.1.1.1Devicetree格式 1DTS文件的格式 node的格式 properties的格 ...

  7. 一、linux驱动开发-1.2-字符设备实验

    本节以chrdevbase虚拟设备为例,它有两个缓冲区写缓冲和读缓冲,大小都为100字节,应用程序可以向写缓冲区写入数据,从读缓冲区读取数据. 基本思路为:应用程序调用open函数打开chrdevba ...

  8. Linux驱动开发(三)---设备树

    前文回顾 <Linux驱动开发(一)-环境搭建与hello world> <Linux驱动开发(二)-驱动与设备的分离设计> 继续宣传一下韦老师的视频 70天30节Linux驱 ...

  9. [linux]platform总线机制与wtd驱动开发

    Linux之platform总线机制与wtd驱动开发 1.概述: 通常在Linux中,把SoC系统中集成的独立外设单元(如:I2C.IIS.RTC.看门狗等)都被当作平台设备来处理. 从Linux2. ...

最新文章

  1. Android中最简单的分享功能
  2. Solution : Cannot add new node – Rule SQL Server Database Services feature state failed.
  3. 如何利用MongoDB实现高性能,高可用的双活应用架构?
  4. 将宽度赋给高度_人生应知长度、懂宽度、有高度
  5. java面板换一个斜的圆形_java – 如何从底部设计圆形视图?
  6. java取json对象的值_java的JsonObject对象提取值方法
  7. docker之使用supervisor管理多个进程
  8. MySQL+create+base,MySQL中CREATE DATABASE和CREATE SCHEMA的区别
  9. FileReader图片上传并预览
  10. oracle 定时器时间分区_Oracle数据库之oracle按时间分区以及自动分区
  11. 设计模式 经典书籍必备推荐
  12. dell笔记本驱动安装失败_声卡驱动安装失败的解决方法
  13. python excel案例导入jira_用Python脚本批量添加JIRA用户,python,jira
  14. 二叉树遍历——递归算法
  15. 5种Alexa世界排名作弊方式(转)
  16. 智能眼镜的“减熵式增长”
  17. arcgis 空间交集 计算_基于ArcGIS的GIS缓冲区与叠加分析的综合应用——以大型商场选址为例...
  18. 有两个瓶子,一个瓶子是5升_隐藏的功能,装在瓶子中的消息和痴呆的面包师。...
  19. 2018甲骨文云大会:如何用“灵全快”抢占市场?
  20. csdn的,精彩连载!

热门文章

  1. OpenCASCADE:使用 扩展数据交换XDE之入门
  2. BOOST_TEST_FOREACH宏相关的测试程序
  3. boost::histogram::detail::make_default用法的测试程序
  4. GDCM:gdcm::StringFilter的测试程序
  5. Boost:cpu时间的实例
  6. VTK:可视化之FlatShading
  7. VTK:PolyData之RemoveOutsideSurface
  8. VTK:PolyData之PointLocatorRadius
  9. OpenGL窗口属性
  10. C++静态多态与动态多态