版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、工业设计概论课程论文憋了几天终于憋出了一篇勉强称得上论文的东西应付工业设计概论课期末作业. 其实没有啥独到的见解也没有啥有意义的研究成果,基本就是类似读书笔记的玩意儿,当然“书”还包括一部纪录片和几篇博客文章以及多年(才几年啊喂!)积累下来的对设计的理解。秉着全民设计的理念(我坚信着随着快速成型技术的普及,新一次工业革命即将开始!),in addition考虑到写完这篇艰涩的文章的我的痛苦,我决定将主体部分发出来祸害大众了呵呵呵.呵. 对我就是故意弄得术语满载(都怪某化学老师的言论“学过之后就要让人觉得一看就是经过专业训练的”)你们看晕了就放弃好了/难看的分割线/广义交互设计中信息的传达引言交
2、互设计(Interaction Design)诞生产生于二十世纪八十年代,由IDEO的一名创始人Bill Moggridge在一次设计会议上提出。人们对于交互设计的普遍观点是电子产品显示界面的设计,并且这个概念的创世之初也确实专指这一领域。然而随着时代的发展,交互设计的定义发生了扩充。无印良品的产品设计师深泽直人在纪录片Objectified这样描述他对交互设计的理解:“目前,交互设计主要是和软件或者屏幕打交道,不过我所设想的(交互设计)也要设计硬件,那些我们能触摸到的实体物品也都是交互设计。”1 以往的硬件设计往往是“形式遵循功能(Form follows Function)”的。即便是外星
3、人来到地球,当它看到勺子、杯子、椅子等东西的时候,它光凭形状就能够大致猜出这些产品的功能。然而要是有人递给它一只没电的iPhone,我想无论这支外星文明有多么发达,我想它都无法凭借外观来判断这块四四方方的盒子的功能是什么。是的,芯片和集成电路的出现改变了一切。“形式遵循功能”的原则受到挑战。在这种情况下,如果产品不经过设计,那么我们必将面临的是厚厚的说明书。但是只要购买过iPhone或者iPod touch的用户都知道,它们的说明书不过是便签大小的十来页纸,然而用户却可以马上开始使用产品的大部分功能,甚至还能获得一定的愉悦感。在这个例子中,优秀的交互设计起到了至关重要的作用。交互设计到底是什么
4、呢?简单的说,交互设计是人工制品、环境和系统的行为,以及传达这种行为的外形元素的设计与定义。交互设计首先旨在规划和描述事物的行为方式,然后描述传达这种行为的最有效形式。2 设计是信息的建筑,此建筑建立于信息接收者的大脑中3 ,而信息的“传达”是交互设计过程中设计师最关心的要素。而用户在使用产品的过程中也不会关注实现设计的机械的精密程度或是达成界面设计的软件编码有多么高效,用户会不自觉地跳过制造的步骤,而直接和设计者对话,努力从接收到的信息中寻找设计师想要传达的事物。本文便旨在从几个方面阐释和探讨广义的交互设计中信息传达设计的规律,现状和趋势。一、拟真:引导的明确,体验的丰富在交互过程中,用户一
5、方不单纯是信息的接收者,也要对接收到的信息进行反馈。“互”的特性让交互设计需要关注产品传达的信息中引导用户动作的部分,设计师必须在不让用户感到压力的情况下将用户的行为引导到他们所希望的方向上。这一概念早在GUI(Graphic User Interface 图形用户界面)诞生之时便形成了。为苹果设计世界上第一款GUI操作系统的设计师在几十年前就注意到了交互设计中导向性的重要。即便在分辨率非常低下而且只有黑白两色(甚至连灰度都没有分)的早起显像管显示屏上,我们也能很好地辨别出各个图形想要传达的信息:哪里看上去可以点击,哪里应该可以拖拽。而实现这一点的,便是拟真。拟真是设计中常见的装饰手段。在第一
6、代GUI操作系统中我们便可以看到,按钮通过阴影表现出突起的效果,音量控制条长得就像现实中录音机上的音量控制滑块一样。窗口的标题栏上一条条横杠表现出的较大摩擦力的感觉提示着用户这里可以通过拖拽来移动窗口,记事本甚至做出了纸角翘起的效果指示用户在这个窗口下用户可以干什么。这些元素甚至直到今天仍然被广泛地应用着。图1 世界上第一款GUI操作系统Macintosh System Software部分界面为什么交互设计中的装饰例如拟真对改进交互设计中引导的明确性有如此大的功效?因为人们生活中接触最多的毕竟还是实体。现在花很多时间和显示屏对话的人,绝大多数经历了一个很少接触虚拟交互界面的儿童时代。儿时的经
7、历和体验,往往会形成根深蒂固的深层意识,引导人生活中的每一个动作。而在虚拟交互界面设计中刻意的拟真,便是要唤醒人们在现实世界中的经历和体验,让人们能快速理解设计师的意图。非常容易理解,一旦按钮增加了光泽和阴影,它就好像凸了起来,人们会理所当然地将手指或是鼠标移动到上面点击。甚至实物的设计也可以通过刻意塑造表面模仿其他物品的质感来传递有关产品使用方法和特性的信息。iOS截图苹果在这一方面再一次走在了领先地位。观察上面两张iOS(苹果便携移动终端例如iPhone、iPad搭载的操作系统)截图中红圈内的图形。我在08年第一次接触iOS时看到左图的瞬间就明白了它的作用。按住那些横杠然后拖动,就可以改变
8、播放列表的排序。而右图是最新版本iOS中引入的通知中心(Notification Center)界面,底部模仿现实中按钮上为增加摩擦而设的凹槽的图形让人很快明白拖拉它可以如同控制卷帘门一样拖动下拉的通知中心页面。拟真给交互带来的另一种促进作用体现在用户体验上。现在的交互设计师们更加关注用户体验(User Experience)。而影响用户体验最显著的,便是信息量。虽然今天的世界据说处在一种信息过剩的状态,实际上却可能并不富裕。泛滥的只是媒介中零零碎碎的信息,每个碎片上信息量实际上很小。大脑的压力不是因为数量,而是因为有限的质量。4 很多人喜欢光着脚在鹅卵石上走,便是因为一块块石头之间微弱的差异
9、让人感受到石头中携带的岁月留下的大量信息。交互设计中的拟真便能很好地丰富用户的体验,让用户使用产品的同时享受大量而精致的信息带来的愉悦。这样的信息甚至不仅仅可以使产品体验变得丰满,更可以传达一种氛围,将用户引入恰当的环境和心情中,以便更好地引导动作。因为模仿现实让虚拟界面接近一种“感件(Senseware)”5,来唤醒人们视觉以外的感受。图2 iOS 5中精致的拟真质感设计,成为移动应用界面设计争先模仿的对象如今随着显示技术的不断发展以及新形式交互的兴起(例如触控),引导的设计更加精致明确,也更普遍。但是近年流行的拟真风格发生了极大的变化。这一点可以通过大部分软件的图标演变看出。请看下图谷歌C
10、hrome浏览器图标的演变:图3 左:Chrome 4图标 右:Chrome 19图标以往的拟真可以用“浓墨重彩”四个字来形容。高光、明度跨度非常大的渐变、又重又明显的阴影,夸张的表面纹理,复杂的图案。而现在的拟真给人一种更为平淡但同时更加细致的感受。设计师们开始注意到,虽然丰富用户的体验、传达足够的信息量很重要,但若是一味追求贴近现实,会让信息的主次关系变得模糊。事实上人眼非常敏锐,只需淡淡的一点渐变就能传达出“凸起”或“凹陷”的视觉效果。过度的装饰其实并不能增加信息量,反而会降低信息的质量,甚至干扰主体信息的传达,干扰引导的效果。为了避免这一点而打破常规的一个例子便是随着WP7(Windo
11、ws Phone 7,微软开发的手机操作系统)的出现而逐渐进入人们视野的Metro设计风格。为了让设计的传达更为直接而纯粹,Metro摒弃了一切装饰。它模拟的,是地铁等公共场所的视觉指示系统普遍采用的极端简约的感受。人们习惯于从这些视觉指示系统中获取信息,因而人们使用WP7系统手机的时候会发现信息呈现的方式非常直接而高效。当然,这样的设计风格还有诸多问题。例如由于人们不会有和地铁站告示牌进行触控交互的想法,WP7界面中的“按钮”引导就显得不那么直观了。图4 Metro UI和现实中地铁视觉指示系统的对比通过拟真来改善交互中信息传达的准确性和效率是永远不会过时的手段。但是随着社会的发展,构成人们
12、深层心理的生活经历会发生变化,生活中常见实体的材质、形态、设计风格也不断发生改变。交互设计师们必须跟上这变化的脚步,才能准确把握拟真,在交互中将用户快速、准确地引导至特定状态或行为。二、交互中障碍的消除交互中障碍一词的定义十分宽广。当人们全身心地关注于某项活动时,他们不会意识到外界的干扰,这种状态称之为“流(Flow)”。6 这个概念由芝加哥大学心理学教授Mihaly Csikszetmihalyi在流:最佳体验的心理学中提出。交互中的障碍可以归结为一切妨碍“流”的形成的因素。打断或妨碍“流”会让用户工作的效率大大降低,并让交互的体验变得非常糟糕。我们在浏览网页时页面的等待是障碍,在操作程序时
13、违背我们意愿跳出的对话框也是障碍。人的感觉是敏锐的,Android操作系统中的触控也就相比iOS延迟了几毫秒,拖拽时可能有那么一两次卡顿,却足以让前者的用户体验落下后者好几个档次。用户想要的不是和产品的直接对话,而是使用产品。人们开车的时候要是转一下方向盘就有一个提示对话框跳出来,估计每一个司机都会发疯。软件设计中的一条公理便是:无论你的界面多么酷,越少越好。7 软件常常激怒用户的一个原因便是,它不能像一个工具一样顺服地工作,而将用户引向对话框,指出我们的缺点,并要求用户响应。从用户的角度看,软件颠倒了自己的角色应该是用户提要求,软件反馈。8交互中的障碍不仅仅在虚拟界面设计中十分重要,在“购物
14、”这一过程中更凸显其效果。苹果给自己的直营店专门开发了一个免费应用,人们只要将信用卡绑定到苹果账户,去苹果直营店选购产品或配件时就只需用iPhone或者iPod扫描一下商品,无需排队无需和收银员打交道就可以完成购买。9 如今的电商巨头亚马逊成功的很大原因要归功于“一键购买(One-Click-Purchase)”按钮。只要设定了默认的支付方式、收货地址,人们在选购商品时只要按一个键就可以完成购买。想象一下原本每次都需要确认地址、付款方式、送货时间等等四五个步骤的过程被简化为一个按键,给消费者带来的障碍的减轻是显著的:人们会在意识不到自身购买行为的情况下购入相当可观数量的商品。如果去过优衣库(U
15、NIQLO,一个日本服装品牌)实体店购买服装的人都会发现,其超市模式的购衣体验会让人不自觉地购入更多衣服。在优衣库的商店中,所有的衣服都按照设计师和尺寸清楚地分门别类,人们像在超市购物一样提一个购物篮将自己选中的衣服放入其中,最后一次性全部带进试衣间进行试穿。这样,每看上一件衣服就需要和营业员沟通尺码问题,每选好一件衣服都需要进入试衣间试穿一次的障碍被消除了,这让优衣库和它的顾客同等受益。(感谢饼酱chuxcy分享亲身经历)三、交互设计中的可供性(能供性):阀下意识、非设计深泽直人在阐释他的设计理念时提到了一个概念:设计溶于行为(Design Dissolving in Behavior)。从
16、他的演讲和著作中人们可以得知,深泽直人一直在追寻用户的“阀下意识”10。左图中一个空牛奶盒被放在了护栏的口子里。人们放弃垃圾桶而选择了护栏是因为相较垃圾桶,护栏的高度更加“刚刚好”。另外一种常常被当做垃圾桶的东西便是自行车车篮,也是因为自行车车篮的三维坐标和形状都让它“刚刚好”能成为一个让人能舒适地将垃圾投入其中的垃圾桶。生活中右图的现象应该十分常见,人们将手自然地搁在车窗上也是因为车窗的性质看上去就“刚刚好”能提供一种舒适的搁手体验。图5深泽直人从 1998 年开始做的“Without Thought”为主题的研讨会就是基于他对人们这些无意识行为的观察,以及对这种人和物关系对传统设计观念的冲
17、突的思考,通常而言的设计是需要激发人的注意力。他说到太多的刺激并不是一件好事,人和物的关系应该是无意识的,和谐的,“不加思考”的。11 Many of the best examples of industrial design, I think people dont think were designed. I mean, take the posted note, its something we take for granted, people dont think of its being designed. 12 优秀的设计应当被称作“非设计”,它们不应该是刻意地追求新奇和华丽,而
18、应该给人一种“生来就该是这样”的感觉。苹果现在的设计总监Jonathan Ive同样这样描述他对优秀设计的理解:A lot of what we seem to be doing is a product like that is getting design out of the way. And I think when forms develop with that sort of reason, and theyre not just arbitrary shapes, it feels almost inevitable, it feels almost un-designed. I
19、t feels almost like, well of course its that way. Why should it be any other way? 13 人人都是潜在的设计师,而好的设计就应该像人们无意识中形成的设计一般,遵循“刚刚好”的规律。可以看出,这种“刚刚好”是物体的一种属性,而也已有人给它下了学术的、标准化的定义。它就是可供性。可供性(Affordance,另译“能供性”)是一种发生认识论,是对一个行为主体与“提供”某种条件或允许某种现象发生的环境的综合理解。14 Affordance是认知心理学家James J. Gibson造出来的一个词,并由Donald Nor
20、man在Design of Everyday Things(中译:设计心理学)一书中第一次引入到设计理论中。可供性这个概念介于客观和主观之间。比如一个与膝同高的水平、平整、有一定延伸以及一定硬度的表面它是“可供坐下的”,它看起来是客观的,不随人的意志而改变(总是“可供坐下的”),但它又是主观的,如果没有动物的存在,“可供坐下的”就会因为没有对象而失去存在的逻辑。15在交互设计中,如果方案的导出遵循可供性理论,那么得出的交互方式便会成为贴近“非设计”的自然而然的方式。例如触控交互,设计师必须告诉用户点击哪些地方是有意义的,有用的动作和反应是可感知的可供性的真正问题所在,因为客观来说我们可以在屏幕
21、的任何地方点击。作为电容触控交互设计的领头羊,苹果的设计很大程度上遵循了可供性。例如iOS中解除锁屏的操作“Slide to Unlock(移动滑块来解锁)”,即便苹果没有做这样的设计,之后一定会有人做这样的设计,因为它太自然了。相较而言,Android解锁采用的“画图形”显得更具创意,但人们可能在第一次接触时被其形状所误导。一个向右滑动的滑块很容易让人联想到拉链等具有“可打开”Affordance的实物,而Android解锁界面上那九个圆点却不具备明确的可供性暗示。现在闹得沸沸扬扬的苹果三星专利战,我认为其中苹果对三星界面的抄袭指控并不成立。苹果只是先一步采用了最自然的界面设计,而Andro
22、id为了避免雷同、做出了很多违反交互设计原则的改变。三星在制作定制Android ROM时一定是想恢复遵循可供性理论的“自然的”设计,于是和苹果相似就成了一种必然。本文第一部分的“拟真”也就是要提供一种可感知的可供性。当然,可供性的利用不仅仅局限于将产品交互方案导向最自然的状态,设计师也可以利用可供性将交互导向一些颇具创意和新意的方向。例如下图这个深泽直人为无印良品设计的CD播放器图6 无印良品壁挂式CD播放器CPD-3这个播放器被设计成壁挂式小风扇的样式。它风扇的外观让人在使用时理所当然地被导向拉扯吊绳的动作,并由风扇的可供性引入到一种“想迎接吹来的风”的心理状态,然而迎面飞来的不是风而是音
23、乐。这种将听觉和触觉联接起来的设计带给人非常独特的用户体验,这个产品也成为深泽直人的代表作之一。四、“隐形”的反馈反馈(Feedback)是交互中另一个非常重要的过程。用户在使用产品的过程中,尤其是和屏幕交互的时候,需要得知自己的动作是否很好地被产品接收并处理。很多人抱怨电容式触摸屏容易误触,就是因为“点击”的动作无法通过直接的触觉来进行反馈。当然,触控交互的设计师们也做了大量工作来改善这一状况。而这种即时的动作反馈的特点便是“隐形”。在用户没有动作时,反馈不会出现。例如触摸虚拟键盘时产生的敲击声,iOS键盘首创的“挤出”放大了的按键的效果。然而我认为无论是对用户动作还是系统状态的反馈,都可以
24、做到更加“隐形”。在虚拟键盘中的各种反馈机制,其目的无非是提升用户键入字符的准确率。而iOS键盘在提供听觉视觉反馈以外,用非常隐秘的方式提供了一个很独特的触觉反馈。事实上,这种“反馈”是否能被称为反馈还有待考证,因为用户几乎不会感觉到它的存在,但是它却有着反馈的一些特性。iOS的键盘会通过自带的字库调整用户下一次输入时各个字母对应的按键在屏幕上感应区域的大小,从而减少误触。这是对用户前一个动作的反馈,但用户不能直观地感受到自己的行为被计算机处理了。然而用户的下一个动作更容易进入正确的方向。不是通过提供引导信息让用户更正,而是直接让交互变得更不易失误,这样无形的“反馈”才是最高境界。在状态反馈中
25、,我认为“隐形”也很重要。过多的无模态反馈(modeless feedback)16 会影响人机交互中主要信息的传达。最理想的情况是这样:指示灯不工作时,它就应该消失。17 其实如今许多软件和操作系统中交互的设计都开始关注这一点,媒体播放器的设计便是最典型的例子。在最新版本的Windows Media Player中,播放控制面板被设计成半透明的浮在画面底部。当鼠标一段时间不动作时,所有的状态显示和控制按钮都会淡化消失,包括时间轴、音量控制条、循环和乱序开关图案等等,窗口中只剩下视频的画面或者音乐的专辑封面。当鼠标开始移动时,这些按钮和无模态反馈又会淡出回到人们的视野中。苹果甚至在硬件中实现了
26、指示灯的消失。MacBook Pro侧边的指示灯在不亮时便做到了完全和铝合金机身融为一体。未来随着视线追踪技术的发展,想必状态反馈的“隐形”将更加容易实现。倘若我们将视线移到屏幕底端状态栏就出现,移走就消失,想必用户不仅能低障碍地获得状态反馈,同时也能更专注于工作。参考文献和注释引文1 深泽直人在纪录片Objectified(工业设计面面观)中的话,原话是日语2 百度百科 HYPERLINK /view/426920.htm t _blank /view/426920.htm3 原研哉 设计中的设计全本 广西师范大学出版社2010年9月第一版 P1024 原研哉 设计中的设计全本 广西师范大学
27、出版社2010年9月第一版 P1096 库伯.A等 About Face 2.0交互设计精髓 电子工业出版社2005年6月第一版 P1297 库伯.A等 About Face 2.0交互设计精髓 电子工业出版社2005年6月第一版 P1308 库伯.A等 About Face 2.0交互设计精髓 电子工业出版社2005年6月第一版 P13211 iD公社 Affordance(可供性)和设计 HYPERLINK /?p=2732 t _blank /?p=273212 Alice Rawsthorn (Design Editor of International Herald Tribune)
28、 在纪录片Objectified(工业设计面面观)中的话13 Jonathan Ive (Senior Vice President of Industrial Design at Apple Inc.)在纪录片Objectified(工业设计面面观)中的话14 iD公社 Affordance(可供性)和设计 HYPERLINK /?p=2732 t _blank /?p=273215 iD公社 Affordance(可供性)和设计 HYPERLINK /?p=2732 t _blank /?p=273217 Jonathan Ive在纪录片Objectified(工业设计面面观)中的话,原话
29、是英语注释5 原研哉提出的一个概念,即带给人感觉的物件9 资料来自环球科学Scientific American杂志2012年五月号92页技术档案专栏David Pogue撰写的评论文章科技产品的繁冗之痛10 阀下意识就是无意识,荣格在本能与无意识一文中写道:“我把无意识定义为所有那些未被意识到的心理现象的总和。这些心理内容可以恰当地称之为阈下的如果我们假定每一种心理内容都必须具有一定的能量值才能被意识到的话。一种意识内容的能量值越是变低,它就越是容易消失在阈下。可见,无意识是所有那些失落的记忆、所有那些仍然微弱得不足以被意识到的心理内容的收容所。” 16 无论什么时候,信息在主要界面中显示并
30、不会停止系统的正常流程和交互,这样的反馈称为无模态反馈其他参考文献DESIGN 360观念与设计杂志2012/05董建明等 人机交互:以用户为中心的设计和评估清华大学出版社2003年9月第一版图片来源图1:中国数字设计师网 Mac OS发展24年(一) HYPERLINK /article_726.html t _blank /article_726.html图2:iD公社 今日设计中的装饰 HYPERLINK /?p=2741 t _blank /?p=2741图3:Chrome迷 HYPERLINK t _blank 图4:人人网 谢琳的日志:What is Windows Phone,
31、what is Metro UI? Tree will tell you. HYPERLINK /blog/349481400/846270520 t _blank /blog/349481400/846270520图5:iD公社 Affordance(可供性)和设计 HYPERLINK /?p=2732 t _blank /?p=2732图6:无印良品官方网站 HYPERLINK /store/cmdty/detail/4548718939374 t _blank /store/cmdty/detail/4548718939374附录资料:不需要的可以自行删除 busybox详解制作根文件系
32、统详解制作根文件系统 一、FHS(Filesystem Hierarchy Standard)标准介绍当我们在linux下输入ls / 的时候,见到的目录结构以及这些目录下的内容都大同小异,这是因为所有的linux发行版在对根文件系统布局上都遵循FHS标准的建议规定。该标准规定了根目录下各个子目录的名称及其存放的内容:目录名存放的内容/bin必备的用户命令,例如ls、cp等/sbin必备的系统管理员命令,例如ifconfig、reboot等/dev设备文件,例如mtdblock0、tty1等/etc系统配置文件,包括启动文件,例如inittab等/lib必要的链接库,例如C链接库、内核模块/h
33、ome普通用户主目录/rootroot用户主目录/usr/bin非必备的用户程序,例如find、du等/usr/sbin非必备的管理员程序,例如chroot、inetd等/usr/lib库文件/var守护程序和工具程序所存放的可变,例如日志文件/proc用来提供内核与进程信息的虚拟文件系统,由内核自动生成目录下的内容/sys用来提供内核与设备信息的虚拟文件系统,由内核自动生成目录下的内容/mnt文件系统挂接点,用于临时安装文件系统/tmp临时性的文件,重启后将自动清除制作根文件系统就是要建立以上的目录,并在其中建立完整目录内容。其过程大体包括:编译安装busybox,生成/bin、/sbin、
34、/usr/bin、/usr/sbin目录 利用交叉编译工具链,构建/lib目录 手工构建/etc目录 手工构建最简化的/dev目录 创建其它空目录 配置系统自动生成/proc目录 利用udev构建完整的/dev目录 制作根文件系统的jffs2映像文件 下面就来详细介绍这个过程。二、编译安装busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录这些目录下存储的主要是常用命令的二进制文件。如果要自己编写这几百个常用命令的源程序,my god, 这简直是一个噩梦!好在我们有嵌入式Linux系统的瑞士军刀busybox,事情就简单很多。1、从 HYPERLINK / / 下
35、载busybox-1.7.0.tar.bz22、tar xjvf busybox-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库
36、。我们选择动态链接C库。2)、Installation Options - Applets 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 ed
37、iting以支持命令行编辑;保留History size以支持记忆历史命令;选中Tab 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安装
38、完成后,可以看到在/work/nfs_root/fs_mini3目录下生成了binsbinusr/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 ad
39、dgroup - busyboxlrwxrwxrwx 1 dennis dennis 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:
40、/work/nfs_root/fs_mini3$ ls -l /bin/ls-rwxr-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库的源代码吗?不用!还记得交叉编译工具链
41、的3个组成部分吗?交叉编译器、for ARM的C库和二进制工具。哈哈,for ARM的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,absolut
42、ely no! 让我们来分析一下glibc库目录下内容的组成。该目录下的子目录和文件共分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类文件和目录是不需要
43、拷贝的。由于动态链接的应用程序本身并不含有它所调用的C库函数的代码,因此执行时需要动态链接库加载器来为它加载相应的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这一个应用程序即可。通过执行 dennisde
44、nnis-desktop:/work/nfs_root/fs_mini3$ arm-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个库的库文件即可。
45、但是每个库都有4个文件,4个文件都要拷贝吗?当然不是。 dennisdennis-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 -
46、 libcrypt.so.1lrwxrwxrwx 1 dennis dennis 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.alrw
47、xrwxrwx 1 dennis dennis 9 2008-12-22 15:38 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
48、dennis 2768280 2008-01-22 05:31 libc.a-rw-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_REVIS
49、ION_VERSION,程序一旦链接了特定的链接库,将会参用该符号链接。程序启动时,加载器在加载程序前,会检索该文件。所以需要拷贝。 与版本无关的符号链接,指向主修订版本的符号连接(libc.so是唯一的例外,他是一个链接命令行:libLIBRARY_NAME.so,是为编译程序时提供一个通用条目)。这些文件在程序被编译时会被用到,但在程序运行时不会被用到,所以不必拷贝它。关于共享库的2个符号链接的作用的特别说明:当我们使用gcc hello.c -o hello -lm编译程序时,gcc会根据-lm的指示,加头(lib)添尾(.so)得到libm.so,从而沿着与版本无关的符号链接(libm
50、.so - libm.so.6)找到libm.so.6并记录在案(hello的ELF头中),表示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个库(
51、每个库各1个主修订版本的符号链接和1个实际的共享链接库)以及动态链接库加载器(1个符号链接和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
52、/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ 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/f
53、s_mini3/libdennisdennis-desktop:/work/tools/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
54、$ cp -l ld-* /work/nfs_root/fs_mini3/lib 四、手工构建/etc目录 /etc目录存放的是系统程序的主配置文件,因此需要哪些配置文件取决于要运行哪些系统程序。即使最小的系统也一定会运行1号用户进程init,所以我们至少要手工编写init的主配置文件inittab。busybox的inittab文件的语法、语义与传统的SYSV的inittab有所不同。 inittab文件中每个条目用来定义一个需要init启动的子进程,并确定它的启动方式,格式为:。例如:ttySAC0:askfirst:-/bin/sh 表示子进程要使用的控制台,若省略则使用与init进程一
55、样的控制台 表示运行级别,busybox init程序这个字段没有意义 表示init进程如何控制这个子进程 sysinit:系统启动后最先执行,只执行一次,init进程等待它结束后才继续执行其它动作 wait:系统执行完sysinit条目后执行,只执行一次,init进程等待它结束后才继续执行其它动作 once:系统执行完wait条目后执行,只执行一次,init进程不等待它结束 respawn:启动完once进程后,init进程监测发现子进程退出时,重新启动它 askfirst:启动完respawn进程后,与respawn类似,不过init进程先输出” Please press Enter to
56、 activate this console“,等用户输入回车后才启动子进程 shutdown:当系统关机时 restart:Busybox中配置了CONFIG_FEATURE_USE_INITAB,并且init进程接收到SIGUP信号时执行,先重新读取、解析/etc/inittab文件,再执行restart程序 ctrlaltdel:按下ctrl+alt+del键时执行,不过在串口控制台中无法输入它 表示进程对应的二进制文件。如果前面有-号,表示该程序是“可以与用户进行交互的”我们制作最简单的/etc/inittab文件,其内容如下::sysinit:/etc/init.d/rcS:askf
57、irst:-/bin/sh:ctrlaltdel:/sbin/reboot:shutdown:/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,我只需要手工创建几个设备文件!我怎么知道我应该创建哪几个设备文件呢?管它呢,先看看开发板上可爱的
58、linux的反应再说。 启动Linux操作系统,显示: VFS: Mounted 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
59、 unlock_kernel();752 mark_rodata_ro();753 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 (ramd
60、isk_execute_command) 763 run_init_process(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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 临时体育训练中心租赁合同
- 2024年度高端住宅项目房地产营销顾问服务合同3篇
- 2024年研发合作与技术成果转化合同
- 中班建党活动课程设计
- 设计公司实习生合同范本
- 航空航天工程劳务合同
- 2024年水电建设合作承包专项合同版B版
- 传染病医院护工劳动合同
- 2024年河沙、碎石及土方购销合同
- 房屋建筑施工合同转让
- 2024-2030年中国体育培训行业市场发展分析及发展趋势与投资风险预测研究报告
- 圆-解决问题(教学设计)2024-2025学年六年级上册数学人教版
- 2024山东省化工行业职业技能大赛(化工总控工)试题库-下(判断、简答题)
- 历史人教部编版八年级(上册)22.抗日战争的胜利课件(25张)2024版新教材
- 2024年新北师大版七年级上册数学课件 第六章 6.2 第2课时 样本的选取
- 15《搭船的鸟》(教学设计)2024-2025学年统编版语文三年级上册
- 2024至2030年中国传染病医院产业发展动态及未来前景展望报告
- 知识点填空练习-2024-2025学年统编版道德与法治七年级上册
- 学习使用显微镜 2024-2025学年七年级上册生物同步课件(人教版2024)
- 中国近现代史纲要智慧树知到答案2024年北京师范大学等跨校共建
- JGJ7-2010 空间网格结构技术规程
评论
0/150
提交评论