人机交互实验册_第1页
人机交互实验册_第2页
人机交互实验册_第3页
人机交互实验册_第4页
人机交互实验册_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、学 生 实 验 报 告(理工类)课程名称: 人机交互技术 专业班级:12软件工程(1)班 学生学号: 1205107003 学生姓名: 吴运德 所属院部:南京国际软件学院 指导教师: 陈圣国 20 13 20 14 学年 第 1 学期 金陵科技学院教务处制实验报告书写要求实验报告原则上要求学生手写,要求书写工整。若因课程特点需打印的,要遵照以下字体、字号、间距等的具体要求。纸张一律采用A4的纸张。实验报告书写说明实验报告中一至四项内容为必填项,包括实验目的和要求;实验仪器和设备;实验内容与过程;实验结果与分析。各院部可根据学科特点和实验具体要求增加项目。填写注意事项(1)细致观察,及时、准确、

2、如实记录。(2)准确说明,层次清晰。(3)尽量采用专用术语来说明事物。(4)外文、符号、公式要准确,应使用统一规定的名词和符号。(5)应独立完成实验报告的书写,严禁抄袭、复印,一经发现,以零分论处。实验报告批改说明实验报告的批改要及时、认真、仔细,一律用红色笔批改。实验报告的批改成绩采用百分制,具体评分标准由各院部自行制定。实验报告装订要求实验批改完毕后,任课老师将每门课程的每个实验项目的实验报告以自然班为单位、按学号升序排列,装订成册,并附上一份该门课程的实验大纲。实验项目名称: 图形用户界面设计 实验学时: 4 同组学生姓名: 实验地点: 工科楼A205 实验日期: 11 月 4 日 实验

3、成绩: 批改教师: 陈圣国 批改时间: 实验1 图形用户界面设计一、实验目的和要求1)熟悉图形用户界面的设计原则2)利用一种设计工具完成图形化的用户界面设计3)记录系统分析及层次结构设计的过程,调试程序要记录调试过程中出现的问题及解决办法;4)编写程序要规范、正确,上机调试过程和结果要有记录,不断积累编程及调试经验;5)做完实验后给出本实验的实验报告。二、实验仪器和设备奔腾以上计算机,Windows XP 、Visual Studio三、实验过程利用常用的设计工具完成一个通用图形用户界面设计,要遵循界面设计的一般原则,注意颜色的使用,学会使用图标、按钮、屏幕布局、菜单和对话框的设计。主要步骤:

4、熟悉开发环境分析所要实现的功能编程实现程序清单:界面图主程序using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespace 银行储蓄处理系统 public partial class load : Form public load() InitializeComponent(); private void Form1_Load

5、(object sender, EventArgs e) /*登陆代码部分*/ private void queding_Click(object sender, EventArgs e) if (textBox1.Text.Trim() = ) MessageBox.Show(请输入用户名!, 提示); else if (textBox1.Text.Trim() = 1234 & textBox1.Text.Trim() = 1234) this.Hide(); Mainform maiform1 = new Mainform(); maiform1.ShowDialog(); else M

6、essageBox.Show(账号或密码有误,请重新输入!, 提示); textBox1.Clear(); textBox2.Clear(); /*退出代码部分*/ private void quxiao_Click(object sender, EventArgs e) this.Close(); using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windo

7、ws.Forms;namespace 银行储蓄处理系统 public partial class Mainform : Form public Mainform() InitializeComponent(); private void Mainform_Load(object sender, EventArgs e) private void 退出系统ToolStripMenuItem_Click(object sender, EventArgs e) DialogResult Digrst = MessageBox.Show(是否退出银行储蓄处理系统?, 提示信息, MessageBoxB

8、uttons.YesNo, MessageBoxIcon.Question); if (Digrst = DialogResult.Yes) Application.Exit(); else if (Digrst = DialogResult.No) return; private void 存款ToolStripMenuItem_Click(object sender, EventArgs e) Cunkuan cun = new Cunkuan(); cun.ShowDialog(); using System;using System.Collections.Generic;using

