LinuxSir.cn,穿越时空的Linuxsir!

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

在i686上做的lfs能用到i586上么?

[复制链接]
 楼主| 发表于 2008-1-11 14:46:51 | 显示全部楼层
Post by tfkdmwmqtr;1805450
look at  ' if you are going to boot '
The boot method is needed when you are building on a different architecture. For example, if you are building a
PowerPC system from an x86, you can't chroot. The chroot method is for when you are building on the same
architecture. If you are building on, and for, an x86 system, you can simply chroot. The rule of thumb here is if
the architectures match and you are running the same series kernel you can just chroot. If you aren't running the
same series kernel, or are wanting to run a different ABI, you will need to use the boot option.

对于这段我的理解是如果前面的CLFS-HOST CLFS-TARGET 不都是x86的话 下面的chroot命令就不能执行 只能再在 /tools以及$CLFS下 建立一些启动的必须工具然后把$CLFS下的所有文件打包安装到目标机器上再进行其他软件的编译

很多疑问:
        首先,要是host 跟 target结构不同,going to boot 之后根据手册顺序执行,所有的第五部分的9 10两章的软件岂不是都要在目标机器上进行编译,那编译时间非常人能忍受
        第二,第七章中going to boot 中已经安装的包(zlib e2fsprogs sysvinit udev etc.) 在第十章中不用再安装了吧?
        第三,/tools下面的工具是用/cross-tools下面的工具编译的吧?(猜测,不知道要到什么地方能看到clfs的原理,我现在能理解到的只是/croos-tool下面的编译工具是用宿主机的编译工具编译的; 然后用export PATH=/croos-tools:/bin:/usr/bin 屏蔽了宿主机PATH下的同名工具,再用export CC=$CLFS_TARGET-gcc" 这样的命令设定 building basic tools时使用的编译工具的类型)既然going to boot时编译的工具能在宿主机上直接使用,那为什么不用/cross-tools下的工具直接编译出目标系统的标准文件结构,还要经过building basic tools这个中间过程呢?(going to boot 和 building basic tools 两部分的编译环境是一样的阿,为什么不把/tools 下的basic tools 直接编译到$CLFS中呢?)
回复 支持 反对

使用道具 举报

发表于 2008-1-11 15:46:43 | 显示全部楼层
如果,目标系统的 target (系统架构)与host的不一样,host如果想 chroot 到 目标系统,必須要内核同时支持 host 和目标系统的 target (系统架构)。
比如,我的 i686 现在的 uname -m 是 i686 ,而 目标系统是 x86_64-64 ( 纯64位单一的库),此时是不可以的。但是,我用 x86_64 的内核启动 i686 的系统之后,是可以 chroot 到 x86_64-64 的。因为, x86_64 的内核是向下兼容的,支持 i386 / i486 / i586 / i686 / x86_64 。
所以,关键的还在内核。
如果你的主系统的 echo $MACHTYPE 是 x86 ( i386 / i486 / i586 / i686 ) ,你的目标系统是 x86_64 ,你想 chroot 到目标系统内核需要同时支持 host 和 目标系统。否则只能 to boot 。
你要做的是 i586 应该是不受此限的。总之,你先备份你的 工具链( cross-tools 和 tools )。后面的目标系统具有实验性质了。我没有做过 i586 ,所以不敢说我说的一定对。i686 的内核在 i586上是否也能用?这个得用了才知道,要不你问下弄服务器的有没有在 i386 机器的上用的 kernel 的 uname -m 是 i686 的?我见的x86,32位发行版的 uname -m 都是 i686 是这样,但没有在i386 / i486 / i586 的机器上用过。

tar -jcvf clfs-version-target-cross_tools-tools.tar.bz2  ${CLFS}/{cross-,}tools

昨天开了 vmware 虚拟机6.0 ,不知乍的,主系统linux的键盘就不太好使了。所以敲不了中文。
我让你看 if you ar going to boot ,只是想让你知道使系统能够启动需要一些什么,或者说是从中得到一些启发。当然,还可以再继续精简。
shadow完全可以不要。 /etc/passwd 以及 /etc/group 也不属于 shadow 。
uotomake 和 uotoconf 在编译有些软件的时候需要。

另外,我曾经发过关于编译 x86_64-Multilib 的帖子。实际上,问题很多的,十分的麻烦。所以,多媒体娱乐用桌面系统还是 x86 了( i686 以上的机器用 i686 )。
我现在在用 x86_64-64 , 也就是 Pure64 (纯64的单一的库)学着配服务。只用开源软件。
那些商业的软件,以及企业级应用的,暂时还不想烦。要学就用发行版好了。
回复 支持 反对

使用道具 举报

发表于 2008-1-11 16:22:28 | 显示全部楼层
[QUTE]引用 楼主:
---------------------------------------------------------
第二,第七章中going to boot 中已经安装的包(zlib e2fsprogs sysvinit udev etc.) 在第十章中不用再安装了吧?
[/QUTE]


going to boot 中已安装的包,主要的作用是使其能引导。在 if you are going to boot 中的编译内核之后就可以了。这样就具备了能启动并有一些最最基本的命令。详情看手册上讲了哪个软件包是做什么的,都安装了什么样的命令。
going to boot中安装的包,如果编译的方法和之后的手册上的构架目标系统的编译方法不一样,或者说有些功能没有编译进去,有些程序文件或库文件没有被安装,是需要重编译覆盖的。这个自己对比一下就可以了。

[QUTE]
引用 :
-------------------------------------------

第三,/tools下面的工具是用/cross-tools下面的工具编译的吧?(猜测,不知道要到什么地方能看到clfs的原理,我现在能理解到的只是 /croos-tool下面的编译工具是用宿主机的编译工具编译的; 然后用export PATH=/croos-tools:/bin:/usr/bin 屏蔽了宿主机PATH下的同名工具,再用export CC=$CLFS_TARGET-gcc" 这样的命令设定 building basic tools时使用的编译工具的类型)既然going to boot时编译的工具能在宿主机上直接使用,那为什么不用/cross-tools下的工具直接编译出目标系统的标准文件结构,还要经过building basic tools这个中间过程呢?(going to boot 和 building basic tools 两部分的编译环境是一样的阿,为什么不把/tools 下的basic tools 直接编译到$CLFS中呢?)[/QUTE]


编译的原理看精华帖。
if you are going to boot 的时候不将目标的编译出来:一个是因为, going to boot 的目的已经达到,无須更多琐碎。另外,可能是为了保持CLFS手册的统一性。 going to boot 了之后怎么办?当然是继续 compile 编译喽,想安装啥就安装啥,多灵活?如果要不 chroot 就将目标系统的其它软件都编译出来,编译需要修改的参数不是每个软件包都是修改的一样的,有些可能要加好多参数,麻烦还增加出错的可能。

clfs-sysroot 做这个事情很好。但是 clfs-sysroot 的软件包总是比较落后的。而且,暂时 clfs-sysroot 所涉及的范围不广,手册上目前只有编译 Non-Multilib 单一的库,而不能多库。当然,你的 x86 也是可以 clfs-sysroot 的。你需要做的只是在 target 的时候设置一下,你要编译的是何种系统架构。

CLFS的玩法太多,也较LFS更能学到东西。就是这“十八般武艺” 要学通了,耗时太多。我用了八个月的时间学通了 LFS 以及 CLFS ,我以我做过CLFS的次数通晓了CLFS的过程和精髓。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-11 18:11:44 | 显示全部楼层
CLFS 内容确实很复杂

原理,编译过程参数设定,不经过几次,数种clfs真的较难吃透

毕竟现在只是作了LFS6.2的一半,然后因为目标586上的编译速度慢才转clfs,有些问题还得不断像达人们请教才行

我初见clfs 就觉得lfs貌似是clfs的一个子集。
但现在看来觉得一般clfs是在比较快的机子上编译比较慢的机子上的东西,可是going to root 这种方法还需要在目标机器上编译第9 10 两章的内容的话,节省的时间就比较有限了,毕竟 还需要编译glibc gcc binutils etc 这些大头
回复 支持 反对

使用道具 举报

发表于 2008-1-11 18:26:22 | 显示全部楼层
Post by updavy;1805776
CLFS 内容确实很复杂

原理,编译过程参数设定,不经过几次,数种clfs真的较难吃透

毕竟现在只是作了LFS6.2的一半,然后因为目标586上的编译速度慢才转clfs,有些问题还得不断像达人们请教才行

我初见clfs 就觉得lfs貌似是clfs的一个子集。
但现在看来觉得一般clfs是在比较快的机子上编译比较慢的机子上的东西,可是going to root 这种方法还需要在目标机器上编译第9 10 两章的内容的话,节省的时间就比较有限了,毕竟 还需要编译glibc gcc binutils etc 这些大头


我候,你要在 i686 中编译 i586 不必 going to boot 。
chroot 应该是可以的。
但是,我不知道 i586 的编译出来的 uname -m 是不是 i586 。如果是 i686 呢?内核是 i686 应该也可以在 i586 的处理器的机器上用,我想是这样。因为一般的32位的GNU/Linux发行版它的应用软件可能不是 i686 ,可能是 i386 或 i486 或 i586 ,这样照顾了那些用老机器做服务器的人。而它的内核用 i686 的,照样可能是能够在 i386 上用的。
但是,我看了clfs手册的 if you are going to boot 在编译内核的时候有一段:

make ARCH=i386 CROSS_COMPILE=${CLFS_TARGET}- menuconfig


很明显,这里的 ${CLFS_TARGET} 还是有一定的作用的。或许这样能使软件运行得更好?
回复 支持 反对

使用道具 举报

发表于 2008-1-11 18:53:09 | 显示全部楼层
由于,我没有做过 i586,没有将要准备去做 i586 的需要 ,也没有这样的硬件。所以,可能会有一些我没能及时想到的问题。
这样,我就指挥下:
两种方法,你都尝试一下。看哪个更好?

检查两种方法的 uname -m 和 echo $MACHTYPE 。uname -m 由内核的系统架构决定, echo $MACHTYPE 部分由C编译器。由于我对编译原理也不是很了解,所以我的说法可能也会有错误。
你先按 going to boot 的方法让系统能够启动,然后重启机器查看上面说到的  uname -m 和 echo $MACHTYPE ,记录下来。必要时做系统备份。


已知的问题是 x86_64 的 内核, chroot 到 x86 的目标系统,编译会出错。需要指定 target 才成,可能还需要指定cc。BLFS或CBLFS中的有些软件不一定有 target 之类的参数,这就需要改源码,终究是麻烦,而且是原来不必要的麻烦。
i586 的C编译器,i686的内核,编译出的软件可能不是 i586 ,有可能是 i686 。
LFS 不正好是说明了这个道理吗?
lfslivecd-x86 的LiveCD,系统的软件都是按照 i486 编译的,内核分32位和64位两种。LFS的方法用lfslivecd-x86在32位内核在 i686以上的机器上编译出来的软件是 i686 的。
回复 支持 反对

使用道具 举报

发表于 2008-1-13 00:34:52 | 显示全部楼层
最简单的就是运行一下目标架构的文件。就知道是否需要重启了啊。:)。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-16 20:22:07 | 显示全部楼层
Post by 晨想;1806343
最简单的就是运行一下目标架构的文件。就知道是否需要重启了啊。:)。
恩,运行一下目标系统的文件证明当前内核支持chroot

