LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1663|回复: 7

折腾:使用eglibc替换glibc...

[复制链接]
发表于 2009-7-2 22:56:59 | 显示全部楼层 |阅读模式
话说昨天考完英语文学欣赏正郁闷与空虚中,反正还有几天假放,突然就想折腾一下机器,于是冒出这么个想法来,因为前阵子看到debian说要使用eglibc替换glibc,还引起比较大争论,就想测试一下在arch上会有什么后果,实验证明,起码在我的机器上,所谓二进制兼容不是盖的,不过我不知道究竟两个东西相似度有多高,纯无聊折腾,倒是可怜我的机器几乎从昨晚一直编译到现在...

环境说明:
内核:2.6.31,跟git的。一周前编译的...(P.S.:intel显卡部分貌似性能又提升了,个人使用+arch英文论坛也有相关帖子,大概kernel 2.6.31+xf86-video-intel 2.8算是一个稳定的台阶)
  1. [hunt@psycho ~]$ O_< uname -a
  2. Linux psycho 2.6.31-hunt #1 PREEMPT Fri Jun 26 10:26:50 CST 2009 i686 Intel(R) Celeron(R) CPU 1.70GHz GenuineIntel GNU/Linux
复制代码

CPU:
  1. [hunt@psycho ~]$ O_< cat /proc/cpuinfo
  2. processor       : 0
  3. vendor_id       : GenuineIntel
  4. cpu family      : 15
  5. model           : 1
  6. model name      : Intel(R) Celeron(R) CPU 1.70GHz
  7. stepping        : 3
  8. cpu MHz         : 1699.401
  9. cache size      : 128 KB
  10. fdiv_bug        : no
  11. hlt_bug         : no
  12. f00f_bug        : no
  13. coma_bug        : no
  14. fpu             : yes
  15. fpu_exception   : yes
  16. cpuid level     : 2
  17. wp              : yes
  18. flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pebs bts
  19. bogomips        : 3398.80
  20. clflush size    : 64
  21. power management:
复制代码

编译时的一些参数:
  1. CARCH="i686"
  2. CHOST="i686-pc-linux-gnu"
  3. CFLAGS="-march=native -mtune=native -O2 -pipe -mfpmath=sse -msse2 -mmmx -fomit-frame-pointer -ffast-math"
  4. CXXFLAGS="-march=native -mtune=native -O2 -pipe -mfpmath=sse -msse2 -mmmx -fomit-frame-pointer -ffast-math"
  5. #MAKEFLAGS="-j3"(平时用的)
  6. MAKEFLAGS="-j1"(过程中用的)
  7. LDFLAGS="-Wl,-O1 -Wl,--hash-style=gnu -Wl,--sort-common -Wl,--as-needed -Wl,-z,now -Wl,--enable-new-dtags -s"
  8. #BUILDENV=(fakeroot !distcc color ccache !xdelta)
  9. BUILDENV=(fakeroot !distcc color !ccache !xdelta) (过程中没开ccache)
  10. OPTIONS=(strip docs libtool emptydirs zipman)
复制代码


顺序方面比较简单,kernel-headers -> eglibc -> bintuils -> gcc-libs ->gcc -> binutils -> eglibc
不过我做的时候是先用官方的2.6.29.3的headers编译第一次的eglibc,开--enable-kernel=2.6.28,然后在binutils第一次编译前又把git的kernel-headers装了过去,然后在第二次编译eglibc的时候用--enable-kernel=2.6.30...应该没多大关系,只是旧版内核没得用了而已...哈!
eglibc的编译比较简单,用aur上的PKGBUILD,不过注意makedepends要加上gperf(eglibc编译过程中不能开-ffast-math)

软件版本:
kernel-headers:上面说了
eglibc:svn-8624
binutils、gcc-libs、gcc都用的官方svn上的PKGBUILD,就是都加了--disable-nls而已。

gcc-libs和gcc编译时要开以下locale,这个官方网页上介绍了的:
  1. de_DE               ISO-8859-1
  2. de_DE@euro          ISO-8859-15
  3. en_HK               ISO-8859-1
  4. en_PH               ISO-8859-1
  5. en_US               ISO-8859-1
  6. en_US.ISO-8859-1    ISO-8859-1
  7. en_US.ISO-8859-15   ISO-8859-15
  8. en_US.UTF-8         UTF-8
  9. es_ES               ISO-8859-1
  10. es_MX               ISO-8859-1
  11. fr_FR               ISO-8859-1
  12. fr_FR@euro          ISO-8859-15
  13. is_IS               UTF-8
  14. it_IT               ISO-8859-1
  15. ja_JP.eucjp         EUC-JP
  16. se_NO.UTF-8         UTF-8
  17. ta_IN               UTF-8
  18. zh_TW               BIG5
  19. zh_CN.GBK           GBK
  20. zh_CN.UTF-8         UTF-8
复制代码

嗯,好吧,我承认zh_CN那两个是我放进去凑热闹的。

下面是编译时间和软件包大小,额,环境并不是没变的,有时开着其他程序,半夜睡觉时是只剩下在编译了,所以时间仅供参考,天气热,宿舍空调不凉,所以提前把MAKEFLAGS改成-j1了,怕烧,最近rp值比较低。所有软件都先下载好了源代码,所以下载时间没在里面的,倒是eglibc那个中间有个进入目录svn up更新的,不过应该用不了多长时间咯。