9、System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespace 银行储蓄处理系统 public partial class Cunkuan : Form public Cunkuan() InitializeComponent(); private void button2_Click(object sender, EventArgs e) if (textBox1.Text.Trim() = 123456 | textBox2

10、.Text.Trim() = 123456) Addkehu addkehu = new Addkehu(); addkehu.ShowDialog(); else MessageBox.Show(请输入正确信息!, 提示); private void button1_Click(object sender, EventArgs e) this.Close(); using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;usin

11、g System.Text;using System.Windows.Forms;namespace 银行储蓄处理系统 public partial class CreateRole : Form public CreateRole() InitializeComponent(); private void button2_Click(object sender, EventArgs e) this.Close(); private void CreateRole_Load(object sender, EventArgs e) 四、实验结果与分析 菜单在图形界面的应用程序中使用得非常普遍,是

12、软件界面设计的一个重要组成方面,描述了一个软件的大致功能和风格。菜单中的选项在功能上与按钮相当,一般具有下列一种或几种类型的选项:命令项、菜单项和窗口项。菜单的结构一般有单一菜单、线状序列菜单、树状结构菜单、网状结构菜单等,其中树状结构菜单是最常见的结构。作人员的重要操作要有信息反馈、操作可逆、设计良好的联机帮助、合理划分并高效地使用显示屏、保证信息显示方式与数据输入方式的协调一致五、讨论、思考题图形用户界面的应用程序与控制台应用结构的主要区别体现在哪些地方?图形界面程序基于一个无穷的消息循环。直到退出消息时,程序才终止。而HYPERLINK /search?word=控制台程序&fr=qb_

13、search_exp&ie=utf8控制台程序是一个简单的直线型结构,运行到最后一段代码就停止。实验项目名称:多通道用户界面 实验学时: 4 同组学生姓名: 实验地点: 工科楼A205 实验日期: 11 月 18 日 实验成绩: 批改教师: 陈圣国 批改时间: 实验2 多通道用户界面设计一、实验目的1) 了解常见的多通道用户界面2)查找资料,熟悉一种多通道用户界面并写出综述二、实验要求(1)记录系统分析及结构设计的过程,调试程序要记录调试过程中出现的问题及解决办法;(2)编写程序要规范、正确,上机调试过程和结果要有记录,不断积累编程及调试经验;(3)做完实验后给出本实验的实验报告。三、实验设备

14、、环境奔腾以上计算机,Windows XP 四、实验步骤及内容(一) 实验内容:要求上网查找资料,熟悉一种多通道用户界面并写出综述,可以是眼动跟踪、手势识别、三维输入、语音识别、表情识别、手写识别等。(二)实验步骤:1)借助图书馆的中英文参考文献资料以及网络,确定出一种多通道用户界面;2)完成对该多通道用户界面的综述(包括定义、发展历史、当前的应用、主要的研究方法分类、以及发展前景以及中英文参考文献(至少各5篇))语音识别多通道用户界面定义 随着计算机技术的发展,人们迫切需要一种更加自然的、更加能为多数人所接受的方式与计算机沟通。在人机对话方面寻求最好的语音信息交换手段是发展人机语音通信和新一

15、代智能计算机的主要组成部分。随着计算机的普及,越来越多的人在使用计算机,如何给不熟悉计算机的人提供一个友好的人机交互手段,逐渐引起了人们的重视。从而也就诞生了计算机语音学。计算机语音学覆盖了广泛的研究活动,包括语音识别、语音合成、语音编码、自然语言理解、机器翻译等。语音识别技术是计算机通过识别和理解的过程把语音信号转变为相应的文本文件或命令的技术。当人们想对计算机说话时,通常首先需要进行语音识别,即将声音信号转换成单词流。发展历史语音识别的研究工作大约开始于20世纪50年代,当时AT&T Bell实验室基于共振峰提取技术实现了第一个可识别十个英文数字的语音识别系统Audry系统。60年代,计算

