- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
我是软体-- 那些处理器教我的事
我是软体-- 那些处理器教我的事
「我是软体-- 那些处理器教我的事」简报上线
稍早于[COSCUP 2008]进行以[我是软体--那些处理器教我的事 ]为题的演讲,简报已上线,请见[trap-in-processors.pdf],搭配的范例程式码打包为[trap-in-processors-samples.tar.gz]。
过去我们总有个假设,就是单纯的C 语言程式码,经过编译后,能够轻易在多种软硬体平台上运作,但实际上,有太多值得我们思索的细节。 近年来,透过自由软体,以提升产品开发时程与系统完整度,已是大势所趋,但涉及跨平台开发,其潜藏的问题又难保不是未来系统中的未爆弹。 基于这个思维,此议程以ARM/Linux 为例,由四个简短的C 语言程式码(约十行内),点出跨平台整合开发时,PC/x86 与ARM 环境中迥然不同的落差,期望有助于自由软体的广泛应用与深入琢磨。
前述的四个范例为:
alignment.c - 凸显x86 与ARM (或其他RISC) 处理data alignment 的行为落差
signchar.c - 指出GNU Toolchain 即使在几十种硬体平台有良好的支援,但具体实做却有出入,本范例点出C 语言中,与平台相依的实做
abi.c - 指出C 语言并未涵盖的ABI (Application Binary Interface),举凡struct/data 的长度、function calling convention 等议题,并由精简的例子,加深听者对这方面的警觉
call.c - 对于C 语言(及为了实做考量的扩充) 所内建的函式集来说,在实做上的呈现,依据个别硬体平台,往往有出入
采用的硬体为:
x86: Lenovo x60 笔记型电脑/ Pentium-M 1.8GHz / Ubuntu 8.04
ARM: Openmoko GTA02 (S3C244x ARM SoC) / Linux 2.6.24, glibc 2.7
当然,实际上要考量的议题太多了,像是packed data, soft/hard floating-point, endian, data exception, cache/TLB, ...等等,所谓「处处留心皆学问」,小弟只是试着在短短的二十分钟内,透过简单不过的范例,去凸显如此的对比。 在简报中不断出现下图:
议程中,透过图中女子的自白,道出的一番话:「我好天真,现在才看清,其实这一切并非只是cross compilation 这么单纯」 ,又该是多少从业人员与开发者的感叹呢?
ARM/Linux 是如此,其他五花八门的「处理器」,想必教了「软体」无以言表的经验,希望本议程能作为一个出发点,得以让更多开发者切磋琢磨,并提升对软体的认知。 请多指教,谢谢!
由jserv 发表于September 10, 2008 08:15 AM
回响
请问jserv大大,
那alignment范例中,
echo 数字 /proc/cpu/alignment
./alignment.arm
是什么用意呢?
由 小瓜 发表于September 10, 2008 11:08 AM
To 小瓜,
基本上,非x86 的RISC 处理器倾向不自动处理alignment 议题,也就是说,此权责交由软体处理。 以ARM-Linux 的设计来说,当存取unaligned memory 时,硬体会丢出trap,ARM-Linux Kernel 内部的handler 就接手处理。 此handler 包含软体模拟的unaligned memory 操作(当然,会有效能上的冲击),也就是让这个动作,在软体层面看起来合法。
请参照简报Page 15,就是要求ARM-Linux kernel 的处置方式:
* 0 : 忽略,不处理
* 1 : 提出警告,可由dmesg 观察
* 2 : 以软体模拟修正
* 3 : 3 = 1 + 2,也就是警告并修正
由 jserv 发表于September 10, 2008 11:44 AM
相当有意思的一段探讨, 确实指出了cross compiling 的许多陷井.
不过内容所提及的几个重点项目似乎偏向软体, compiler. 不同的处理器倒不像是元凶...
Alignment 的问题本应由compiler 在分配位置时确保每个symbol 的位址是sizeof(int) 的倍数解决. 通常也是project configuration 的一环.
Signed 与unsigned 也是compiler 对资料型态的解释. Compiler 应该依不同的资料型态产生适当的机械码.
最终还是归于project configuration.
ABI 这个项目更是comp
原创力文档


文档评论(0)