UART子系统(七)字符设备驱动程序的另一种注册方法

简介: UART子系统(七)字符设备驱动程序的另一种注册方法

字符设备驱动程序的另一种注册方法


参考资料


参考代码:drivers\char\pc8736x_gpio.c


本节课程源码在GIT仓库里


驱动大全:

doc_and_source_for_drivers\IMX6ULL\source\09_UART\
  03_char_dev_driver\
  01b_hello_drv
doc_and_source_for_drivers\STM32MP157\source\A7\09_UART\
  03_char_dev_driver\
  01b_hello_drv
快速入门:
01_all_series_quickstart\05_嵌入式Linux驱动开发基础知识\source\
  01b_hello_drv


1. 字符设备驱动程序框架


1670938359176.jpg

编写驱动程序的套路:


确定主设备号,也可以让内核分配

定义自己的file_operations结构体

实现对应的drv_open/drv_read/drv_write等函数,填入file_operations结构体

file_operations结构体告诉内核:register_chrdev

谁来注册驱动程序啊?得有一个入口函数:安装驱动程序时,就会去调用这个入口函数

有入口函数就应该有出口函数:卸载驱动程序时,出口函数调用unregister_chrdev

其他完善:提供设备信息,自动创建设备节点:class_create, device_create


2. 新的注册方法


参考代码:drivers\char\pc8736x_gpio.c


注册字符设备区域

有主设备号:register_chrdev_region

无主设备号:alloc_chrdev_region

分配/设置/注册cdev

cdev_alloc

cdev_init

cdev_add


3. 上机实验


3.1 IMX6ULL


先设置工具链:

export ARCH=arm
export CROSS_COMPILE=arm-buildroot-linux-gnueabihf-
export PATH=$PATH:/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin


编译、执行程序:

Ubuntu:
cd 01_hello_drv\
make
开发板:
insmod hello_drv.ko
./hello_drv_test  -w abcd
./hello_drv_test  -r


3.2 STM32MP157


先设置工具链:

export ARCH=arm
export CROSS_COMPILE=arm-buildroot-linux-gnueabihf-
export PATH=$PATH:/home/book/100ask_stm32mp157_pro-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin


编译、执行程序:

Ubuntu:
cd 01_hello_drv\
make
开发板:
insmod hello_drv.ko
./hello_drv_test  -w abcd
./hello_drv_test  -r
相关文章
|
Linux 内存技术
U-BOOT小全(六):BootLoader源码(UBoot-Kernel 1)
U-BOOT小全(六):BootLoader源码(UBoot-Kernel 1)
300 0
|
4月前
|
人工智能 自然语言处理 安全
程序员都在偷偷用的AI编程神器!2025高效自动写代码工具全解析
AI编程革命正悄然兴起。李响团队调研显示,AI助手大幅提升开发效率,GitHub Copilot、CodeWhisperer、Tabnine各具优势,而新兴的Lynx AI更以自然语言生成全栈应用,零门槛、多端适配,助力开发者从重复劳动中解放,专注创新。
程序员都在偷偷用的AI编程神器!2025高效自动写代码工具全解析
|
机器学习/深度学习 移动开发 自然语言处理
【YOLOv8改进 - 注意力机制】ContextAggregation : 上下文聚合模块,捕捉局部和全局上下文,增强特征表示
【YOLOv8改进 - 注意力机制】ContextAggregation : 上下文聚合模块,捕捉局部和全局上下文,增强特征表示
|
11月前
|
Serverless Python
借助 serverless 将 MCP 服务部署到云端
本文介绍了如何将 MCP 服务通过 SSE 协议部署到云端,避免本地下载和启动的麻烦。首先,使用 Python 实现了一个基于 FastMCP 的网络搜索工具,并通过设置 `transport='sse'` 启用 SSE 协议。接着,编写客户端代码测试服务功能,确保其正常运行。随后,利用阿里云函数计算服务(FC 3.0)以 Serverless 方式部署该服务,包括创建函数、配置环境变量、添加依赖层以及部署代码。最后,提供了客户端测试方法和日志排查技巧,并展示了如何在不同工具(如 Cherry-Studio、Cline 和 Cursor)中配置云端 MCP 服务。
1600 11
借助 serverless 将 MCP 服务部署到云端
|
NoSQL 关系型数据库 OLAP
如何选择最合适的数据库,帮助企业及个人业务更好的开展
如何选择最合适的数据库,帮助企业及个人业务更好的开展
|
网络协议 JavaScript 前端开发
将websocket封装成一个class,断线可重连
将websocket封装成一个class,断线可重连
684 3
UART子系统(八)UART驱动情景分析_注册
UART子系统(八)UART驱动情景分析_注册
222 1
UART子系统(八)UART驱动情景分析_注册
|
存储 监控 安全
JVM内存管理机制&线上问题排查
本文主要基于“深入java虚拟机”这本书总结JVM的内存管理机制,并总结了常见的线上问题分析思路。文章最后面是我对线上故障思考的ppt总结。 Java内存区域 虚拟机运行时数据区如下图所示: 15291199000153.jpg 方法区:方法区又称为永生代(Permanent Generation)是线程共享的内存区域。
3331 0
|
机器学习/深度学习 开发者 iOS开发
快速上手·10分钟完成一个引导页界面
快速上手·10分钟完成一个引导页界面
701 0
UART子系统(十一)UART驱动情景分析_write
UART子系统(十一)UART驱动情景分析_write
276 0
UART子系统(十一)UART驱动情景分析_write

热门文章

最新文章