ImageVerifierCode 换一换
格式:DOCX , 页数:31 ,大小:331.78KB ,
资源ID:11698074      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11698074.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验手册样本.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验手册样本.docx

1、实验手册样本嵌入式Linux内核编程与驱动开发实验手册李国斌合肥学院计算机科学与技术系实验环节课时安排实验大类课时子实验标题内容1.内核编译入门( 必做) 21.1内核浏览。Source insight工具浏览 1.2内核编译实验内核编译2.内核模块驱动实验( 必做) 42.1简单模块实验 ( 1) 模块基础2.2简单模块实验 ( 2) module_init,module_exit宏2.3简单模块实验 ( 3) MODULE_LICENSEMODULE_AUTHOR等宏2.4简单模块实验 ( 4) 模块参数的传递功能2.5 简单模块实验 ( 5) 多文件模块的编译3.简单字符驱动实验( 必做

2、) 63.1简单字符设备实验( 1) 添加设备号的注册3.2简单字符设备实验( 2) 添加设备的注册3.3简单字符设备实验( 3) open、 release功能3.4简单字符设备实验( 4) read功能3.5简单字符设备实验( 5) Write功能3.6简单字符设备实验( 6) DEBUG控制3.7简单字符设备实验( 7) 创立PROC结点3.8简单字符设备实验( 8) 添加ioctl功能4.高级字符驱动实验( 必做) 64.1 PIPE实验PIPE4.2 Poll实验Poll4.3异步通知实验异步通知4.4秒表字符设备秒表字符设备4.5 Tasklet实验Tasklet实验4.6 工作队

3、列实验工作队列5.嵌入式驱动实验( 选做) 25.1 LED灯驱动程序编写实验GPIO5.2按键中断字符驱动程序编写实验按键中断5.3 编写一个sbull驱动 将一段ram空间模拟为DISK使用。 实验1.1、 内核浏览实验【实验内容】 利用工具查看内核代码。【实验目的】了解 Linux 内核源代码的目录结构及各目录的相关内容。【实验平台】 Ubantu10.10【工具介绍】Source Insight实质上是一个支持多种开发语言( java,c ,c等等) 的编辑器, 只不过由于其查找、 定位、 彩色显示等功能的强大, 常被我们当成源代码阅读工具使用。【实验练习】: ( 1) 使用sourc

4、einsight浏览内核源码。熟悉内核中代码的结构。了解内核中KCONFIG和Makefile的作用及含义。( 2) 参考其它资料, 分析内核中链表的相关代码, 熟悉内核中链表的函数及使用。【实验步骤】1. Source Insight安装及内核代码工程配置安装Source Insight并启动程序, 能够进入图1界面。在工具条上有几个值得注意的地方, 如图所示, 图中内凹左边的是工程按钮, 用于显示工程窗口的情况; 右边的那个按钮按下去将会显示一个窗口, 里边提供光标所在的函数体内对其它函数的调用图, 经过点击该窗体里那些函数就能够进入该函数所在的地方。图1 Source Insight界面

5、图由于Source Insight实质上是一个支持多种开发语言( Java, C , C+等等) 的编辑器, 只不过由于其查找、 定位、 彩色显示等功能的强大, 而被我们当成源代码阅读工具使用。因此, 为了有效的阅读源程序, 首先必须选择功能菜单上的 ”Project”选项的子菜单”New Project”新建一个项目, 项目名称能够自由选定, 当然也能够选择删除( Remove) 一个项目。当删除一个项目的时候, 并不删除原有的源代码文件,只是将该软件生成的那些工程辅助文件删除。设定之后, 将会弹出一个对话框如图2, 接受默认选择, 如果, 硬盘空间足够, 能够将第一个复选框选上, 该选项将

6、会需要与源代码大致同等的空间来建立一个本地数据库以加快查找的速度。图2 工程设置点击”OK”按钮, 接受选择后, 将会有一个新的对话框弹出, 在这个对话框里, 能够选择将要阅读的文件加入工程, 一种方式是经过在File Name中输入要阅读源代码文件的名称, 点击”Add”按钮将其加入, 也能够经过其中”Add All”和”Add Tree”两个按钮能够将选中目录的所有文件加入到工程中, 其中”Add All”选项会提示加入顶层文件和递归加入所有文件两种方式, 而”Add Tree”相当于”Add All”选项的递归加入所有文件, 能够根据需要使用, 就我来说, 更喜欢”Add Tree”一些

