嵌入式驱动开发.docx
《嵌入式驱动开发.docx》由会员分享,可在线阅读,更多相关《嵌入式驱动开发.docx(20页珍藏版)》请在冰豆网上搜索。
嵌入式驱动开发
《嵌入式驱动开发》
实验报告
学期:
2013年第二学期
班级:
信A1013
学号:
08
姓名:
张鹏
专业:
计算机科学与技术
注意:
输入命令并运行,观察并记录输出结果。
Ø对于无法预料的预期结果可不写,或概略描述即可。
Ø若无法用截图来说明实验结果,则可用文字加以概要描述。
目录
实验1-2Linux基本命令的使用-1-
实验3-4模块程序开发简单实验-7-
实验5-6LED驱动程序-11-
实验7-8按键驱动程序-16-
注意:
更新目录页码时,右键单目录内容,“更新域”――>“只更新页码”即可
实验1-2Linux基本命令的使用
实验室/日期
2013/09/04
成绩评定
教师签名
一、实验目的
1、了解Linux系统中的文件和目录管理,掌握Linux系统中文件和目录管理相关的常用命令
2、了解Linux系统中的用户管理,掌握Linux系统中用户管理相关的常用命令
3、掌握Linux系统中其它的一些常用命令
二、实验内容及步骤
预期结果
(或其概述)
实验结果(可截全图或部分图)
cd/
ls
列出当前目录中的文件,但不包含隐含文件。
[root@localhostroot]#ls
anaconda-ks.cfgDocumentsinstall.log.syslogSettingsApplicationsinstall.logopen.czylinux
cd/
ll
显示文件或子目录的详细信息,包括文件类型和权限、文件状态、所有者、组、大小、修改时间和文件名。
[root@localhostroot]#ll
总用量88
-rw-r--r--1rootroot9122009-06-14anaconda-ks.cfg
drwxr-xr-x6rootroot40962009-06-14Applications
cd/tmp
ls
进入/tmp,列出其所有文件及目录。
[root@localhostroot]#cd/tmp
[root@localhosttmp]#ls
jd_sockV4qcop-msg-qpessh-XXDy3Hje
kde-rootqcop-msg-quicklauncherssh-XXt1P8AY
mkdirabc
ls
建立目录abc,显示可看到建立成功。
[root@localhosttmp]#mkdirabc
[root@localhosttmp]#ls
abcqcop-msg-filebrowserssh-XX5MvE75
cdabc
mkdir123
ls
进入abc,并建立目录123,显示成功。
[root@localhosttmp]#cdabc
[root@localhostabc]#mkdir123
[root@localhostabc]#ls
123
cd..
rm–rfabc
ls
返回到上级目录,删除当前目录下的子目录abc,包含其下所有文件和子目录,并不提示用户确认。
[root@localhosttmp]#rm-rfabc
[root@localhosttmp]#ls
jd_sockV4qcop-msg-qpessh-XXDy3Hje
kde-rootqcop-msg-quicklauncherssh-XXt1P8AY
cd/mnt/hgfs
whoami
进入指定目录,显示当前用户。
[root@localhosttmp]#cd/mnt/hgfs
[root@localhosthgfs]#whoami
root
pwd
显示用户当前所处目录。
[root@localhosthgfs]#pwd
/mnt/hgfs
date
显示当前时间。
[root@localhosthgfs]#date
四1月100:
24:
23CST2004
cal
显示本月日历。
[root@localhosthgfs]#cal
一月2004
日一二三四五六
123
45678910
11121314151617
18192021222324
25262728293031
su-root
cd/
useraddtonny
passwd123456
切换用户到root,添加用户tonny和密码。
[root@localhosthgfs]#su–root
[root@localhost/]#useraddtonny
useradd:
usertonnyexists
[root@localhost/]#passwdtonny
Changingpasswordforusertonny.
Newpassword:
BADPASSWORD:
itistoosimplistic/systematic
Retypenewpassword:
passwd:
allauthenticationtokensupdatedsuccessfully.
[root@localhost/]#
init6
重启。
当前系统进入重启状态。
以tonny及密码
登录后的Linux桌面图标
重启后,用新用户名和密码重新登录。
新建终端,并开始操作:
su-root
su–tonny
su-root
切换用户。
[tonny@localhosttonny]$suroot
Password:
[root@localhosttonny]#sutonny
[tonny@localhosttonny]$suroot
Password:
[root@localhosttonny]#
ps-aux
显示进程。
[root@localhosttonny]#ps-aux
USERPID%CPU%MEMVSZRSSTTYSTATSTARTTIMECOMMAND
root10.50.0136884?
S01:
120:
04init
root20.00.000?
SW01:
120:
00[keventd]
root30.00.000?
SW01:
120:
00[kapmd]
root40.00.000?
SWN01:
120:
00[ksoftirqd_CPU0]
ifconfig
配置网卡和显示网卡信息。
[root@localhostroot]#ifconfig
eth0Linkencap:
EthernetHWaddr00:
0C:
29:
75:
97:
FA
inetaddr:
192.168.38.166Bcast:
192.168.38.255Mask:
255.255.255.0
UPBROADCASTRUNNINGMULTICASTMTU:
1500Metric:
1
RXpackets:
0errors:
0dropped:
0overruns:
0frame:
0
TXpackets:
19errors:
0dropped:
0overruns:
0carrier:
0
ifconfigeth0down
ifconfig
关闭eth0端口。
显示端口已关闭。
[root@localhostroot]#ifconfigeth0down
[root@localhostroot]#
Messagefromsyslogd@localhostatThuJan100:
11:
052004...
localhostkernel:
vmxnet_close:
failedtofinishallpendingtx.
[root@localhostroot]#ifconfig
loLinkencap:
LocalLoopback
inetaddr:
127.0.0.1Mask:
255.0.0.0
UPLOOPBACKRUNNINGMTU:
16436Metric:
1
ifconfigeth0up
ifconfig
重新开启端口。
显示端口重开。
[root@localhostroot]#ifconfigeth0up
[root@localhostroot]#ifconfig
eth0Linkencap:
EthernetHWaddr00:
0C:
29:
75:
97:
FA
inetaddr:
192.168.38.166Bcast:
192.168.38.255Mask:
255.255.255.0
UPBROADCASTRUNNINGMULTICASTMTU:
1500Metric:
1
RXpackets:
0errors:
0dropped:
0overruns:
0frame:
0
TXpackets:
55errors:
0dropped:
0overruns:
0carrier:
0
clear
清空界面
[root@localhostroot]#clear
[root@localhostroot]#
三、思考题
1、如何删除一个非空的目录?
答:
答:
新建一个目录a,在其中新建目录b,c。
使用rm–rfa删除目录a,其下b,c目录也一并删除。
2、如何修改Linux虚拟机的IP地址?
答:
用命令“ifconfigeth0原IP地址目的IP地址”可达到目的,例如“ifconfigeth0192.168.23.151192.168.38.166”
四、实验总结及体会(必须写)
本次试验主要是熟悉和更好的掌握linux命令,使我们回忆起命令的使用。
过程中有一点阻碍,但经过同学和老师的指导,还是顺利的完成了任务。
Linux命令还是和很有用处的,有时用起来可能比使用窗口更加快速便捷。
只要好好掌握并熟悉命令的使用,对我们还是有好处的。
实验3-4模块程序开发简单实验
实验室/日期
2013/09/18
成绩评定
教师签名
一、实验目的
1、掌握模块程序的开发流程。
2、掌握模块程序查看、加载、卸载命令
二、实验内容及步骤
预期结果
(或其概述)
实验结果(可截全图或部分图)
cd/root/zylinux/drive(需自建)
ls
查看到drive目录下文件
[root@localhostroot]#cdzylinux/drive
[root@localhostdrive]#ls
hello_module_1.chello_module_2.c
vihello_module_1.c
(注:
源码后附)
编辑hello_module_1.c
使用下面命令对模块源码进行编译:
gcc–chello_module_1.c–DMODULE–D_KERNEL_-DLINUX–Wall–O2–I/usr/src/linux-2.4/include
lshello_module_1.o
查看文件
[root@localhostdrive]#lshello_module_1.o
hello_module_1.o
lsmod
查看已加载模块
[root@localhostdrive]#lsmod
ModuleSizeUsedbyTainted:
PF
mousedev54921(autoclean)
input58560(autoclean)[mousedev]
parport_pc90761(autoclean)
lp89960(autoclean)
parport370561(autoclean)[parport_pclp]
autofs132680(autoclean)(unused)
ide-cd357080(autoclean)
insmodhello_module_1.o
加载hello_module_1.o
模块
lsmod
查看已加载模块
rmmodhello_module_1
卸载模块
lsmod
查看已加载模块
cdtmp
vihello_module_2.c
(注:
源码后附)
编辑hello_module_2.c
使用下面命令对模块源码进行编译:
gcc–chello_module_2.c–DMODULE–D_KERNEL_-DLINUX–Wall–O2–I/usr/src/linux-2.4/include
lshello_module_2.o
列出文件
lsmod
显示加载的模块
insmodhello_module_2.o
加载hello_module_2.o
模块
lsmod
显示加载的模块
rmmodhello_module_2
删除模块
lsmod
显示模块
实验源码:
三、思考题
1、为什么要安装交叉编译工具?
答:
因为开发板和PC机的体系结构不一样,PC端编译工具编译的文件不能在开发板上运行。
四、实验总结及体会(必须写)
通过这个实验,我对模块程序的开发流程有了一定的认识和理解,初步掌握了模块程序查看、加载、卸载的命令,能够独自编写出简单的模块程序。
在实验中,做到条理清晰,认真仔细,还是很容易掌握这部分内容的。
实验5-6LED驱动程序
实验室/日期
2013/10/16
成绩评定
教师签名
一、实验目的
1、掌握LED驱动程序的框架
2、掌握有关LED驱动的数据结构
3、了解LED驱动的系统调用
二、实验内容及步骤
预期结果
(或其概述)
实验结果(可截全图或部分图)
cd/root/zylinux/drive(无则自建)
mkdirled_driver
ls
切换到drive,创建目录,列出目录
[root@localhostdrive]#mkdirled_driver
[root@localhostdrive]#ls
led_driver
cdled_driver
mkdirdriver
cddirver
mkdirleds
cdleds
切换到led_driver,创建目录dirver,leds,切换到leds
[root@localhostdrive]#cdled_driver
[root@localhostled_driver]#mkdirdriver
[root@localhostled_driver]#cddirver
[root@localhostdriver]#mkdirleds
[root@localhostdriver]#cdleds
[root@localhostleds]#
vimagic-leds.c
(源代码在压缩包zy.rar中)
编辑magic-leds.c
viMakefile
(源代码在压缩包zy.rar中)
make
ls
编辑MakeFIle,显示文件列表
[root@localhostleds]#make
arm-linux-gcc-O2-Wall-D__KERNEL__-DMODULE-I/zylinux/kernel/include-I.-march=armv4t-c-o-mapcs-cmagic-leds.c-omagic-leds.o
make:
arm-linux-gcc:
Commandnotfound
make:
***[magic-leds.o]Error127
[root@localhostleds]#ls
leds.komagic-leds.cmagic-leds.oMakefile
cd/root/zylinux/drive
cdled_driver
mkdirtest
cdtest
mkdirled
cdled
切换drive目录创建testled目录。
[root@localhostleds]#cd/root/zylinux/drive
[root@localhostdrive]#cdled_driver
[root@localhostled_driver]#mkdirtest
[root@localhostled_driver]#cdtest
[root@localhosttest]#mkdirled
[root@localhosttest]#cdled
vimain.c
(源代码在压缩包zy.rar中)
编辑main.c函数
viMakefile
(源代码在压缩包zy.rar中)
make
ls
编辑makefile文件
[root@localhostled]#make
arm-linux-gcc-O2-Wall-cmain.c-omain.o
[root@localhostled]#ls
ledmain.cmain.oMakefile
建立超级终端。
使用NFS将Linux虚拟主机的/root/zylinux目录mount到目标机的/mnt目录。
设Linux虚拟主机的IP地址为:
192.168.0.166。
在目标机上使用如下mount命令:
mount–tnfs192.168.0.166:
/root/zylinux/mnt–onolock
然后进入目标机的/mnt目录:
cd/mnt
cdylf/drive/led_driver/driver
cdleds
insmodleds.ko
加载leds.ko模块
cdylf/drive/led_driver/test
cdled
./led
运行led,开发板上的LED1闪烁后熄灭
三、思考题
1、字符设备驱动程序常用哪些数据结构?
其各自的作用是什么?
答:
常用的有file_operations,file等数据结构;file_operations定义了文件操作接口,这个结构的每一个成员的名字都对应着一个调用,起着联系应用程序和设备驱动的作用;file是执行open函数时产生的,每打开一个文件就产生一个structfile,供设备驱动关联的函数使用。
2、字符设备驱动程序包含哪些函数?
答:
包括read(),write(),open(),ioctl(),release()等接口函数,加载函数以及卸载函数。
四、实验总结及体会(必须写)
通过此次实验,我对LED驱动程序的框架有了比较深刻的了解和掌握,理解了有关LED驱动的数据结构,对LED驱动的系统调用也有了一定的了解。
我感觉这部分的知识有些难度,在做实验的时候应下些功夫,认真仔细,结合教材,一步一步的做下去,不要急于求成。
实验7-8按键驱动程序
实验室/日期
2013/10/23
成绩评定
教师签名
一、实验目的
1、掌握按键驱动程序的框架
2、掌握有关按键驱动的数据结构
3、掌握按键驱动程序开发常用的系统调用
二、实验内容及步骤
预期结果
(或其概述)
实验结果(可截全图或部分图)
cd/root/zylinux/drive(无则自建)
mkdirkey_driver
ls
建立key_driver目录
cdkey_driver
mkdirdriver
cddirver
mkdirkey
cdkey
切换到key_drive.创建key目录
vimagic-key.c
(源代码在压缩包zy.rar中)
编写magic-key.c
viMakefile
(源代码在压缩包zy.rar中)
make
ls
编辑makefile文件
cd/root/zylinux/drive
cdkey_driver
mkdirtest
cdtest
mkdirkey
cdkey
建立相关目录
vimain.c
(源代码在压缩包zy.rar中)
编写main.c
viMakefile
(源代码在压缩包zy.rar中)
make
ls
编辑makefile文件,显示列表
建立超级终端。
使用NFS将Linux虚拟主机的/root/zylinux目录mount到目标机的/mnt目录。
设Linux虚拟主机的IP地址为:
192.168.0.166。
在目标机上使用如下mount命令:
mount–tnfs192.168.0.166:
/root/zylinux/mnt–onolock
然后进入目标机的/mnt目录:
cd/mnt
cdylf/drive/key_driver/driver
cdkey
insmodkey.ko
加载key.ko
cdylf/drive/key_driver/test
cdkey
./key
运行key,按下开发板的KEY1几次超级终端就显示几次
三、思考题
1、请简要说明net_device和sk_buf在网络驱动程序中所起的作用
答:
net_device结构体提供了对所有网络设备的操作集合;sk_buf用于管理套接字缓冲区的结构,在数据包的发送和接收中起着重要的作用,Linux网络各层之间的数据发送都是通过sk_buf来进行的。
四、实验总结及体会(必须写)
通过此次实验,我对按键驱动程序的框架有了比较深刻的了解和掌握,理解了有关按键驱动的数据结构,对按键驱动的系统调用也有了一定的了解。
由于上次做了LED驱动程序的实验,因此这次做按键驱动程序,上手要快一些,能独立完成这个实验。
不过在实验时仍要小心仔细,不要大意。