嵌入式驱动开发Word格式.docx
《嵌入式驱动开发Word格式.docx》由会员分享,可在线阅读,更多相关《嵌入式驱动开发Word格式.docx(20页珍藏版)》请在冰豆网上搜索。
二、实验内容及步骤
预期结果
(或其概述)
实验结果(可截全图或部分图)
cd/
ls
列出当前目录中的文件,但不包含隐含文件。
[root@localhostroot]#ls
anaconda-ks.cfgDocumentsinstall.log.syslogSettingsApplicationsinstall.logopen.czylinux
ll
显示文件或子目录的详细信息,包括文件类型和权限、文件状态、所有者、组、大小、修改时间和文件名。
[root@localhostroot]#ll
总用量88
-rw-r--r--1rootroot9122009-06-14anaconda-ks.cfg
drwxr-xr-x6rootroot40962009-06-14Applications
cd/tmp
进入/tmp,列出其所有文件及目录。
[root@localhostroot]#cd/tmp
[root@localhosttmp]#ls
jd_sockV4qcop-msg-qpessh-XXDy3Hje
kde-rootqcop-msg-quicklauncherssh-XXt1P8AY
mkdirabc
建立目录abc,显示可看到建立成功。
[root@localhosttmp]#mkdirabc
abcqcop-msg-filebrowserssh-XX5MvE75
cdabc
mkdir123
进入abc,并建立目录123,显示成功。
[root@localhosttmp]#cdabc
[root@localhostabc]#mkdir123
[root@localhostabc]#ls
123
cd..
rm–rfabc
返回到上级目录,删除当前目录下的子目录abc,包含其下所有文件和子目录,并不提示用户确认。
[root@localhosttmp]#rm-rfabc
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
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–tonny
切换用户。
[tonny@localhosttonny]$suroot
Password:
[root@localhosttonny]#sutonny
[root@localhosttonny]#
ps-aux
显示进程。
[root@localhosttonny]#ps-aux
USERPID%CPU%MEMVSZRSSTTYSTATSTARTTIMECOMMAND
root10.50.0136884?
S01:
120:
04init
root20.00.000?
SW01:
00[keventd]
root30.00.000?
00[kapmd]
root40.00.000?
SWN01:
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:
TXpackets:
19errors:
0carrier:
ifconfigeth0down
关闭eth0端口。
显示端口已关闭。
[root@localhostroot]#ifconfigeth0down
[root@localhostroot]#
Messagefromsyslogd@localhostatThuJan100:
11:
052004...
localhostkernel:
vmxnet_close:
failedtofinishallpendingtx.
loLinkencap:
LocalLoopback
inetaddr:
127.0.0.1Mask:
255.0.0.0
UPLOOPBACKRUNNINGMTU:
16436Metric:
ifconfigeth0up
重新开启端口。
显示端口重开。
[root@localhostroot]#ifconfigeth0up
UPBROADCASTRUNNINGMULTICASTMTU:
55errors:
clear
清空界面
[root@localhostroot]#clear
三、思考题
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(需自建)
查看到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
模块
rmmodhello_module_1
卸载模块
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
列出文件
显示加载的模块
insmodhello_module_2.o
加载hello_module_2.o
rmmodhello_module_2
删除模块
显示模块
实验源码:
1、为什么要安装交叉编译工具?
因为开发板和PC机的体系结构不一样,PC端编译工具编译的文件不能在开发板上运行。
通过这个实验,我对模块程序的开发流程有了一定的认识和理解,初步掌握了模块程序查看、加载、卸载的命令,能够独自编写出简单的模块程序。
在实验中,做到条理清晰,认真仔细,还是很容易掌握这部分内容的。
实验5-6LED驱动程序
2013/10/16
1、掌握LED驱动程序的框架
2、掌握有关LED驱动的数据结构
3、了解LED驱动的系统调用
cd/root/zylinux/drive(无则自建)
mkdirled_driver
切换到drive,创建目录,列出目录
[root@localhostdrive]#mkdirled_driver
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
make
编辑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
***[magic-leds.o]Error127
[root@localhostleds]#ls
leds.komagic-leds.cmagic-leds.oMakefile
cd/root/zylinux/drive
mkdirtest
cdtest
mkdirled
cdled
切换drive目录创建testled目录。
[root@localhostleds]#cd/root/zylinux/drive
[root@localhostled_driver]#mkdirtest
[root@localhostled_driver]#cdtest
[root@localhosttest]#mkdirled
[root@localhosttest]#cdled
vimain.c
编辑main.c函数
编辑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
insmodleds.ko
加载leds.ko模块
cdylf/drive/led_driver/test
./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、掌握按键驱动程序开发常用的系统调用
mkdirkey_driver
建立key_driver目录
cdkey_driver
mkdirkey
cdkey
切换到key_drive.创建key目录
vimagic-key.c
编写magic-key.c
建立相关目录
编写main.c
编辑makefile文件,显示列表
cdylf/drive/key_driver/driver
insmodkey.ko
加载key.ko
cdylf/drive/key_driver/test
./key
运行key,按下开发板的KEY1几次超级终端就显示几次
1、请简要说明net_device和sk_buf在网络驱动程序中所起的作用
net_device结构体提供了对所有网络设备的操作集合;
sk_buf用于管理套接字缓冲区的结构,在数据包的发送和接收中起着重要的作用,Linux网络各层之间的数据发送都是通过sk_buf来进行的。
通过此次实验,我对按键驱动程序的框架有了比较深刻的了解和掌握,理解了有关按键驱动的数据结构,对按键驱动的系统调用也有了一定的了解。
由于上次做了LED驱动程序的实验,因此这次做按键驱动程序,上手要快一些,能独立完成这个实验。
不过在实验时仍要小心仔细,不要大意。