16、机的应用推动了语音识别的发展。这时期的重要成果是提出了动态时间规划(DP)和线性预测分析技术(LPC),其中后者较好地解决了语音信号产生模型的问题,对语音识别的发展产生了深远影响。70年代,语音识别领域取得了较大进展。在理论上,LP技术得到进一步发展,动态时间归正技术(DTW)基本成熟,特别是提出了矢量量化(VQ)和隐马尔可夫模型(HMM)理论。在实践上,实现了基于线性预测倒谱和DTW技术的特定人孤立语音识别系统。80年代,MFCC的参数提取技术和HMM模型的深入使用使得语音识别技术得到进一步的发展,语音识别的问题逐步在理论体系上得到了比较完整和准确的描述,同时在实践上又逐步研发出效率较高的解

17、决算法。90年代以来,在美国国防部的Darpa测试、Ears计划、近期的Gales计划,以及我国863计划等推动下,一大批高水平的研究机构和企业加入到语音识别的研究领域,极大地推动了语音识别技术的发展和应用。语音识别系统已经从过去的小词汇量、孤立词识别、特定人识别、安静环境等简单任务逐步发展到大词汇量、连续语音、非特定人、噪声环境下的识别任务,从单纯的语音识别任务发展到语音翻译任务,从实验室系统走向商用系统。 最近年里,语音识别技术的显著进展,带来了高性能的算法和系统。用于语音拨号、语音命令控制、简单的数据输入和准备结构化文档的语音识别工具已经开始出现。主要的研究方法分类语音识别技术是计算机通

18、过识别和理解的过程把语音信号转变为相应的文本文件或命令的技术。一个完整的语音识别系统应包括以下三个部分:语音特征提取 语音信号在完成模/数转换后,还要进行特征提取,一方面为了获得语音的本质特征;另一方面还可以进行数据的压缩。目前通用特征提取的方法是基于语音帧的,即将语音信号分为有重叠的若干帧,对每一帧提取语音特征。声学模型声学模型是用于从语音到音节的概率计算。在识别时将提取的语音特征与声学模型比较并匹配,以获得最佳的识别效果。目前广泛采用的声学建模法有:隐马尔科夫模型建模和上下文相关建模。语言模型语言模型用于计算从音节到字的概率。目前,语言模型主要有:规则模型和统计模型两种。语音识别的过程分为

19、三个步骤:预处理、识别和后处理。预处理包含波形硬件采样率的确定、分帧的大小和帧移策略的确定;剔除噪声的带通滤波、高频预加重处理、各种变换策略;波形的自动切分。首先对模拟语音信号采样,将其数字化。连续语音流切分是找出语音信号中的各种识别基元如音素、音节、半音节、声韵母、单词或意群等的始点和终点的位置,进而将对连续语音的处理变为对各个语音单元的处理。语音端点检测指的也是连续语音流切分。识别包含特征参数提取;参数模板存储及识别。识别语音的过程,实际上是对语音特征参数模式的比较和匹配的过程。寻找一个既能充分表达语音特征又能彼此区别的、较稳定的特征参数是很重要的。语音识别系统常用的特征参数有线性预测系数

20、、倒频谱系数、平均过零率、平均能量、短时频谱、共振蜂频率及带宽等。识别参数的选择着眼于能得到高的识别率,由于有些参数的提取较为复杂,计算较费时,因而要折衷考虑选用哪些参数并确定采用哪种识别方法。后处理包括自动分词、词类分析、词义分析、词用分析、语法分析、句法分析、同音词判别等。后处理是利用语言学知识库中的知识,按一定的推理策略,把识别出来的拼音转换成汉字并理解语句的含义。语言学知识库中有词汇、语法、句法、语义、语用和常用词语搭配等知识。发展前景21世纪是信息和网络的时代,Internet和移动通信、固话通信的网络把全球各地连接起来。自然口语对话、电子商务、信息索取、数字图书馆、语音翻译、远程