eglibc第一次,没计算时间,就是用官方源里的gcc和gcc-libs和binutils编译的,我开着testing:
  1. Download Size  : 12929.57 K
  2. Installed Size : 36872.00 K
复制代码


binutils第一次,等下给出在glibc下尝试编译的时间和大小做个对比:
  1. real    11m52.845s
  2. user    8m29.694s
  3. sys     1m49.089s
  4. Download Size  : 2303.43 K
  5. Installed Size : 5556.00 K
复制代码


gcc-libs:

  1. real    209m47.784s
  2. user    192m33.563s
  3. sys     12m13.721s
  4. Download Size  : 1843.27 K
  5. Installed Size : 6964.00 K
复制代码


gcc:

  1. real    250m29.173s
  2. user    205m44.288s
  3. sys     13m27.916s
  4. Download Size  : 22924.16 K
  5. Installed Size : 56896.00 K
复制代码


binutils第二次:

  1. real    10m56.693s
  2. user    8m36.411s
  3. sys     1m44.856s
  4. Download Size  : 2302.76 K
  5. Installed Size : 5548.00 K
复制代码


eglibc第二次:

  1. real    68m37.359s
  2. user    49m55.663s
  3. sys     6m48.805s
  4. Download Size  : 12920.89 K
  5. Installed Size : 36856.00 K
复制代码


给出些比较的时间:
在glibc时同一个PKGBUILD编译binutils:

  1. real    10m54.033s
  2. user    8m30.036s
  3. sys     1m46.605s
复制代码


在glibc和eglibc分别编译mplayer的大小,不过版本有点不同($MAKEFLAGS="-j3"):

  1. mplayer 29408 with glibc:
  2. Download Size  : 6361.35 K
  3. Installed Size : 14748.00 K

  4. mplayer 29409 with eglibc:
  5. real    23m38.321s
  6. user    19m21.516s
  7. sys     1m42.554s
  8. wnload Size  : 6362.90 K
  9. Installed Size : 14748.00 K
复制代码

内核编译方面也试过,用time make计的时间,差别不大而且同样是有些改变,所以没保留下来,大小方面也差不多。



综上所述,纯折腾,性能方面因为测试不严谨,而且我觉得我的机器怎样优化也都是那样了,所以并没看出大的差别来,mplayer编译似乎比以前快,不知道,以前没测试时间,也许是心理作用,不过装完最后一次eglibc之后倒是编译了mplayer,gimp和内核,目前一切正常,起码说明还是兼容的。至此,折腾完毕。
最后赞一下小赛扬,一天基本都是70度...折腾死了...
发表于 2009-7-2 23:46:47 | 显示全部楼层
不容易,写这样的帖子。
可怜了你的小赛扬了。
回复 支持 反对

使用道具 举报

发表于 2009-7-2 23:58:44 | 显示全部楼层
没楼主厉害,先佩服个
回复 支持 反对

使用道具 举报

发表于 2009-7-3 01:30:12 | 显示全部楼层
整个系统都需要编译哦。。。划不来
回复 支持 反对

使用道具 举报

发表于 2009-7-3 09:22:44 | 显示全部楼层
eglibc 与 glibc 二进制兼容,您的方法有些过火了,直接编译与系统中 glibc 相同主版本号的 eglibc 覆盖安装即可。
即使真的要更新工具链,不到万不得已,更新内核头文件都是比较莽撞的动作。
用 git 的内核头文件则更加莽撞。

eglibc 可以看成打过 针对"嵌入式"环境补丁集合 的 glibc。
请参考
http://www.eglibc.org/faq Is EGLIBC a "fork" of GLIBC?
回复 支持 反对

使用道具 举报

发表于 2009-7-3 10:40:26 | 显示全部楼层
Post by 聚焦深空;2003131
eglibc 与 glibc 二进制兼容,您的方法有些过火了,直接编译与系统中 glibc 相同主版本号的 eglibc 覆盖安装即可。
即使真的要更新工具链,不到万不得已,更新内核头文件都是比较莽撞的动作。
用 git 的内核头文件则更加莽撞。

eglibc 可以看成打过 针对"嵌入式"环境补丁集合 的 glibc。
请参考
http://www.eglibc.org/faq Is EGLIBC a "fork" of GLIBC?


感觉楼上深空老大是正解,二进制兼容么,当然就是编译完了直接替换,照huntxu老大做的那应该是源码级兼容才要做的,工具链重新编译了,差不多要做LFS了,哈
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-3 13:37:56 | 显示全部楼层
Post by yafeng;2003155
感觉楼上深空老大是正解,二进制兼容么,当然就是编译完了直接替换,照huntxu老大做的那应该是源码级兼容才要做的,工具链重新编译了,差不多要做LFS了,哈


哈,二进制兼容是没错,第一次编译完了装上就可以用的...
不过既然是折腾,就直接试试看工具链重新基于eglibc编译会是怎样一种状况咯...
也还好,没出啥问题,就是编译费点时间。
回复 支持 反对

使用道具 举报

发表于 2009-7-3 13:56:52 | 显示全部楼层
eglibc跟glibc主要区别是啥?既然适用于嵌入式,那该能很方便裁减才对…
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表