7、。由于该程序采用了部分打开文件的方式, 没有用到的文件不会打开, 因此, 加入数千个文件也不用担心加入的文件超出程序的所能容忍的最大值, 我就是采用”Add Tree”的方式将Linux2.4内核的四千五百九十一个文件加入的。图3 添加文件加入文件后, 点击一个文件, 能够出现使用界面, 如图4所示, 其中, 右边的那个窗口( Linux Project, 即工程窗口) 缺省按照字母顺序列出当前工程中所有的文件。图4 工作窗口点击一个文件就能够打开该文件, 显示如图5所示, 进入到右边的那个窗口分别能够以文件列表的方式, 列出所有的文件, 每个窗体下边有一排按钮, 左边的窗口( 21142.c

8、) 从左至右分别为: 按字母顺序排列所有标记、 按照文件中行数顺序排列标记、 按照类型排列标记、 浏览本地文件标记、 标记窗口属性。右边的窗口( Linux Project) 从左至右分别为: 按字母顺序文件列表、 显示文件夹、 按照文件类型归类文件、 全部文件的所有标记列表、 按照标记类型归类标记、 跳转到定义处、 显示标记信息、 浏览工程标记、 查找函数调用、 工程属性, 其中全部文件的所有标记列表选项可能要一段时间抽取标记, 同步到数据库去, 如果开始选择了建立标记数据库, 将会在今后节省同步时间, 最有用的莫过于浏览标记信息和查找函数调用, 前者能够经过”Jump”按钮在不同的地方查找

9、同样的标志, 还能够经过”Reference”按钮结合后者进行全局的标记查找。Reference功能是Source Insight的特色之一, 它能够在速度极快的在整个工程中找到所有的标记, 而且在该行程序的前边加上红色箭头的小按钮链接上。图6是一个Reference搜索后的结果, 它能够有两种模式, 一种集中显示结果, 图6显示的就是这种模式, 在这种模式下, 能够经过前边的红色箭头小按钮进入另外一种模式, 该标记的具体的所在处, 也能够经过标记的具体所在处点击红色箭头小按钮进入警种模式, 还能够经过工具条上的两个红色小箭头直接在第二种模式下前后移动, 察看相应信息。它的这个强大的功能使得阅

10、读Linux源程序有如神助。可是要注意的是, 当进行了第二次”Reference”时, 它会提示你将结果集附加在第一个结果集的后边还是取代第一个结果集。如果选择前者, 不能对结果集根据前后两次搜索结果进行分类, 然后在其子类里进行移动, 只能在整个结果集里移动; 如果, 选择后者, 结果集将会被替换为第二次搜索的结果, 略微有些不方便。图6 Reference的搜索结果 Source Insight设置1、 背景色选择 要改变背景色Options-preference-windows background-color设置背景色2、 解决字符等宽对齐问题。SIS默认字体是VERDANA, 很漂亮

11、。这网页上应该也是用的VERDANA字体。但由于美观的缘故, VERDANA字体是不等宽的。比如下面两行LlllllllllMMMMMMMMMM 同样10个字符, 长度差多了.用VERDANA来看程序, 有些本应该对齐的就歪了。解放方法是使用等宽的字体, 但肯定比较丑。比较推荐的是用Courier New。3、 解决TAB键缩进问题Options- Document Options里面的右下角Editing Options栏里, 把Expand tabs勾起来, 然后确定。OK, 现在TAB键的缩进和四个空格的缩进在SIS里面看起来就对齐咯。4、 SI中的自动对齐设置:在C程序里, 如果遇到行

12、末没有分号的语句,如IF, WHILE, SWITCH等, 写到该行末按回车, 则新行自动相对上一行缩进两列。 Option-Document option下的Auto Indient中Auto Indient Type有三种类型 None,Simple,Smart。个人推荐选用Simple类型。5、 向项目中添加文件时, 只添加特定类型的文件( 文件类型过滤器) 编辑汇编代码时, 在SIS里建立PROJECT并ADD TREE的时候, 根据默认设置并不会把该TREE里面所有汇编文件都包含进来。只加了.inc和.asm后缀的, .s后缀的没有。而且用SIS打开.s的文件, 一片黑白没有色彩,

13、感觉回到DOS的EDIT时代了解决方法是在Options-Document Options里面, 点左上的Document Type下拉菜单, 选择x86 Asm Source File, 然后在右边的File filter里*.asm; *.inc; 的后面加上*.s; 接着CLOSE就能够了。上面问题解决了, 但注意加入*.s后还需要重新ADD TREE一遍才能把这些汇编加到PROJECT里面。6、 添加文件类型用户能够定义自己的类型, Options-Document Options-add type,定义文件类型名以及文件名后缀。勾选include when adding to pro

14、jects在添加目录下文件到工程是该类文件就会添加进SI的工程。如果需要将所有文件添加进SI的工程, 能够定义一种文件类型*.*。7、 恢复ctrl+a的全选功能 经过关键词save 找到save all, 更改为ctrl+shift+a, 经过关键词select找到select all, 更改为ctrl +aSource Insight常见的快捷键: Ctrl+= :Jump to definition Alt+/ :Look up reference F3 : search backward F4 : search forward F5: go to Line F7 :Look up sy

