Linux设备驱动学习(一)

2019-07-12 17:24发布

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