Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->Linux技术 ->内核研究 ->正文

CLFS2.0原理分析

来源:linuxsir 作者:youbest  时间:2007-04-22 点击: [收藏] [投稿]
主系统提供的工具包是否会带来“纯净度”的问题,我的一个观点就是这些工具只是处理诸如文本之类的于平台无关的文件,所以只要能够正确处理这类文件,就没问题,这是完全跟“纯净度”无关的因素。当然如果主系统提供的命令不适合或者版本太低,则需要象前面的提到的file和groff的方式一样——编译一个。

  好了,在讲完第六章的的几个结论后,再来谈谈第六章编译的包的安装问题,对编译过程比较清楚的朋友基本上都了解一般软件包的编译过程
./configure 若干参数
make
make install
  前两个命令没什么问题,最后一个make install,一般会将其安装到--prefix指定的目录中,而一般我们在参数中都是用--prefix=/usr这样的,这个参数是很重要的,有些包在运行过程中都可能受这个参数的影响,那么我们现在要安装到${CLFS}才行,如果用这样的--prefix=/usr参数,又用make install来安装的话,但愿你不是用root来执行的,否则你的系统就要被破坏了。这里正确的方法是用DESTDIR来指定“根”目录,如make DESTDIR=${CLFS} install,这很类似前面说明的--with-sysroot的概念,这里就不多说了,我在做憨牛包管理器的时候就用到了这个方法,很实用,但不是所有的包都支持,但大多数标准的gun包是支持的,可参考各个包的说明,也可以查看代码来确定。

  最后要说的就是关于目标系统怎么样启动了,在发稿时为止CLFS2.0还是开发中的版本,而它目前也只有arm和x86两中体系,x86我们知道可以用grub来做启动,而arm却没有提到,各种体系都有各自的启动系统,可以参考CLFS1.0中的相应部分。

  最后我们来尝试画一个CLFS2.0的逻辑图(图中未表达出--with-sysroot的作用,但不影响表达CLFS2.0的方法)。
��ͼƬ�ѱ���С�����鿴ԭ��СͼƬ��
  如果观察仔细的话会发现这副图里没有提到任何Linux的字样,因为我觉得这样的方法是适合其它类似的开源系统的,比如BSD。

(转载请保持文章的完整性,请注明作者和出处)

                               作者:冲天飞豹(youbest)
                               Email:youbest@sina.com
                               2006年8月12日


附录:
PowerPC的工具链制作过程及内核编译
环境设置过程(略)
export CLFS_HOST="$(echo $MACHTYPE | sed "s/$(echo $MACHTYPE | cut -d- -f2)/cross/")"
export CLFS_TARGET="powerpc-unknown-linux-gnu"
echo export CLFS_HOST=\""${CLFS_HOST}\"" >> ~/.bashrc
echo export CLFS_TARGET=\""${CLFS_TARGET}\"" >> ~/.bashrc

Linux-Kernel-headers
make include/linux/version.h
install -dv ${CLFS}/usr/include/{asm,asm-generic,linux,net,mtd,scsi,sound}
cp -av include/asm-generic/* ${CLFS}/usr/include/asm-generic
cp -av include/linux/* ${CLFS}/usr/include/linux
cp -av include/mtd/* ${CLFS}/usr/include/mtd
cp -av include/net/* ${CLFS}/usr/include/net
cp -av include/scsi/* ${CLFS}/usr/include/scsi
cp -av include/sound/* ${CLFS}/usr/include/sound
install -dv ${CLFS}/usr/include/asm-ppc
cp -av include/asm-powerpc/* ${CLFS}/usr/include/asm
cp -av include/asm-ppc/* ${CLFS}/usr/include/asm-ppc

binutils-2.17
patch -Np1 -i ../binutils-2.17-posix-1.patch
mkdir -v ../binutils-build
cd ../binutils-build
../binutils-2.17/configure --prefix=${CLFS}/cross-tools \
--host=${CLFS_HOST} --target=${CLFS_TARGET} --with-sysroot=${CLFS} \
--disable-nls --enable-shared --disable-multilib
make configure-host
make
make install
cp -v ../binutils-2.17/include/libiberty.h ${CLFS}/usr/include

glibc-2.4-headers
cp configure{,.orig}
sed -e 's/3.4/3.[0-9]/g' configure.orig > configure
mkdir -v ../glibc-build
cd ../glibc-build
echo "libc_cv_forced_unwind=yes" > config.cache
echo "libc_cv_c_cleanup=yes" >> config.cache
echo "libc_cv_powerpc32_tls=yes" >> config.cache
echo "libc_cv_ppc_machine=yes" > config.cache
echo "libc_cv_mlong_double_128=yes" >> config.cache
echo "libc_cv_mlong_double_128ibm=yes" >> config.cache
echo "install_root=${CLFS}" > configparms
CC=gcc ../glibc-2.4/configure --prefix=/usr \
--host=${CLFS_TARGET} --build=${CLFS_HOST} \
--with-headers=${CLFS}/usr/include --cache-file=config.cache
make install-headers
install -dv ${CLFS}/usr/include/bits
cp -v bits/stdio_lim.h ${CLFS}/usr/include/bits
touch ${CLFS}/usr/include/gnu/stubs.h
cp -v ../glibc-2.4/nptl/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h \
${CLFS}/usr/include/bits

gcc-4.1.1第一遍
patch -Np1 -i ../gcc-4.1.1-posix-1.patch
patch -Np1 -i ../gcc-4.1.1-cross_search_paths-1.patch
mkdir -v ../gcc-build

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:使用异步 I/O 大大提高应用程序的性能   下一篇:简析Linux与FreeBSD的syscall

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号