15、mbols F8 :Look up local symbols F9 :Ident left F10 :Ident right Alt+, :Jump backword Alt+. : Jump forward Shift+F3 : search the word under cusor backward Shift+F4 : search the word under cusor forward F12 : incremental search Shift+Ctrl+f: search in project shift+F8 : hilight word【思考题】1.内核中的链表是如何实现的

16、。请查阅资料分析链表的实现细节, 给出分析报告。实验1.2、 内核编译实验【实验内容】 尝试编译内核、 新增内核代码加入到 Linux 内核结构。【实验目的】1、 了解 Linux 内核各配置选项内容和作用2、 掌握 Linux 内核配置文件.config 的作用3、 掌握 Linux 内核的编译过程4、 掌握将新增内核代码加入到 Linux 内核结构中的方法【实验平台】 Ubantu10.10【实验步骤】1. 内核源码下载解压。2. 配置内核3、 内核编译过程( 1) make mrproper: 删除所有以前在构核过程所产生的所有文件( 2) make menuconfig: 内核配置(

17、3) make dep: 寻找依存关系(2.4内核需要)( 4) make zImage: 产生压缩的核心映像文件内核编译完毕之后, 生成 zImage 内核映象文件保存在源代码的 arch/arm/boot/目录下 时间很长, 建议熟悉过程。【实验练习】: ( 课本P67) 对于一个开发者来说, 将自己开发的内核代码添加到 Linux 内核中, 需要有三个步骤。( 1) 确定把自己的开发代码放入到内核的位置; ( 2) 把自己开发的功能增加到 Linux 内核的配置选项中, 使用户能够选择此功能( 3) 构建子目录 Makefile, 根据用户的选择, 将相应的代码编译 Linux 内核中。

18、DIY: 向内核添加自己的程序A.在Linux内核中增加自己的程序步骤( 注意这里只是程序文件) : 1.将编写的源代码复制到Linux内核源代码的相应目录中。2.在目录的Kconfig文件中增加新源代码对应项目的编译配置选项3.在目录的Makefile文件中增加对新源代码的编译条目。B.在Linux内核drivers/目录中增加目录和子目录步骤: 1.所加目录为daiq, 文件如下:daiqlocalhost daiq$ tree|- Kconfig|- Makefile|- led| |- Kconfig| |- Makefile| - led.c- test.c#注意此时各个目录中的Ma

19、kefile和Kconfig文件是空的2.在新增的相应目录添加Kconfig和Makefile文件, 上面的目录中已经添加。3.修改新增目录的父目录的Kconfig和Makefile文件, 以便新增的Kconfig和Makefile能被引用。向父目录中的Makefile添加: obj-y += daiq/表示在编译过程中包含子目录daiq目录。然后修改Kconfig文件, 添加: source ”drivers/daiq/Kconfig”表示在配置时引用子目录daiq中的配置文件Kconfig。4.实际上, 要让drivers/daiq/Kconfig有效, 要在arch/arm/Kconfi

20、g文件中添加: source ”drivers/daiq/Kconfig”父目录drivers/Kconfig的修改能够不要。5.经过上面一步, 内核就能够找到所加的目录daiq了, 然后就是编辑各个目录中的Makefile和Kconfig文件, 在你添加的目录daiq中的Makefile加入: obj-$(CONFIG_TEST) += test.o #因为在daiq目录中要编译test.c文件#因此会根据CONFIG_TEST来决定编译选项 obj-y += led/#编译daiq目录中的子目录led然后Kconfig文件是: menu DaiQ device support #在make

21、 menuconfig时要显示的菜单入口config DAIQ_TESTbool Testhelp DaiQ device supportsource drivers/daiq/led/Kconfigendmenu注意: menu和endmenu的前后要加回车, 不然make menuconfig的时候会出错。再看led目录下的Makefile和Kconfig: Makefile为文件: obj-$(CONFIG_LED)+=led.oKconfig文件: config LED tristate ”led support”5.现在能够make menuconfig来配置添加自己目录daiq的驱

22、动了! 【附录】: 编译内核的常见命令精简 Linux 内核常见命令包括: Make Config, dep, clean, mrproper, zImage, bzImage, Modules, Modules_Install( 1) 、 Make config: 内核配置, 调用./scripts/Configure 按照 arch/i386/config.in 来进行配置。命令执行后产生文件.config, 其中保存着配置信息。下次在做 make config 时将产生新的.config 文件, 原文件 config 更名为 config.old(2)、 make dep: 寻找依存关系