21、HYPERLINK / t _blank 教育等一系列的人类活动都可在网络上实现。语音识别系统的出现,会让人更加自由的沟通,让人在任何地方,任何时间,对任何事都能够通过语音交互的方式,方便地享受到更多的社会信息资源和现代化服务。这必然会成为语音识别技术研究和应用的重要发展趋势。参考文献1 柳春 语音识别技术研究进展J 甘肃科技2 杨尚国 语音识别技术概述J 福建电脑3 熊燕 抗噪声语音识别技术研究J 中国科技信息 4 刘筠 一种新型语音识别系统J 成都大学学报(自然科学版) 5 马斌 基于小波变换的DSP语音识别系统J 低压电器6 英锋 基于SPCE061A的语音识别系统的设计J 微计算机信息

22、五、讨论、思考题简要讨论人机交互界面的发展趋势。 人机交互和计算机用户界面刚刚走过基于字符方式的命令语言式界面,目前正处于图形用户界面时代。但是,计算机科学家并不满足于这种现状,他们正积极探索新型风格的人机交互技术。当前语音识别技术和计算机联机手写识别技术的商业成功让人们看到了自然人机交互的曙光。虚拟现实和多通道用户界面的迅速发展显示出未来人机交互技术的发展趋势是追求所谓“人机和谐”的多维信息空间和“基于自然交互方式的”的人机交互风格。多通道用户界面与多媒体用户界面一道共同提高人机交互的自然性和效率。多通道用户界面主要关注人机界面中用户向计算机输入信息以及计算机对用护意图理解的问题,它所要达到

23、的目标可归纳为如下方面:a.交互自然性,使用户尽可能多地利用已有的日常技能与计算机交互,降低认识负荷;b. 交互高效性,使人机通讯信息交换吞吐量更大、形式更丰富,发挥人机彼此不同的认知潜力;c. 吸取已有人机交互技术的成果,与传统的用户界面特别是广泛流行的WIMP/GUI兼容,使老用户、专家用户的知识和技能得以利用,不被淘汰。 我们认为,自然人机交互模式是以直接操纵为主的、与命令语言特别是自然语言共存的人机交互形式。理想的人机交互模式就是“用户自由”。附录资料:不需要的可以自行删除 busybox详解制作根文件系统详解制作根文件系统 一、FHS(Filesystem Hierarchy Sta

24、ndard)标准介绍当我们在linux下输入ls / 的时候,见到的目录结构以及这些目录下的内容都大同小异,这是因为所有的linux发行版在对根文件系统布局上都遵循FHS标准的建议规定。该标准规定了根目录下各个子目录的名称及其存放的内容:目录名存放的内容/bin必备的用户命令,例如ls、cp等/sbin必备的系统管理员命令,例如ifconfig、reboot等/dev设备文件,例如mtdblock0、tty1等/etc系统配置文件,包括启动文件,例如inittab等/lib必要的链接库,例如C链接库、内核模块/home普通用户主目录/rootroot用户主目录/usr/bin非必备的用户程序,

25、例如find、du等/usr/sbin非必备的管理员程序,例如chroot、inetd等/usr/lib库文件/var守护程序和工具程序所存放的可变,例如日志文件/proc用来提供内核与进程信息的虚拟文件系统,由内核自动生成目录下的内容/sys用来提供内核与设备信息的虚拟文件系统,由内核自动生成目录下的内容/mnt文件系统挂接点,用于临时安装文件系统/tmp临时性的文件,重启后将自动清除制作根文件系统就是要建立以上的目录,并在其中建立完整目录内容。其过程大体包括:编译安装busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录 利用交叉编译工具链,构建/lib目录 手

