免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4209 | 回复: 4
打印 上一主题 下一主题

[C] x64下开发x86操作系统交叉编译环境的简易设置方法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-22 23:20 |只看该作者 |倒序浏览
最近,小弟和朋友们一起开始了个小小的开源操作系统项目,叫RabbitOS。其目的主要是为武汉大学开设的操作系统课程提供一个教学用的操作系统。这段时间,我们走了很多弯路,但也收获了很多小的心得,就借这里,一点一点来和大家分享,希望这能给对操作系统开发赶兴趣的同学有所帮助。

我也希望能和对操作系统感兴趣的同学一起多交流,一起进步。

谭孟泷
武汉大学软件工程
TanMenglong@gmail.com


==========分割线============


所谓交叉编译,就是在一种体系架构的平台上编译产生运行于另一个不通体系架构上的目标代码的过程。

具体一点,这里我说的就是在x64的Linux系统上编译生成x86上运行的代码。

我的开发环境为Ubuntu8.04 x64。这个平台下目标代码的默认格式是elf-x64,而RabbitOS的代码格式是elf-i386。

由于操作系统的代码有C和汇编的,我们需要分别对待。
x64的GCC支持输出elf-i386的格式的目标文件,只需要在编译时加上参数“-m 32”即可。
但对于汇编程序,就有点问题了。
x64的nasm的确能产生elf-i386的目标文件,但当我们用ld将gcc和nasm编译的o文件链接在一起的时候,就会报错。
因为x64的ld不能链接生成x86的代码。

按照一般建立交叉编译环境的方法,我们需要准备好从binutils到gcc的整套工具链,这会非常麻烦,对于像我这样的新手也很容易出错。

我这里介绍的是一种及其简单的方法。

我直接去下载了ubuntu 8.04 i386版apt库(如:http://ubuntu.cn99.com/)里面的的binutils的deb文件,然后把它解压缩出来。这样,我们就有了能产生x86格式文件的ld了,呵呵。

下面我们修改Makefile,将使用的链接器改为我们这个新的ld,就搞定了。

是不是很简单呢?呵呵。当初为了配好这个,我可没少走弯路,没少上论坛问,但都没结果。希望这对大家有用。

论坛徽章:
0
2 [报告]
发表于 2008-05-22 23:24 |只看该作者
基本没看懂,不过还是顶一下先~~

论坛徽章:
0
3 [报告]
发表于 2008-05-22 23:25 |只看该作者
所谓交叉编译,就是在一种体系架构的平台上编译产生运行于另一个不通体系架构上的目标代码的过程。

具体一点,这里我说的就是在x64的Linux系统上编译生成x86上运行的代码。

这个懂了

论坛徽章:
0
4 [报告]
发表于 2008-05-23 09:02 |只看该作者
支持~~~

论坛徽章:
0
5 [报告]
发表于 2008-05-23 11:24 |只看该作者
欣赏楼主这样的人,自己的问题解决了还把方法告之大家,供别人借鉴。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP