找回密码
 立即注册

Linux内核驱动程序开发

2024-11-21 20:43| 发布者: admin| 查看: 229| 评论: 0|来自: 知乎

摘要: 一、块设备介绍 块是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性读到缓冲区。 块设备是与字符设备并列的概 ...

一、启动流程

基本的启动流程


交叉开发启动流程

如上面的开发环境

开发内核驱动时,在上位机中,编译为内核后,只需要将内核拷贝到/opt/tftpboot目录下即可

开发应用程序时,在上位机中,只需要将交叉编译好的程序,拷贝到/opt/rootfs目录下,在开发板中就可以执行。


内核移植步骤


Linux驱动程序概述



二、内核模块


一个内核模块至少包含两个函数:初始化函数卸载函数。


内核模块<Hello模块>




构建模块:模块代码写好后,下一步就是编译模块了。

编译模块第一步就是决定在哪里管理模块源码了。


有两个选择:

1、把模块源码加入内核源代码树

2、在内核源代码树之外维护和构建你的模块源码


模块源码加入内核源代码树中操作步骤

1、将模块源码放到内核源码中:如放到drivers/char/目录下


2、添加配置选项。在make menuconfig里并没有这个驱动的配置选项。需要添加。

具体是在Kconfig文件添加配置选项。


3、选中配置选项


4、然后在.config文件中找到配置选项


5、然后在makefile中添加编译目标



6、编译内核 make




内核源代码树之外维护和构建你的模块源码操作步骤


1、创建一个新的目录用于编写模块源码和Makefile

makefile的内容为obj-m+=hello_module.o


2、安装模块:将ko文件放到根文件目录中。


3、模块的加载和卸载





三、字符设备驱动



设备驱动的概括





一些重要的数据结构















字符设备驱动程序编写的流程

1) 编写硬件底层操作函数实现 open,release,write,read

2) 创建一个 file_operations结构

3) 申请设备号

4) 初始化 cdev结构

5) 注册 cdev 结构




生成设备文件的命令

mknod /dev/first_drv c 主设备号 次设备号




四、字符设备驱动框架





在驱动开发中,当应用程序通过系统调用打开文件时,内核会创建一个 file 结构。该 file 结构中的 f_op 字段指向与该文件关联的 file_operations 结构,以便内核根据需要调用相应的驱动程序操作来处理文件访问请求。







路过

雷人

握手

鲜花

鸡蛋

相关分类

QQ|Archiver|手机版|小黑屋|软件开发编程门户 ( 陇ICP备2024013992号-1|甘公网安备62090002000130号 )

GMT+8, 2025-1-18 10:00 , Processed in 0.027362 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

返回顶部