26、工构建/etc目录 手工构建最简化的/dev目录 创建其它空目录 配置系统自动生成/proc目录 利用udev构建完整的/dev目录 制作根文件系统的jffs2映像文件 下面就来详细介绍这个过程。二、编译安装busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录这些目录下存储的主要是常用命令的二进制文件。如果要自己编写这几百个常用命令的源程序,my god, 这简直是一个噩梦!好在我们有嵌入式Linux系统的瑞士军刀busybox,事情就简单很多。1、从 HYPERLINK / / 下载busybox-1.7.0.tar.bz22、tar xjvf busybox-

27、1.7.0.tar.bz2解包3、修改Makefile文件175 ARCH ?= arm176 CROSS_COMPILE ?= arm-linux- 4、make menuconfig配置busyboxbusybox配置主要分两部分。第一部分是Busybox Settings,主要编译和安装busybox的一些选项。这里主要需要配置:1)、Build Options - Build BusyBox as a static binary (no shared libs),表示编译busybox时,是否静态链接C库。我们选择动态链接C库。2)、Installation Options - App

28、lets links (as soft-links) - (X) as soft-links,表示安装busybox时,将各个命令安装为指向busybox的软链接还是硬链接。我们选择软链接。3)、Installation Options - (/work/nfs_root/fs_mini3) BusyBox installation prefix,表示busybox的安装位置。我们选择/work/nfs_root/fs_mini34)Busybox Library Tuning。保留Command line editing以支持命令行编辑;保留History size以支持记忆历史命令;选中T

29、ab completion和Username completion以支持命令自动补全 第二部分是Applets,他将busybox的支持的几百个命令分门别类。我们只要在各个门类下选择想要的命令即可。这里我们基本保持默认设置。1)选中Networking Utilities - httpd下的Enable -u option,以启用http服务器的功能allows the server to run as a specific user5、编译busyboxmake6、安装busyboxmake install安装完成后,可以看到在/work/nfs_root/fs_mini3目录下生成了bin

30、sbinusr/binusr/sbin目录,其下包含了我们常用的命令,这些命令都是指向bin/busybox的软链接,而busybox本身的大小不到800K:dennisdennis-desktop:/work/nfs_root/fs_mini3$ lsbin linuxrc sbin usrdennisdennis-desktop:/work/nfs_root/fs_mini3$ ls -l bintotal 740lrwxrwxrwx 1 dennis dennis 7 2010-04-03 23:57 addgroup - busyboxlrwxrwxrwx 1 dennis denni

31、s 7 2010-04-03 23:57 adduser - busyboxlrwxrwxrwx 1 dennis dennis 7 2010-04-03 23:57 ash - busybox-rwxr-xr-x 1 dennis dennis 749632 2010-04-03 23:57 busyboxlrwxrwxrwx 1 dennis dennis 7 2010-04-03 23:57 cat busybox 而普通PC机上的ls命令就有差不多80K的大小: dennisdennis-desktop:/work/nfs_root/fs_mini3$ ls -l /bin/ls-rw

32、xr-xr-x 1 root root 78004 2007-09-29 20:51 /bin/ls busybox以它娇小的身躯容纳了数以百计的命令代码,实在是让人佩服不已,其不愧嵌入式系统瑞士军刀之美誉。据说,busybox的作者身患绝症,这更让人钦佩GNU开源软件的作者们。 三、利用交叉编译工具链,构建/lib目录 光有应用程序(命令)是不够的,因为应用程序本身需要使用C库的库函数,因此还必需制作for ARM的C库,并将其放置于/lib目录。my god,要自己写C库的源代码吗?不用!还记得交叉编译工具链的3个组成部分吗?交叉编译器、for ARM的C库和二进制工具。哈哈,for AR

33、M的C库是现成的,我们只需要拷贝过来就可以了。遗憾的是:整个C库目录下的文件总大小有26M。而我们根文件系统所在分区不过区区16M而已,根本放不下。怎么办呢? dennisdennis-desktop:/work/nfs_root/fs_mini3$ du -s -si /work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib26M /work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib 需要C库目录下所有的文件吗?no,absolutely no! 让我们来分析一下glibc库目录下内容的组成。该目录下的子目录和文

