Linux驱动程序

本文介绍了嵌入式系统中的设备驱动开发,包括字符设备、块设备和网络接口的分类,以及开发流程与常用命令。重点讲解了如何编写驱动程序,并提供实际操作步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 分类;

主要分为三类:字符设备(character device)、块设备(block device)和网络接口(network interface)。

字符设备是能够像字节流(比如文件)一样被被访问的设备,就是说它的读写是以字节为单位的。块设备的数据是以块的形式存放,比如NANDflash上的数据是以页的单位存放的。对用户而言,字符设备和块设备的访问方式没有差别。

块设备的特别之处:

(1)操作硬件的接口实现方式不一样;

块设备驱动先将用户发来的数据组织成块,再写入设备,或从设备中读出若干快数据,再从中跳出用户需要的数据。

(2)数据块上的数据可以有一定的格式;

2 驱动的开发:

驱动编写的难点不是硬件的具体操作,而是弄清楚现有驱动程序的框架,在这个框架中加入这个硬件。

编写一个驱动的大致流程:

(1)查看原理图,熟悉硬件设备的操作方法;

(2)在内核中找到相近的驱动程序,以这个为模板;

(3)实现驱动的初始化:比如向内核注册这个驱动程序,这样应用程序传入文件名时,内核才能找到相应的驱动程序;

(4)设计所要实现的操作,比如open,close,read,write等函数;

(5)实现中断服务(中断并不是每个设备驱动所必须的);

(6)编译该驱动到内核中,或使用insmod加载;

(7)测试驱动程序。

3 常用的命令(与模块相关)

在配置内核时,如果将某个驱动的配置项设为m,则对应的驱动将会被编译为一个模块,扩展名为.ko,可以使用

insmod加载,rmmod卸载,lsmod查看内核已经加载了哪些模块(保存在文件/proc/modules中,所以也可以用cat /proc/modules)。

modinfo 可以查看与模块有关的信息;

modprobe挂载新模块以及新模块相依赖的模块modprobe我们常用的功能就是挂载模块,在挂载某个内核模块的同时,这个模块所依赖的模块也被同时挂载;这是于insmod挂载模块有区别的地方。当然modprobe也有列出内核所有模块,还有移除模块的功能;下在我们举个例子说一说咱们常用的功能和参数;

modprobe l 可以查看所有的模块,包括挂载的和没有挂载的。

mknod:创建特殊文件,只能由root用户或是系统组成员运行, mknod name {b|c} Major Minor

顺便说下:mount命令

用于挂载一个文件系统,也可以将windows的分区作为Linux的一个文件挂载到Linux的一个空文件夹下,从而将windows的分区和/mnt这个目录联系起来,

格式:mount [-参数] [设备名称] [挂载点]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值