敲命令很麻烦,干脆把命令都弄到一个Makefile里面了。
需要的可以按自己的要求修改。
如果发现错误的话,请指出。
本脚本只编译交叉编译环境。
- CLFS = ${HOME}/armv5-root
- PATH = ${CLFS}/cross-tools/bin:/bin:/usr/bin
- CLFS_HOST = i486-cross-linux-gnu
- CLFS_TARGET = armv5-linux
- CLFS_SOURCE = ${HOME}/source
- CLFS_BUILD = ${HOME}/build/${CLFS_TARGET}
- CFLAGS =
- CXXFLAGS =
- #GCC_EXTRA_CONFIG = --with-cpu=xscale --enable-cxx-flags=-mcpu=xscale
- GCC_EXTRA_CONFIG = --with-arch=armv5 --enable-cxx-flags=-march=armv5
- all:
- exit 1
- clean:
- rm -rf ${CLFS_BUILD}/*
- distclean: clean
- rm -rf ${CLFS}/*
- crosstools: dirs linux_headers binutils_cross glibc_headers gcc_static glibc_cross gcc_cross_final file_cross groff_cross shadow_cross
- dirs:
- install -dv ${CLFS}
- install -dv ${CLFS_BUILD}
- mkdir -pv ${CLFS}/{bin,boot,dev,{etc/,}opt,home,lib,mnt}
- mkdir -pv ${CLFS}/{proc,media/{floppy,cdrom},sbin,srv,sys}
- mkdir -pv ${CLFS}/var/{lock,log,mail,run,spool}
- mkdir -pv ${CLFS}/var/{opt,cache,lib/{misc,locate},local}
- install -dv -m 0750 ${CLFS}/root
- install -dv -m 1777 ${CLFS}{/var,}/tmp
- mkdir -pv ${CLFS}/usr/{,local/}{bin,include,lib,sbin,src}
- mkdir -pv ${CLFS}/usr/{,local/}share/{doc,info,locale,man}
- mkdir -pv ${CLFS}/usr/{,local/}share/{misc,terminfo,zoneinfo}
- mkdir -pv ${CLFS}/usr/{,local/}share/man/man{1,2,3,4,5,6,7,8}
- for dir in ${CLFS}/usr{,/local}; do ln -sfnv share/{man,doc,info} $${dir}; done
- echo root::0:0:root:/root:/bin/bash > ${CLFS}/etc/passwd
- echo root:x:0: > ${CLFS}/etc/group
- echo root:x:0: >> ${CLFS}/etc/group
- echo bin:x:1: >> ${CLFS}/etc/group
- echo sys:x:2: >> ${CLFS}/etc/group
- echo kmem:x:3: >> ${CLFS}/etc/group
- echo tty:x:4: >> ${CLFS}/etc/group
- echo tape:x:5: >> ${CLFS}/etc/group
- echo daemon:x:6: >> ${CLFS}/etc/group
- echo floppy:x:7: >> ${CLFS}/etc/group
- echo disk:x:8: >> ${CLFS}/etc/group
- echo lp:x:9: >> ${CLFS}/etc/group
- echo dialout:x:10: >> ${CLFS}/etc/group
- echo audio:x:11: >> ${CLFS}/etc/group
- echo video:x:12: >> ${CLFS}/etc/group
- echo utmp:x:13: >> ${CLFS}/etc/group
- echo usb:x:14: >> ${CLFS}/etc/group
- echo cdrom:x:15: >> ${CLFS}/etc/group
- linux_headers:
- tar -xvjf ${CLFS_SOURCE}/linux-headers-2.6.22.6-09032007.tar.bz2 -C ${CLFS_BUILD}
- install -dv ${CLFS}/usr/include
- cp -av ${CLFS_BUILD}/linux-headers-2.6.22.6/include/{asm-generic,linux,mtd,scsi,sound} ${CLFS}/usr/include
- cp -av ${CLFS_BUILD}/linux-headers-2.6.22.6/include/asm-arm ${CLFS}/usr/include/asm
- binutils_cross:
- tar -xvjf ${CLFS_SOURCE}/binutils-2.18.tar.bz2 -C ${CLFS_BUILD}
- cd ${CLFS_BUILD}/binutils-2.18 && \
- patch -Np1 -i ${CLFS_SOURCE}/binutils-2.18-posix-1.patch && \
- mkdir -v ${CLFS_BUILD}/binutils-build
- cd ${CLFS_BUILD}/binutils-build && \
- AR=ar AS=as ../binutils-2.18/configure --prefix=${CLFS}/cross-tools --host=${CLFS_HOST} --target=${CLFS_TARGET} --with-sysroot=${CLFS} --disable-nls --enable-shared --disable-multilib && \
- make -C ${CLFS_BUILD}/binutils-build configure-host
- make -C ${CLFS_BUILD}/binutils-build
- make -C ${CLFS_BUILD}/binutils-build install
- cp -v ${CLFS_BUILD}/binutils-2.18/include/libiberty.h ${CLFS}/usr/include
- glibc_headers:
- tar -xvjf ${CLFS_SOURCE}/glibc-2.6.1.tar.bz2 -C ${CLFS_BUILD}
- cd ${CLFS_BUILD}/glibc-2.6.1 && \
- cp configure{,.orig} && \
- sed -e 's/3.4/3.[0-9]/g' configure.orig > configure && \
- tar -xvjf ${CLFS_SOURCE}/glibc-ports-2.6.1.tar.bz2 && mv -v glibc-ports-2.6.1 ports
- mkdir -v ${CLFS_BUILD}/glibc-build
- cd ${CLFS_BUILD}/glibc-build && \
- echo "libc_cv_forced_unwind=yes" > config.cache && \
- echo "libc_cv_c_cleanup=yes" >> config.cache && \
- echo "libc_cv_arm_tls=yes" >> config.cache && \
- echo "install_root=${CLFS}" > configparms && \
- CC=gcc ../glibc-2.6.1/configure --prefix=/usr --host=${CLFS_TARGET} --build=${CLFS_HOST} --with-headers=${CLFS}/usr/include --cache-file=config.cache
- make -C ${CLFS_BUILD}/glibc-build install-headers
- cp -v ${CLFS_BUILD}/glibc-build/bits/stdio_lim.h ${CLFS}/usr/include/bits
- touch ${CLFS}/usr/include/gnu/stubs.h
- cp -v ${CLFS_BUILD}/glibc-build/../glibc-2.6.1/ports/sysdeps/unix/sysv/linux/arm/nptl/bits/pthreadtypes.h ${CLFS}/usr/include/bits
- rm -rf ${CLFS_BUILD}/glibc-2.6.1
- rm -rf ${CLFS_BUILD}/glibc-build
- gcc_static:
- tar -xvjf ${CLFS_SOURCE}/gcc-4.2.1.tar.bz2 -C ${CLFS_BUILD}
- cd ${CLFS_BUILD}/gcc-4.2.1 && \
- patch -Np1 -i ${CLFS_SOURCE}/gcc-4.2.1-posix-1.patch && \
- patch -Np1 -i ${CLFS_SOURCE}/gcc-4.2.1-cross_search_paths-1.patch && \
- patch -Np1 -i ${CLFS_SOURCE}/gcc-4.2.1-arm-bigendian.patch
- mkdir -v ${CLFS_BUILD}/gcc-build
- cd ${CLFS_BUILD}/gcc-build && \
- ../gcc-4.2.1/configure --prefix=${CLFS}/cross-tools --host=${CLFS_HOST} --target=${CLFS_TARGET} ${GCC_EXTRA_CONFIG} --disable-multilib --with-sysroot=${CLFS} --disable-nls --disable-shared --enable-languages=c
- make -C ${CLFS_BUILD}/gcc-build all-gcc
- make -C ${CLFS_BUILD}/gcc-build install-gcc
- rm -rf ${CLFS_BUILD}/gcc-4.2.1
- rm -rf ${CLFS_BUILD}/gcc-build
- glibc_cross:
- tar -xvjf ${CLFS_SOURCE}/glibc-2.6.1.tar.bz2 -C ${CLFS_BUILD}
- cd ${CLFS_BUILD}/glibc-2.6.1 && \
- tar -xvjf ${CLFS_SOURCE}/glibc-ports-2.6.1.tar.bz2 && mv -v glibc-ports-2.6.1 ports && \
- patch -Np1 -i ${CLFS_SOURCE}/glibc-2.6.1-libgcc_eh-1.patch && \
- patch -Np1 -i ${CLFS_SOURCE}/glibc-2.6.1-localedef_segfault-1.patch && \
- patch -Np1 -i ${CLFS_SOURCE}/glibc-2.6.1-cross_hacks-1.patch && \
- patch -Np1 -i ${CLFS_SOURCE}/glibc-2.6.1-RTLD_SINGLE_THREAD_P-1.patch
- mkdir -v ${CLFS_BUILD}/glibc-build
- cd ${CLFS_BUILD}/glibc-build && \
- echo "libc_cv_forced_unwind=yes" > config.cache && \
- echo "libc_cv_c_cleanup=yes" >> config.cache && \
- echo "install_root=${CLFS}" > configparms && \
- BUILD_CC="gcc" CC="${CLFS_TARGET}-gcc" AR="${CLFS_TARGET}-ar" RANLIB="${CLFS_TARGET}-ranlib" ../glibc-2.6.1/configure --prefix=/usr --libexecdir=/usr/lib/glibc --host=${CLFS_TARGET} --build=${CLFS_HOST} --disable-profile --enable-add-ons --with-tls --enable-kernel=2.6.0 --with-__thread --with-binutils=${CLFS}/cross-tools/bin --with-headers=${CLFS}/usr/include --cache-file=config.cache
- make -C ${CLFS_BUILD}/glibc-build
- make -C ${CLFS_BUILD}/glibc-build install
- #make -C ${CLFS_BUILD}/glibc-build localedata/install-locales
-
- echo "# Begin /etc/nsswitch.conf" > ${CLFS}/etc/nsswitch.conf
- echo "" >> ${CLFS}/etc/nsswitch.conf
- echo "passwd: files" >> ${CLFS}/etc/nsswitch.conf
- echo "group: files" >> ${CLFS}/etc/nsswitch.conf
- echo "shadow: files" >> ${CLFS}/etc/nsswitch.conf
- echo "" >> ${CLFS}/etc/nsswitch.conf
- echo "hosts: files dns" >> ${CLFS}/etc/nsswitch.conf
- echo "networks: files" >> ${CLFS}/etc/nsswitch.conf
- echo "" >> ${CLFS}/etc/nsswitch.conf
- echo "protocols: files" >> ${CLFS}/etc/nsswitch.conf
- echo "services: files" >> ${CLFS}/etc/nsswitch.conf
- echo "ethers: files" >> ${CLFS}/etc/nsswitch.conf
- echo "rpc: files" >> ${CLFS}/etc/nsswitch.conf
- echo "" >> ${CLFS}/etc/nsswitch.conf
- echo "# End /etc/nsswitch.conf" >> ${CLFS}/etc/nsswitch.conf
- echo "# Begin /etc/ld.so.conf" > ${CLFS}/etc/ld.so.conf
- echo "" >> ${CLFS}/etc/ld.so.conf
- echo "/usr/local/lib" >> ${CLFS}/etc/ld.so.conf
- echo "/opt/lib" >> ${CLFS}/etc/ld.so.conf
- echo "" >> ${CLFS}/etc/ld.so.conf
- echo "# End /etc/ld.so.conf" >> ${CLFS}/etc/ld.so.conf
- gcc_cross_final:
- tar -xvjf ${CLFS_SOURCE}/gcc-4.2.1.tar.bz2 -C ${CLFS_BUILD}
- cd ${CLFS_BUILD}/gcc-4.2.1 && \
- patch -Np1 -i ${CLFS_SOURCE}/gcc-4.2.1-posix-1.patch && \
- patch -Np1 -i ${CLFS_SOURCE}/gcc-4.2.1-cross_search_paths-1.patch && \
- patch -Np1 -i ${CLFS_SOURCE}/gcc-4.2.1-arm-bigendian.patch
- mkdir -v ${CLFS_BUILD}/gcc-build
- cd ${CLFS_BUILD}/gcc-build && \
- ../gcc-4.2.1/configure --prefix=${CLFS}/cross-tools --host=${CLFS_HOST} --target=${CLFS_TARGET} ${GCC_EXTRA_CONFIG} --disable-multilib --with-sysroot=${CLFS} --disable-nls --enable-shared --enable-languages=c,c++ --enable-__cxa_atexit --enable-c99 --enable-long-long --enable-threads=posix
- make -C ${CLFS_BUILD}/gcc-build
- make -C ${CLFS_BUILD}/gcc-build install
- file_cross:
- tar -xvzf ${CLFS_SOURCE}/file-4.21.tar.gz -C ${CLFS_BUILD}
- cd ${CLFS_BUILD}/file-4.21 && \
- ./configure --prefix=${CLFS}/cross-tools && \
- make && make install
- groff_cross:
- tar -xvzf ${CLFS_SOURCE}/groff-1.19.2.tar.gz -C ${CLFS_BUILD}
- cd ${CLFS_BUILD}/groff-1.19.2 && \
- PAGE=A4 ./configure --prefix=${CLFS}/cross-tools --without-x
- make -C ${CLFS_BUILD}/groff-1.19.2
- make -C ${CLFS_BUILD}/groff-1.19.2 install
- shadow_cross:
- tar -xvjf ${CLFS_SOURCE}/shadow-4.0.18.1.tar.bz2 -C ${CLFS_BUILD}
- cd ${CLFS_BUILD}/shadow-4.0.18.1 && \
- patch -Np1 -i ${CLFS_SOURCE}/shadow-4.0.18.1-useradd_fix-1.patch && \
- patch -Np1 -i ${CLFS_SOURCE}/shadow-4.0.18.1-sysroot_hacks-1.patch && \
- echo "shadow_cv_passwd_dir=${CLFS}/bin" > config.cache && \
- ./configure --prefix=${CLFS}/cross-tools --sbindir=${CLFS}/cross-tools/bin --sysconfdir=${CLFS}/etc --disable-shared --without-libpam --without-audit --without-selinux --program-prefix=${CLFS_TARGET}- --cache-file=config.cache && \
- cp config.h{,.orig} && \
- sed "/PASSWD_PROGRAM/s/passwd/${CLFS_TARGET}-&/" config.h.orig > config.h
- make -C ${CLFS_BUILD}/shadow-4.0.18.1
- make -C ${CLFS_BUILD}/shadow-4.0.18.1 install
复制代码
另附gcc arm大尾模式patch |