34、件共分8类: 目标文件,如crtn.o,用于gcc链接可执行文件 libtool库文件(.la),在链接库文件时这些文件会被用到,比如他们列出了当前库文件所依赖的其它库文件,程序运行时无需这些文件 gconv目录,里面是各种链接脚本,在编译应用程序时,他们用于指定程序的运行地址,各段的位置等 静态库文件(.a),例如libm.a,libc.a 动态库文件 (.so、.so.0-9*) 动态链接库加载器ld-2.3.6.so、ld-linux.so.2 其它目录及文件很显然,第1、2、3、4、7类文件和目录是不需要拷贝的。由于动态链接的应用程序本身并不含有它所调用的C库函数的代码,因此执行时需要

35、动态链接库加载器来为它加载相应的C库文件,所以第6类文件是需要拷贝的。除此之外,第5类文件当然要拷贝。但第5类文件的大小也相当大。dennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ du -c -si *.so* 7.2M total 需要全部拷贝吗?非也,非也!其实,需要哪些库完全取决于要运行的应用程序使用了哪些库函数。如果我们只制作最简单的系统,那么我们只需要运行busybox这一个应用程序即可。通过执行 dennisdennis-desktop:/work/nfs_root/fs_mini3$ arm

36、-linux-readelf -a bin/busybox | grep Shared0 x00000001 (NEEDED) Shared library: libcrypt.so.10 x00000001 (NEEDED) Shared library: libm.so.60 x00000001 (NEEDED) Shared library: libc.so.6 可知:busybox只用到了3个库:通用C库(libc)、数学库(libm)、加密库(libcrypt),因此我们只需要拷贝这3个库的库文件即可。但是每个库都有4个文件,4个文件都要拷贝吗?当然不是。 dennisdennis-

37、desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ ls -l libcrypt.-*-rwxr-xr-x 1 dennis dennis 30700 2008-01-22 05:32 libcrypt-2.3.6.so-rw-r-r- 1 dennis dennis 23118 2008-01-22 05:32 libcrypt.alrwxrwxrwx 1 dennis dennis 13 2008-12-22 15:38 libcrypt.so - libcrypt.so.1lrwxrwxrwx 1 dennis dennis

38、17 2008-12-22 15:38 libcrypt.so.1 - libcrypt-2.3.6.sodennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ ls -l libm.-*-rwxr-xr-x 1 dennis dennis 779096 2008-01-22 05:31 libm-2.3.6.so-rw-r-r- 1 dennis dennis 1134282 2008-01-22 05:32 libm.alrwxrwxrwx 1 dennis dennis 9 2008-12-22 15:3

39、8 libm.so - libm.so.6lrwxrwxrwx 1 dennis dennis 13 2008-12-22 15:38 libm.so.6 - libm-2.3.6.sodennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ ls -l libc.-*-rwxr-xr-x 1 dennis dennis 1435660 2008-01-22 05:48 libc-2.3.6.so-rw-r-r- 1 dennis dennis 2768280 2008-01-22 05:31 libc.a-rw

40、-r-r- 1 dennis dennis 195 2008-01-22 05:34 libc.solrwxrwxrwx 1 dennis dennis 13 2008-12-22 15:38 libc.so.6 - libc-2.3.6.so 4个文件中的.a文件是静态库文件,是不需要拷贝的。另外3个文件是: 实际的共享链接库:libLIBRARY_NAME-GLIBC_VERSION.so。当然需要拷贝。 主修订版本的符号链接,指向实际的共享链接库:libLIBRARY_NAME.so.MAJOR_REVISION_VERSION,程序一旦链接了特定的链接库,将会参用该符号链接。程序启动时

