嵌入式操作系统实验五 设备驱动.doc

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式操作系统实验五 设备驱动

实验五 字符设备驱动 Makefile 使用了设备驱动课上的编译驱动模块的“万能makefile”只需改一下依赖的文件名即可 LINUX_KERNEL:=$(shell uname -r) KERNELDIR = /usr/src/linux-headers-$(LINUX_KERNEL) PWD := $(shell pwd) //KERNELDIR为内核路径,/usr/src/下存放内核,pwd 变量取得当前的路径 CC = $(CROSS_COMPILE)gcc obj-m := driver_demo.o //CC为编译器的路径,CROSS_COMPILE为已经设定好的内核交叉编译器路径,如arm-linux-,与后面的 gcc链接即为arm-linux-gcc moudles: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules //执行make modules命令,make会进入KERNEL_DIR目录执行此目录下的Makefile,然后在返回PWD目录执行自己写的Makefile。 modules_install: cp driver_demo.ko $(INSTALLDIR) //执行make install命令,会将驱动拷贝到INSTALLDIR目录下。 clean: rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions //执行make clean命令,会将生成的.o及其它中间文件删除。 也可以使用PPT上给出的makefile格式(千万注意格式,特别是空格) obj-m:=xxx.o KD ?=/lib/modules/$(shell uname -r)/build PWD :=$(shell pwd) default: $(MAKE) -C $(KD) M=$(PWD) modules clean: rm $(obj-m) *.o *.ko Module* module* *.mod.c Makefile的语法机制比较复杂,而且非常重要,比如分布在内核源码各个文件夹中的makefile文件定义了内核的编译规则等等,可以作为一个专项来学习,它的可读性比较差,使用了大量的简化符号,但本质都是gcc命令在makefile规则下的集合。Makefile 的作用是根据配置的情况,构造出需要编译的源文件列表,然后分别编译,并把目标代码链接到一起,最终形成 Linux 内核二进制文件。编译模块 执行make命令,进行编译 生成如下文件: 安装驱动模块 insmod driver_demo.ko Lsmod显示加载进内核的所有模块 cat /proc/devices查看系统中设备 相关:cat主要有三大功能: 1.一次显示整个文件。 $ cat filename 2.从键盘创建一个文件。 $ cat filename 只能创建新文件,不能编辑已有文件. 3.将几个文件合并为一个文件。 $cat file1 file2 file 相关: /proc/devices/下的设备是驱动程序生成的,它可产生一个major供mknod作为参数。 /dev/下的设备是通过mknod加上去的,用户通过此设备名来访问驱动。也就是说proc/device是显示系统拥有的所有外部设备(驱动程序注册),而dev是通过建立节点生成的所有的设备文件,外部设备面向程序员的接口 252 memdevice是我们加载驱动模块时向内核注册的设备,它就是一个cdev结构体。系统为我们分配了主设备号252。 3、在/dev下建立设备文件(结点): 结点的名称根据程序中你定义的,要访问的结点名称而定。建立节点对应的设备号与系统为驱动模块分配的一致即可。 test_demo.c里访问的设备文件名称是memdevice0,所以我们建立设备文件(结点)时使用该名称,但设备号要与系统分配的设备号保持一致。 然后执行mknod /dev/memdevice0 c 252 0 来建立结点,随后查看/dev下建立的结点。一定要在dev目录下建立节点,linux系统默认从那个目录下寻找驱动文件。 结点建立成功。 4、编译并运行应用程序,它使用模块中的函数,用以验证驱动的可动性。 执行gcc -o test_demo test_demo.c命令,生成test_demo可执行文件。或者直接gcc test_demo.c默认生成a.out 验证驱动程序a.out运行结果如下 5、驱动模块卸载 卸载驱动模块,并删除设备结点。 sudo rmmod driver_demo.ko rm -rf mmdevice

文档评论(0)

wuyuetian + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档