Linux设备驱动学习(一)

本文介绍了Linux设备驱动的基础知识,包括驱动的分类、安装方法及如何编写和加载字符设备驱动程序。通过实例演示了如何创建设备文件并与用户空间程序进行交互。

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

这段时间学习了关于设备驱动的知识,这里给自己做个总结,给大家做个参考(所有的代码参考自国嵌)。
驱动分类:字符设备驱动网络接口驱动块设备驱动
驱动程序的安装方法:模块编译进内核

       Linux用户程序通过设备文件来使用驱动程序操作字符设备和块设备。主设备号用来反映设备的类型,此设备号用来区分同类型的设备。一般的流程是在PC上写好驱动程序,编译出模块之后拷贝到目标开发板上/lib/modules目录下(方法有很多种不详细说了,我是挂载根文件的),接着使用insmod加载进内核。

注意模块的内核需要和开发板上的内核一致。

在PC上可以使用 modinfo查看已经编译好的模块信息
license:        GPL
author:         David Xie
depends:        
vermagic:       2.6.32.2-FriendlyARM mod_unload ARMv4 
parm:           mem_major:int

开发板上可以使用 uname -r  的命令查看系统内核

[root@FriendlyARM 2.6.32.2-FriendlyARM]# uname -r 
2.6.32.2-FriendlyARM

以下是使用到的Makefile的源码:

ifneq ($(KERNELRELEASE),)

obj-m := memdev.o

else
KDIR := /opt/FriendlyARM/mini2440/linux-2.6.32.2
	
all:
	make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-
clean:
	rm -f *.ko *.o *.mod.o *.mod.c *.symvers  modul*

endif

KDIR变量表示内核所在目录,要求与开发板上的内核的一致。


       加载进内核之后可以使用cat /proc/devices查看主设备号(主设备号的分配有静态和动态之分,动态分配的主设备是未知的,需要查看之后才能建立设备文件),接着可以根据设备号建立设备文件了,以字符设备为例mknod /dev/memdev0 c 251 0,其中memdev0为设备文件名,c表示字符设备,251为主设备号,0为次设备号。这样就建立起了设备文件和驱动程序的联系了,我们可以通过/dev/memdev0设备文件来开发应用程序。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值