41、,加载器在加载程序前,会检索该文件。所以需要拷贝。 与版本无关的符号链接,指向主修订版本的符号连接(libc.so是唯一的例外,他是一个链接命令行:libLIBRARY_NAME.so,是为编译程序时提供一个通用条目)。这些文件在程序被编译时会被用到,但在程序运行时不会被用到,所以不必拷贝它。关于共享库的2个符号链接的作用的特别说明:当我们使用gcc hello.c -o hello -lm编译程序时,gcc会根据-lm的指示,加头(lib)添尾(.so)得到libm.so,从而沿着与版本无关的符号链接(libm.so - libm.so.6)找到libm.so.6并记录在案(hello的EL

42、F头中),表示hello需要使用libm.so.6这个库文件所代表的数学库中的库函数。而当hello被执行的时候,动态链接库加载器会从hello的ELF头中找到libm.so.6这个记录,然后沿着主修订版本的符号链接(libm.so.6 - libm-2.3.6.so)找到实际的共享链接库libm-2.3.6.so,从而将其与hello作动态链接。可见,与版本无关的符号链接是供编译器使用的,主修订版本的符号链接是供动态链接库加载器使用的,而实际的共享链接库则是供应用程序使用的。通过以上分析,我们只需要拷贝3个库(每个库各1个主修订版本的符号链接和1个实际的共享链接库)以及动态链接库加载器(1个

43、符号链接和1个实体文件)。步骤如下:dennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ mkdir /work/nfs_root/fs_mini3/lib dennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ cp libcrypt-* /work/nfs_root/fs_mini3/libdennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/li

44、b$ cp -l libcrypt.so.* /work/nfs_root/fs_mini3/libdennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ cp libm-* /work/nfs_root/fs_mini3/libdennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ cp -l libm.so.* /work/nfs_root/fs_mini3/libdennisdennis-desktop:/work/too

45、ls/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ cp libc-* /work/nfs_root/fs_mini3/libdennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ cp -l libc.so.* /work/nfs_root/fs_mini3/lib dennisdennis-desktop:/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ cp -l ld-* /work/nfs_root/fs_mini3/lib

46、四、手工构建/etc目录 /etc目录存放的是系统程序的主配置文件,因此需要哪些配置文件取决于要运行哪些系统程序。即使最小的系统也一定会运行1号用户进程init,所以我们至少要手工编写init的主配置文件inittab。busybox的inittab文件的语法、语义与传统的SYSV的inittab有所不同。 inittab文件中每个条目用来定义一个需要init启动的子进程,并确定它的启动方式,格式为:。例如:ttySAC0:askfirst:-/bin/sh 表示子进程要使用的控制台,若省略则使用与init进程一样的控制台 表示运行级别,busybox init程序这个字段没有意义 表示ini

47、t进程如何控制这个子进程 sysinit:系统启动后最先执行,只执行一次,init进程等待它结束后才继续执行其它动作 wait:系统执行完sysinit条目后执行,只执行一次,init进程等待它结束后才继续执行其它动作 once:系统执行完wait条目后执行,只执行一次,init进程不等待它结束 respawn:启动完once进程后,init进程监测发现子进程退出时,重新启动它 askfirst:启动完respawn进程后,与respawn类似,不过init进程先输出” Please press Enter to activate this console“,等用户输入回车后才启动子进程 sh

48、utdown:当系统关机时 restart:Busybox中配置了CONFIG_FEATURE_USE_INITAB,并且init进程接收到SIGUP信号时执行,先重新读取、解析/etc/inittab文件,再执行restart程序 ctrlaltdel:按下ctrl+alt+del键时执行,不过在串口控制台中无法输入它 表示进程对应的二进制文件。如果前面有-号,表示该程序是“可以与用户进行交互的”我们制作最简单的/etc/inittab文件,其内容如下::sysinit:/etc/init.d/rcS:askfirst:-/bin/sh:ctrlaltdel:/sbin/reboot:shu