23、。产生两个文件.depend 和.hdepend, 其中.hdepend 表示每个.h 文件都包含其它哪些嵌入文件。而.depend 文件有多个, 在每个会产生目标文件(.o)文件的目录下均有, 它表示每个目标文件都依赖于哪些嵌入文件(.h)(3) 、 make clean: 清除以前构核所产生的所有的目标文件, 模块文件, 核心以及一些临时文件等, 不产生任何文件(4)、 make rmproper: 删除所有以前在构核过程所产生的所有文件, 及除了做 make clean外, 还要删除.config, .depend 等文件, 把核心源码恢复到最原始的状态。下次构核时必须进行重新配置; (

24、5)、 make,make zImage, make bzImage: ( a) make: 构核。经过各目录的 Makefile 文件进行, 会在各个目录下产生一大堆目标文件, 如核心代码没有错误, 将产生文件 vmlinux, 这就是所构的核心。并产生映像文件system.map 经过各目录的 makefile 文件进行。.version 文件中的数加 1, 表示版本号的变化。(b)make zImage: 在 make 的基础上产生压缩的核心映像文件./arch/$(ARCH)/boot/zImage以及./arch/$(ARCH)/boot/compressed 目录下产生一些临时文件

25、。(c) make bzImage : 在 make 的 基 础 上 产 生 压 缩 比 例 更 大 的 的 核 心 映 像 文件./arch/$(ARCH)/boot/bzImage 以及./arch/$(ARCH)/boot/compressed 目录下产生一些临时文件。在核心太大时进行【思考题】1 内核内核编译的流程是怎样的? 内核代码中的KCONFIG和Makefile文件起到什么样的作用? 2 .Config文件起到什么作用? 如何在内核中添加新的驱动模块? 3 Linux内核编译完成结果有有哪些? 各有什么作用? 4 内核目录的结构是怎样的, 关键目录的含义是什么? 实验2.1 简

26、单模块实验( 1) 【实验内容】 编写一个最基本的模块, 加载模块, 观察结果【实验目的】掌握模块的基本要素及加载、 卸载、 查看工具的使用。【实验平台】 Ubantu10.10【实验步骤】 1.将文件夹ex1-hello-world复制到Linux环境中, 如: /home/linux/test $su root $cp ex1-hello-world /home/linux/test a 2.$cd /home/linux/test/ex1-hello-world 3.$make 4.经过insmod命令将模块加入内核 $insmod hello.ko 5.经过lsmod 查看内核模块 $

27、lsmod | grep hello 6.经过rmmod删除内核中的模块 $rmmod hello 7.查看源码, 适当修改, 掌握实验内容【思考题】1 内核模块的组成部分有哪些组成部分? 那些是必须的? 那些是可选的? 2 内核模块代码中Pintk函数打印的消息存放在什么位置? 需要使用什么命令查看内核打印消息? 3 模块加载和卸载时分别执行的函数是哪个? 为什么? 4 实验2.2、 简单模块实验( 2) 【实验内容】 在实验一的基础上, 加入module_init,module_exit的支持 加载模块, 观察结果。【实验目的】掌握module_init,module_exit的使用。【实

28、验平台】 Ubantu10.10【实验步骤】1.将文件夹ex2-init-exit复制到Linux环境中, 如: /home/linux/test $su root $cp ex2-init-exit /home/linux/test a 2.$cd /home/linux/test/ex2-init-exit 3.$make 4.经过insmod命令将模块加入内核 $insmod hello.ko 5.经过lsmod 查看内核模块 $lsmod | grep hello 6.经过rmmod删除内核中的模块 $rmmod hello 7.查看源码, 适当修改, 掌握实验内容实验2.3、 简单模

29、块实验( 3) 【实验内容】 在实验二的基础上, 加入模块描述信息的支持【实验目的】掌握MODULE_LICENSEMODULE_AUTHOR等宏的使用。【实验平台】 Ubantu10.10【实验步骤】1.将文件夹ex3-doc-license复制到Linux环境中, 如: /home/linux/test $su root $cp ex3-doc-license /home/linux/test a 2.$cd /home/linux/test/ex3-doc-license 3.$make 4.经过insmod命令将模块加入内核 $insmod hello.ko 5.经过lsmod 查看内

30、核模块 $lsmod | grep hello 6.经过rmmod删除内核中的模块 $rmmod hello 7.查看源码, 适当修改, 掌握实验内容8.经过modinfo查看模块信息$modinfo hell.ko实验2.4、 简单模块实验( 4) 【实验内容】 在实验三的基础上, 加入模块参数的传递功能【实验目的】掌握模块的模块参数的传递功能的使用。【实验平台】 Ubantu10.10【实验步骤】1.将文件夹ex4-param复制到Linux环境中, 如: /home/linux/test $su root $cp ex4-param /home/linux/test a 2.$cd /home/linux/test/ex4-param 3.$ma

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1