作者weii (迷惑失道)
看板SFFamily
标题[转录][心得] 跌跌撞撞的E680开发环境建置历程-part2
时间Wed Jul 2 10:08:46 2008
※ [本文转录自 LinuxDev 看板]
作者: ASTRAY (蛇尾佣兵丛云劾) 看板: LinuxDev
标题: [心得] 跌跌撞撞的E680开发环境建置历程-part2
时间: Wed Jun 25 00:24:17 2008
先大概提一下建置toolchain的大致步骤,虽然这应该很多人知道,
不过我还是提一下让完全没接触过的人有个基本概念。
建置toolchain 最粗略的就是作以下的步骤:
1.设定安装 linux header
2.建置binutil(用Host的compiler)
3.建立bootstrap compiler (好像也有人称为 1st stage compiler)
此时的compiler只支援最基本的C语言
4.用前面的binutil, compiler
建置C library(glibc 或 newlib 或 uLibc)
5.用前面的binutil, compiler, C library建置真正以後要用的cross compiler
此时就可以选择再加上其他程式语言的compiler
(嵌入式环境一般也顶多加上C++而已)
而这些步骤要做的事情其实也差不多(除了linux header以外)
1.) 抓source code, 解压缩之
2.) 找patch,打补钉之
3.) 建立build-<套件名称> 目录
4.) cd build-<套件名称>
5.) ./configure 下参数
6.) make
对了稍微提一下我的Host环境, ubuntu linux 8.04 x64
因为有两个失败的地方就是跟ubuntu预设值有关
其实我一开始就是要用完全手动的方式建置toolchain,不过吃足了苦头。
因为linux header, binutil, gcc, glib 不是随便任何版本都可以拿来组合在一起的
中间乱七八糟的try and error我也快记不清楚了
我大概讲一下我认为值得注意的部分
1.不要选用太新甚至最新的版本,因为根本没有人出patch,
除非凑巧这个版本加上这个平台没有问题,否则就是有bug要修
可是我们都不是GCC开发人员也不是骇客,没办法自己修改source code
最好去参考那些现成的toolchain(像我之前提到的 GNUARM, WINARM等等)
它们采用的gcc, binutil, C library版本
至少可以确定已知有什麽版本的组合是有人建置成功的
否则就是要自己花时间去try
像我的经验是binutil 2.17是可以不打任何patch就可以通过编译的
(但我後来有看到有人出 bintuil 2.17 的patch)
2.编译GCC的时候注意Host系统上现在用的GCC版本,尽量不要差太多
一开始编译GCC-3.3 一直失败,原因是ubuntu 8.04预设用的是GCC-4
後来老老实实的去装GCC-3.3,把gcc的符号连结改指向 gcc-3.3
才得以通过编译
3.这跟前一个其是算同一类,注意Host系统上有没有缺相依的套件
像是如果要编译GCC-4, 我记得系统上要有libogmp
要编译glibc别忘了还要抓对应版本的glibc-linuxthreads
还有glibc 2.4开始把一些处理器的支援分离出来,所以glibc-ports的也要抓
(连带也影响configure script参数)
由於纯手动建置还得自己找patch,不然完全没辄。
而且每次要./configure 真的会累死人,所以我後来改用crosstool套件来建置
好累,下一篇我只写使用crosstool的注意事项。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.165.67.138
1F:推 taiying:我也是try了很多 最後受不了直接用crosstool一次搞定 XD 06/25 06:52
2F:推 mizuki2005:真是受益良多阿! 好文 :) 06/25 22:19
--
三月的柳絮不飞 你的心如小小的寂寞的城
我达达的马蹄是美丽的错误 我不是归人 我是马~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.132.117.169