几天断断续续的终于做完了clfs1.0

安装grub
创建menu.lst

重启失败

结果如下

Booting command-list

root (hd0,1)
     Filesystem bype is ext2fs, partition type 0x83
kernel /boot/clfskernel-2.6.17.13 root=/dev/hdc2
        [linux-bzImage,setup=0x1c00,size=0x16f75a]
Uncompressing Linux... OK,booting the kernel

然后就没有动静了

pc104上cf卡被识别为hdc
分区
/dev/hdc1 swap
/dev/hdc2 /
/dev/hdc3 一个存储分区
回复 支持 反对

使用道具 举报

发表于 2008-1-16 22:03:14 | 显示全部楼层
疑问:

1. pc104上 CF 卡被识别为 hdc?这是在 CLFS 的制作过程宿主系统识别的还是。。。?

2. 你完成的 CLFS-1.0 是用 boot 还是 chroot 进行?貌似是 chroot 的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-17 10:13:54 | 显示全部楼层
Post by d00m3d;1807983
疑问:

1. pc104上 CF 卡被识别为 hdc?这是在 CLFS 的制作过程宿主系统识别的还是。。。?

2. 你完成的 CLFS-1.0 是用 boot 还是 chroot 进行?貌似是 chroot 的?
宿主系统是 p4 i686
目标系统是pc104 i586

cf 卡当作硬盘用,被pc104识别为hdc

clfs是chroot完成的
回复 支持 反对

使用道具 举报

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

本版积分规则

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