49、tdown:/bin/umount -a r 制作最简单的脚本程序文件/etc/init.d/rcS,其内容如下: #!/bin/shifconfig eth0 7修改shell脚本文件/etc/init.d/rcS的权限,以使其可被执行:# chmod a+x /etc/init.d/rcS五、手工构建最简化的/dev目录 在linux机器上,执行ls /dev可看到几百个设备文件,我需要手工创建它们吗?maybe,我只需要手工创建几个设备文件!我怎么知道我应该创建哪几个设备文件呢?管它呢,先看看开发板上可爱的linux的反应再说。 启动Linux操作系统,显示: VFS: Mounted

50、root (nfs filesystem).Freeing init memory: 112KWarning: unable to open an initial console. 这说明,内核已经成功挂载根文件系统,但却未能成功启动第1个用户进程init。通过错误消息“unable to open an initial console”搜索内核源代码,找到init/main.c文件。748 static int noinline init_post(void)749 750 free_initmem();751 unlock_kernel();752 mark_rodata_ro();753

51、 system_state = SYSTEM_RUNNING;754 numa_default_policy();755 756 if (sys_open(const char _user *) /dev/console, O_RDWR, 0) 0)757 printk(KERN_WARNING Warning: unable to open an initial console.n);758 759 (void) sys_dup(0);760 (void) sys_dup(0);761 762 if (ramdisk_execute_command) 763 run_init_process

52、(ramdisk_execute_command);764 printk(KERN_WARNING Failed to execute %sn,765 ramdisk_execute_command);766 767 768 /*769 * We try each of these until one succeeds.770 *771 * The Bourne shell can be used instead of init if we are772 * trying to recover a really broken machine.773 */774 if (execute_comm

53、and) 775 run_init_process(execute_command);776 printk(KERN_WARNING Failed to execute %s. Attempting 777 defaults.n, execute_command);778 779 run_init_process(/sbin/init);780 run_init_process(/etc/init);781 run_init_process(/bin/init);782 run_init_process(/bin/sh);783 784 panic(No init found. Try pas

54、sing init= option to kernel.);785 显然,内核错误是由175行不能打开/dev/console所致。通过查看已经安装好的linux机器的/dev/console设备文件,可知其是字符设备文件,主设备号为5,次设备号为1: dennisdennis-desktop:/work/nfs_root/fs_mini3/etc$ ls -l /dev/consolecrw- 1 root root 5, 1 2010-04-08 08:40 /dev/console 因此,我们使用下面的命令创建它: HYPERLINK mailto:dennisdennis-deskto

55、p:/work/nfs_root/fs_mini3/dev$ dennisdennis-desktop:/work/nfs_root/fs_mini3/dev$ sudo mknod console c 5 1 还需要创建其它设备文件吗?只有天知道!再看看linux的反应。 VFS: Mounted root (nfs filesystem).Freeing init memory: 112Kinit: cant open /dev/null: No such file or directory 这次我们有经验了,如法炮制,创建/dev/null设备文件:dennisdennis-deskto

56、p:/work/nfs_root/fs_mini3/dev$ sudo mknod null c 1 3 再次重启开发板上的linux,显示 VFS: Mounted root (nfs filesystem).Freeing init memory: 112Kinit started: BusyBox v1.7.0 (2010-04-03 23:53:55 CST)starting pid 229, tty : /etc/init.d/rcS Please press Enter to activate this console.starting pid 231, tty : /bin/sh

57、# 哈哈,我们成功了,终于可以K歌去了。六、创建其它空目录K完歌回来,继续战斗。dennisdennis-desktop:/work/nfs_root/fs_mini3$ mkdir home root proc sys tmp mnt var再次重启动开发板上的linux。咦,似乎有些问题。VFS: Mounted root (nfs filesystem).Freeing init memory: 112Kinit started: BusyBox v1.7.0 (2010-04-03 23:53:55 CST)starting pid 229, tty : /etc/init.d/rcS Please press En

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论