LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: youbest

[原创]CLFS2.0原理分析

[复制链接]
发表于 2007-3-6 10:02:47 | 显示全部楼层
理解起来有点吃力. 还是多读几遍.
(我认为需要多读几遍才能领会的东西肯定是好东西).
谢谢lz!!
回复 支持 反对

使用道具 举报

发表于 2007-3-6 17:42:21 | 显示全部楼层
为arm编译clf2.0刚完成了5.7 Cross GCC-4.1.2 - Static .过程中遇到的几个问题说一下
我的主机是lfs, gcc是3.2,编译glibc头的时候不能通过,因为gcc到3.4才支持线程局部变量__thread.于是装了gcc3.4.6,通过.
编译binutil-2.17,开始按手册用了--enable-shared,到编译gcc时动态库出问题,可能因为此时还未编译glibc,没有ld.so.于是去掉此选项,可以了.
用--with-build-sysroot而不是--with-sysroot.congfiguer --help只有前面一个选项.
实际上开始用后一个选项时路径不正确,说明未起作用.(疑问如果有这两个选项,它们的区别是什么?)
最后在编译gcc时把${clfs}/usr/include目录拷到${clfs}/cross-tools/arm-unkwon-inux-gnu/下,因为gcc的isysroot选项是在这个目录里找头文件的.
回复 支持 反对

使用道具 举报

发表于 2007-3-6 17:51:04 | 显示全部楼层
为arm编译clf2.0刚完成了5.7 Cross GCC-4.1.2 - Static .过程中遇到的几个问题说一下
我的主机是lfs, gcc是3.2,编译glibc头的时候不能通过,因为gcc到3.4才支持线程局部变量__thread.于是装了gcc3.4.6,通过.
编译binutil-2.17,开始按手册用了--enable-shared,到编译gcc时动态库出问题,可能因为此时还未编译glibc,没有ld.so.于是去掉此选项,可以了.
用--with-build-sysroot而不是--with-sysroot.congfiguer --help只有前面一个选项.
实际上开始用后一个选项时路径不正确,说明未起作用.(疑问如果有这两个选项,它们的区别是什么?)
最后在编译gcc时把${clfs}/usr/include目录拷到${clfs}/cross-tools/arm-unkwon-inux-gnu/下,因为gcc的isysroot选项是在这个目录里找头文件的.
回复 支持 反对

使用道具 举报

发表于 2007-3-6 18:03:32 | 显示全部楼层
我昨天倒是一路很顺利的做了下来,没出什么错误。你严格按照书上来的?
我的主系统是 ARCH x86,更新到最新的。
回复 支持 反对

使用道具 举报

发表于 2007-3-6 23:16:47 | 显示全部楼层
glibc对arm来说,显得大了一点,我在用clfs3.0的指导,用uClibc和busybox编arm平台的,但好像挺困难的。回头试一下glibc。
另外,gcc第一次编译的时候,应该disable-shared,书上好像说到过。
回复 支持 反对

使用道具 举报

发表于 2007-3-7 00:18:27 | 显示全部楼层
我也许回答错了问题,我做的是 sysroot 的,不是  embedded。
回复 支持 反对

使用道具 举报

发表于 2007-10-9 16:12:58 | 显示全部楼层
有一点搂主还是说得不是很清楚,就是为什么gcc要编译两次。
如果第一次出来的cross gcc 只是为了编译glibc的话,那他应该也可以编译其他的软件包,即使不行,我们第一次就添加c++的功能,总行了吧,为什么还要编译两次?难道说第一次只能编译出一个只支持c的gcc ?

这是我的疑问,望各位兄弟不吝赐教,小弟不胜感激.
回复 支持 反对

使用道具 举报

发表于 2007-10-9 19:35:44 | 显示全部楼层
同问ing....
回复 支持 反对

使用道具 举报

发表于 2007-10-9 22:19:05 | 显示全部楼层
第一次:--disable-shared
第二次:--enable-shared

you can not disble and enalbe at once? but why  disable 1st then enable 2nd?
回复 支持 反对

使用道具 举报

发表于 2007-12-29 16:27:38 | 显示全部楼层
刚在LFS论坛里发了个帖子问大伙为什么CLFS1.0.0手册里制作的临时系统不能直接作为目标板最后的系统就看到了这篇大作。楼主分析的很详细啊,我没看过CLFS2.0,不过根据这个帖子,感觉没什么区别啊。
引用原文:
那么在第一次编译binutils的时候我们就要开始用--with-sysroot这个“神奇”的参数了。
../binutils-2.17/configure --prefix=${CLFS}/cross-tools \
--host=${CLFS_HOST} --target=${CLFS_TARGET} --with-sysroot=${CLFS} \
--disable-nls --enable-shared --disable-multilib

对照CLFS1.0.0
../binutils-2.17/configure --prefix=/cross-tools \
    --host=${CLFS_HOST} --target=${CLFS_TARGET} --with-lib-path=/tools/lib \
    --disable-nls --enable-shared --disable-multilib
仅仅是把--with-lib-path=/tools/lib换作 --with-sysroot=${CLFS}
引用原文:
../gcc-4.1.1/configure --prefix=${CLFS}/cross-tools \
--host=${CLFS_HOST} --target=${CLFS_TARGET} --disable-multilib \
--with-sysroot=${CLFS} --disable-nls --disable-shared \
--enable-languages=c
对照CLFS1.0.0
../gcc-4.1.1/configure --prefix=/cross-tools \
    --host=${CLFS_HOST} --target=${CLFS_TARGET} --disable-multilib \
    --with-local-prefix=/tools --disable-nls --disable-shared \
    --disable-threads --enable-languages=c
同样,仅仅是将--with-local-prefix=/tools换作--with-sysroot=${CLFS}

如楼主所说,--with-sysroot第三次出现跟第二次的道理一样,不比较了。
--with-sysroot无非也就是指定了一下头文件和库的路径,与CLFS1.0.0并无实质改变,
但是CLFS1.0.0里这条交叉链下线的系统就被用作了一个临时系统,还特意给了个warning:Warning
Here a temporary cross-compiled kernel will be built. When configuring it, select the minimal amount of options required to boot the target machine and build the final system. I.e., no support for sound, printers, etc. will be needed.

Also, try to avoid the use of modules if possible, and don't use the resulting kernel image for production systems.
说这个内核不能作为最终的内核?为什么到了CLFS2.0就可以了呢,不明白。
回复 支持 反对

使用道具 举报

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

本版积分规则

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