·ChinaUnix首页 ·论坛 ·博客 
Linux首页 | Linux新闻 | Linux文档 | Linux论坛 | Linux下载 | Linux博客 | Linux搜索
新手入门 | 安装启动 | 管理员指南 | 开发手册 | 桌面应用 | 程序开发 | 数据库 | 网络技术| CentOS | Fedora | MySQL | Apache | Ubuntu | Gentoo| OSCON08
  Linux时代 >> 技术文档 >> 程序开发
 
[更新]手把手教你源代码制作龙芯64位系统 v1.1版本
来源: ChinaUnix博客  日期: 2008.03.16 15:02 (共有条评论) 我要评论
 
发现这个文章第一次发表已经整整一年了,
今年春节在家把这个手册升了一下级,使用相关软件包的最新版本。

不多说了,有兴趣的可以看看,发现什么问题的话希望能及时指出来。
由于排版问题,建议直接使用下面的地址来查看或者到我的blog:youbest.cublog.cn上看最新版本。
http://zdbr.net.cn/download/Loongson64-1.1.htm

更新日志:  2008年3月16日:增加文件下载地址一处:
  2008年3月16日:修改文件下载地址一处:
  2008年3月9日:修改笔误10处
  2008年3月9日:修改笔误一处
  2008年2月18日:v1.1 正式版发布
  2007年2月18日(春节):正式版发布


目录
  • 前言
  • 相关知识
    • 工具链原理
    • build、host和target
    • pushd和popd
    • tar的使用
      
  • 准备工作
    • 创建分区
    • 加载分区
    • 设置工作目录
    • 设置必要的环境变量
      
  • 下载
    • 软件包下载
    • 补丁下载
      
  • 建立目标系统目录结构
  • 制作交叉工具链
    • 环境设置
    • 内核头文件(Linux-Header)
    • Binutils交叉工具
    • 目标系统glibc头文件
    • GCC交叉工具(仅支持C语言)
    • 目标系统的glibc
    • GCC交叉工具(支持c和c++语言)
    • File
    • Shadow
    • 清理交叉工具链
      
  • 制作目标系统
    • 环境设置
    • Man_Pages
    • Binutils
    • GCC
    • Sed
    • E2fsprogs
    • Coreutils
    • Iana_Etc
    • M4
    • Bison
    • Ncurses
    • Procps
    • Libtool
    • Readline
    • Zlib
    • Autoconf
    • Automake
    • Bash
    • Bzip2
    • Diffutils
    • File
    • Findutils
    • Flex
    • Gawk
    • Gettext
    • Grep
    • Groff
    • Gzip
    • Inetutils
    • Iproute2
    • Kbd
    • Less
    • Make
    • Man
    • Mktemp
    • Module_Init_Tools
    • Patch
    • Psmisc
    • Shadow
    • Sysklogd
    • Sysvinit
    • Tar
    • Texinfo
    • Udev
    • Util_Linux
    • Vim
    • bootscript
    • udev_rules
      
  • 编译内核
  • 新系统必要的配置文件
  • 系统的打包及启动
  • 一些建议
  • 结束


前言  一直很关心龙芯的成长,现在终于把基于龙芯2E的计算机拿到手了,于是便开始动手做一套原代码编译而来的纯64位Linux系统,其实制作系统本身和制作mips64位系统基本类似,只是有个别基于龙芯的补丁需要打上。

  CLFS中针对mips64位的制作方法非常详细,因此这里不重复该过程,而我对sysroot的交叉方式“情有独衷”,但CLFS-sysroot中还没有出现针对mips和mips64的方法,因此本文将使用该方法建立一个在龙芯上运行的纯64位系统。

  本文力争完成一个完整的制作命令,可以根据本文提供的命令顺序输入就可以完成“龙芯”64位系统的制作了,通常命令表示为 命令  

更新:  由于篇幅比较长所以难免出现一些错误或者笔误,也有可能加入新内容,因此难免会进行修正或增删一些内容,如果本文被转载可以在本人的Blog中查看最新版本。
  我的Blog:http://youbest.cublog.cn
  如须转载请注明作者为孙海勇,并提供转载出处。

  下面我们就开始制作的旅程,那么在开始前先了解一下我们会接触到的一些知识,这些知识对于理解整个制作过程将非常有帮助。


相关知识  sysroot、工具链及制作过程原理
    请参考我的另一篇文章《CLFS2.0原理分析》,该文将整个交叉过程中的原理进行了描述,建议在开始动手前阅读该文章。
    文章地址:
      http://youbest.cublog.cn
      或者http://www.linuxsir.org/bbs/showthread.php?t=267672

  build、host和target
    在交叉编译中比较 常见 的一些参数就是build、host和target了,正确的理解这三者的含义对于交叉编译是非常重要的,下面就此进行解释
    --build=编译该软件所使用的平台
    --host=该软件将运行的平台
    --target=该软件所处理的目标平台

    我们以 gcc 为例子来 讲解 这三者的作用
    在gcc编译中我们使用
    ./configure --build=编译平台 --host=运行平台 --target=目标平台 [各种编译参数]
    来配置gcc的源代码,以让其编译出我们需要的gcc编译器。

    那么在这组配置参数中:
      --build:
        表示目前我们正在运行的平台名称是什么,如果当前我们是在intel的pentium机器中编译该系统,那么我们的--build就可能是i686-pc-linux-gnu,当然如果我们在其它种类的机器上编译那么这个build就应该是那个机器所对应的平台名称。
        该参数在不指定的情况下将自动常识猜测目前平台的名称。

      --host:
        表示我们把这个编译好的gcc在什么样的平台下运行,在交叉编译过程中这个需要我们来指定,因为机器自己是不能知道我们心里是怎么想的,那么我们可以明确的告诉它,我们要做出来的程序是运行在“龙芯”上的,但是目前还不能直接指定“龙芯”,因此我们这里指定为mips64el-unknown-linux-gnu(如果你省点事情那么就用这个名字好了,如果你想用个有个性的名字,那么请你想明白它的含义再动手,并且做好后面的过程需要多出一些手续的麻烦的心理准备)。
        --host也可以不指定,那么host将自动使用build来定义自己,不过那将不再是交叉编译。
      注:--build和--host在不同的时候就被配置文件认定为交叉编译方式。

      --target:
        该参数的目的是让配置程序知道这个软件被编译后使用来处理什么平台上的文件的。
        target这个参数只有在为数不多的几个包中有用处,虽然在./configure --help中经常能看到该参数,但实际上绝大多数软件包都是不需要该参数的。
        从这个参数的含义来看,说明其处理的目标只有在不同平台下表现为不同的时候才有作用,而这些文件通常都跟目标平台 的指令系统直接或间接有关:比如可执行文件,对于不同平台下使用的可执行文件的编码可以是完全不同的,因此必须使用 对应能处理该编码的程序才能正确处理,而如果错误的使用则可能导致程序错误或者破坏文件,对于这样要处理不同平台下会 出现不同编码的软件,我们就应当对它指定目标平台,以免另其错误处理;而对于文本文件,对于不同的平台同样的内容表达的 含义都是相同的,因此我们不需要专门针对平台来处理,这样的软件我们就可以不必对它指定需要处理的平台了。

      我们来总结一下:
        build:自动测试在用平台名称,若无法检测出来则需要指定。
        host:若无指定,自动使用build的结果。
        build和host相同时表示本地编译,若不相同则表示交叉编译。
        target:表示需要处理的目标平台名称,若无指定使用host相同名称,gcc、binutils等于平台指令相关软件有此参数,多数软件此参数无用处。


    pushd和popd
      这是一组用来切换当前目录的实用命令
      pushd [目录名]
      用来将当前目录压入堆栈中,并设置当前目录为指定的目录
      popd
      用来从堆栈中取出最后压入的目录,并将当前目录设置为改目录

      例如:
      当前目录为/usr
      pushd /var/log
      此时当前目录为/var/log,/usr进入堆栈中
      cd /opt
      进入到/opt目录下
      popd
      从堆栈中取出最后加入的目录,此时的结果为/usr,当前目录重新回到/usr下。

      灵活使用这组命令将方便的切换目录,后面的制作过程中将使用该组命令来实现目录的切换。


    tar的使用
      tar可以说是Linux下使用频率非常高的命令,该命令用来将一组文件打包成一个独立的文件,也可以把一个压缩/打包的文件。
      还原成原来的一组文件。
      新版本的tar可以自动识别文件的后缀名来确认使用何种程序来解压缩,因此可以用tar xvf来解开包括tar/tar.bz2/tar.gz/tar.Z等文件而不需要指定压缩类型,因此本文中将直接使用tar xvf来解开文件。

      例如:
        tar xvf gcc-4.2.3.tar.bz2 -C /source
        表示将gcc-4.2.3.tar.bz2展开并存放到/source目录下,-C用来指定目标目录。

      tar 的使用方式非常的多,可使用tar --help或者man tar来查看具体应用。


准备工作
建立分区 cfdisk /dev/hda
创建出一个用于制作系统的分区,如分了一个/dev/hda4来制作系统。

建立用户 groupadd loongson

useradd -s /bin/bash -g loongson -m -k /dev/null loongson

passwd loongson

创建工作目录 export TARGET_DIR="/loongson"

mkdir -pv ${TARGET_DIR}

加载磁盘分区,如刚刚打算用/dev/hda4来制作系统
mount /dev/hda4 ${TARGET_DIR}

创建编译和下载用的目录
mkdir -pv ${TARGET_DIR}/{build,download}

chown -Rv loongson ${TARGET_DIR}

切换用户 su - loongson
设置必要的环境变量 cat > ~/.bash_profile << "EOF"

exec env -i HOME=${HOME} TERM=${TERM} PS1='\u:\w\$ ' /bin/bash

EOF
cat > ~/.bashrc << "EOF"

set +h

umask 022

export TARGET_DIR=/loongson

export LC_ALL=POSIX

export BUILDDIR="${TARGET_DIR}/build"

export DOWNLOADDIR="${TARGET_DIR}/download"

export CROSS_HOST="$(echo $MACHTYPE | sed "s/$(echo $MACHTYPE | cut -d- -f2)/cross/")"

export CROSS_TARGET="mips64el-unknown-linux-gnu"

export BUILD64="-mabi=64"

export PATH=${TARGET_DIR}/cross-tools/bin:/bin:/usr/bin

unset CFLAGS

unset CXXFLAGS

EOF
source ~/.bash_profile以下是执行完上述命令后使用export命令所显示内容的一个例子
  declare -x BUILD64="-mabi=64"
  declare -x BUILDDIR="/loongson/build"
  declare -x CROSS_HOST="i686-cross-linux-gnu"
  declare -x CROSS_TARGET="mips64el-unknown-linux-gnu"
  declare -x DOWNLOADDIR="/loongson/download"
  declare -x HOME="/home/loongson"
  declare -x LC_ALL="POSIX"
  declare -x OLDPWD
  declare -x PATH="/loongson/cross-tools/bin:/bin:/usr/bin"
  declare -x PS1="\\u:\\w\\\$ "
  declare -x PWD="/home/loongson"
  declare -x SHLVL="1"
  declare -x TARGET_DIR="/loongson"
  declare -x TERM="linux"


软件包下载  Linux-kernel:
    http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.24.2.tar.bz2
  Binutils:
    http://ftp.gnu.org/gnu/binutils/binutils-2.18.tar.bz2
  Glibc:
    http://ftp.gnu.org/gnu/glibc/glibc-2.7.tar.bz2
  Glibc-Ports:
    http://ftp.gnu.org/gnu/glibc/glibc-ports-2.7.tar.bz2
  GCC:
    http://ftp.gnu.org/gnu/gcc/gcc-4.2.3/gcc-4.2.3.tar.bz2
  File:
    ftp://ftp.gw.com/mirrors/unix/file/file-4.21.tar.gz
  Shadow:
    http://zdbr.net.cn/download/shadow-4.0.18.1.tar.bz2

  Man-Pages:
    http://www.kernel.org/pub/linux/docs/manpages/man-pages-2.78.tar.bz2
  Sed:
    http://ftp.gnu.org/gnu/sed/sed-4.1.5.tar.gz
  E2fsprogs:
    http://downloads.sourceforge.net/e2fsprogs/e2fsprogs-1.40.6.tar.gz
  Coreutils:
    http://ftp.gnu.org/gnu/coreutils/coreutils-6.9.tar.bz2
  Iana-Etc:
    http://www.sethwklein.net/projects/iana-etc/downloads/iana-etc-2.20.tar.bz2
  M4:
    http://ftp.gnu.org/gnu/m4/m4-1.4.10.tar.bz2
  Bison:
    http://ftp.gnu.org/gnu/bison/bison-2.3.tar.bz2
  Ncurses:
    ftp://invisible-island.net/ncurses/ncurses-5.6.tar.gz
  Procps:
    http://procps.sourceforge.net/procps-3.2.7.tar.gz
  Libtool:
    http://ftp.gnu.org/gnu/libtool/libtool-1.5.26.tar.gz
  Readline:
    http://ftp.gnu.org/gnu/readline/readline-5.2.tar.gz
  Zlib:
    http://www.zlib.net/zlib-1.2.3.tar.gz
  Autoconf:
    http://ftp.gnu.org/gnu/autoconf/autoconf-2.61.tar.bz2
  Automake:
    http://ftp.gnu.org/gnu/automake/automake-1.10.1.tar.bz2
  Bash:
    http://ftp.gnu.org/gnu/bash/bash-3.2.tar.gz
  Bash-doc:
    http://ftp.gnu.org/gnu/bash/bash-doc-3.2.tar.gz
  Bzip2:
    http://www.bzip.org/1.0.4/bzip2-1.0.4.tar.gz
  Diffutils:
    ftp://alpha.gnu.org/gnu/diffutils/diffutils-2.8.7.tar.gz
  Findutils:
    http://ftp.gnu.org/gnu/findutils/findutils-4.2.33.tar.gz
  Flex:
    http://downloads.sourceforge.net/flex/flex-2.5.34.tar.bz2
  Gawk:
    http://ftp.gnu.org/gnu/gawk/gawk-3.1.6.tar.bz2
  Gettext:
    http://ftp.gnu.org/gnu/gettext/gettext-0.16.1.tar.gz
  Grep:
    http://ftp.gnu.org/gnu/grep/grep-2.5.3.tar.bz2
  Groff:
    http://ftp.gnu.org/gnu/groff/groff-1.19.2.tar.gz
  Gzip:
    http://ftp.gnu.org/gnu/gzip/gzip-1.3.12.tar.gz
  Inetutils:
    http://ftp.gnu.org/gnu/inetutils/inetutils-1.5.tar.gz
  Iproute2:
    http://developer.osdl.org/dev/iproute2/download/iproute2-2.6.23.tar.gz
  Kbd:
    http://www.kernel.org/pub/linux/utils/kbd/kbd-1.12.tar.bz2
  Less:
    http://www.greenwoodsoftware.com/less/less-418.tar.gz
  Make:
    http://ftp.gnu.org/gnu/make/make-3.81.tar.bz2
  Man:
    http://primates.ximian.com/~flucifredi/man/man-1.6f.tar.gz
  Mktemp:
    ftp://ftp.mktemp.org/pub/mktemp/mktemp-1.5.tar.gz
  Module-Init-Tools:
    http://www.kerneltools.org/pub/downloads/module-init-tools/module-init-tools-3.2.2.tar.bz2
  Patch:
    ftp://alpha.gnu.org/gnu/diffutils/patch-2.5.9.tar.gz
  Psmisc:
    http://downloads.sourceforge.net/psmisc/psmisc-22.6.tar.gz
  Sysklogd:
    http://www.infodrom.org/projects/sysklogd/download/sysklogd-1.5.tar.gz
  Sysvinit:
    ftp://ftp.cistron.nl/pub/people/miquels/sysvinit/sysvinit-2.86.tar.gz
  Tar:
    http://ftp.gnu.org/gnu/tar/tar-1.18.tar.bz2
  Texinfo:
    http://ftp.gnu.org/gnu/texinfo/texinfo-4.9.tar.bz2
  Udev:
    http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev-118.tar.bz2
  Util-Linux:
    http://www.kernel.org/pub/linux/utils/util-linux-ng/util-linux-ng-2.13.1.tar.bz2
  Vim:
    ftp://ftp.vim.org/pub/vim/unix/vim-7.1.tar.bz2
    ftp://ftp.vim.org/pub/vim/extra/vim-7.1-extra.tar.gz
    ftp://ftp.vim.org/pub/vim/extra/vim-7.1-lang.tar.gz
  Bootscripts:
    http://zdbr.net.cn/download/bootscripts-cross-lfs-1.1-pre4.tar.bz2
说明:所有文件请下载后保存在${DOWNLOADDIR}(本文中即/loongson/download)目录中。 补丁及配置文件    http://www.zdbr.net.cn/download/patch_and_config-1.1.tar.bz2
  说明:下载该文件后可执行以下命令展开到download目录中。 tar xvf patch_and_config-1.1.tar.bz2 -C ${DOWNLOADDIR}

建立目标系统目录结构pushd ${TARGET_DIR}

        mkdir -pv {bin,boot,dev,{etc/,}opt,home,lib,mnt}

        mkdir -pv {proc,media/{floppy,cdrom},sbin,srv,sys}

        mkdir -pv var/{lock,log,mail,run,spool}

        mkdir -pv var/{opt,cache,lib/{misc,locate},local}

        install -dv -m 0750 root

        install -dv -m 1777 {var/,}tmp

        mkdir -pv usr/{,local/}{bin,include,lib,sbin,src}

        mkdir -pv usr/{,local/}share/{doc,info,locale,man}

        mkdir -pv usr/{,local/}share/{misc,terminfo,zoneinfo}

        mkdir -pv usr/{,local/}share/man/man{1..8}

        for dir in usr{,/local}; do

                ln -sv share/{man,doc,info} $dir

        done

        ln -svf lib lib64

        ln -svf lib usr/lib64

        cd boot

        ln -svf . boot

popd


创建必要的用户、组和日志文件cat > ${TARGET_DIR}/etc/passwd << "EOF"

root::0:0:root:/root:/bin/bash

EOF
cat > ${TARGET_DIR}/etc/group << "EOF"

root:x:0:

bin:x:1:

sys:x:2:

kmem:x:3:

tty:x:4:

tape:x:5:

daemon:x:6:

floppy:x:7:

disk:x:8:

lp:x:9:

dialout:x:10:

audio:x:11:

video:x:12:

utmp:x:13:

usb:x:14:

cdrom:x:15:

EOF
touch ${TARGET_DIR}/var/run/utmp ${TARGET_DIR}/var/log/{btmp,lastlog,wtmp}

chmod -v 664 ${TARGET_DIR}/var/run/utmp ${TARGET_DIR}/var/log/lastlog




制作交叉工具链内核头文件(Linux-Header)
tar xvf ${DOWNLOADDIR}/linux-2.6.24.2.tar.gz -C ${BUILDDIR}

pushd ${BUILDDIR}/linux-2.6.24.2

        make mrproper

        make ARCH=mips headers_check

        make ARCH=mips INSTALL_HDR_PATH=dest headers_install

        cp –rv dest/include/* ${TARGET_DIR}/usr/include
        cd ..

        rm -rf linux-2.6.24.2

popd


Binutils交叉工具
tar xvf ${DOWNLOADDIR}/binutils-2.18.tar.bz2 -C ${BUILDDIR}

pushd ${BUILDDIR}/binutils-2.18

        mkdir -pv ../binutils-build

        cd ../binutils-build

        CC="gcc" AR="ar" ../binutils-2.18/configure --prefix=${TARGET_DIR}/cross-tools \

                --build=${CROSS_HOST} --target=${CROSS_TARGET} \

                --enable-64-bit-bfd --with-sysroot=${TARGET_DIR}  \

                --disable-nls --enable-shared --disable-multilib

        make configure-host

        make

        make install

        cp -v ../binutils-2.18/include/libiberty.h ${TARGET_DIR}/usr/include

        cd ..

        rm -rf binutils-build

        rm -rf binutils-2.18

popd


目标系统glibc头文件
tar xvf ${DOWNLOADDIR}/glibc-2.7.tar.bz2 -C ${BUILDDIR}

pushd ${BUILDDIR}/glibc-2.7

        cp configure{,.orig} &&

        sed -e 's/3.4/3.[0-9]/g' configure.orig > configure

        tar xvf ${DOWNLOADDIR}/glibc-ports-2.7.tar.bz2

        mv -v glibc-ports-2.7 ports

        patch -Np1 -i ${DOWNLOADDIR}/glibc-2.7-mips_fixes-1.patch

        echo "" > ports/sysdeps/mips/mips64/n32/Makefile

        sed -i 's/-mabi=$mips_config_abi//g' ports/sysdeps/mips/preconfigure

        mkdir -pv ../glibc-build

        cd ../glibc-build

        echo "libc_cv_forced_unwind=yes" > config.cache &&

        echo "libc_cv_c_cleanup=yes" >> config.cache &&

        echo "libc_cv_mips_tls=yes" >> config.cache

        echo "install_root=${TARGET_DIR}" > configparms
        CC="gcc" ../glibc-2.7/configure --prefix=/usr  \

                --host=${CROSS_TARGET} --build=${CROSS_HOST}   \

                --with-headers=${TARGET_DIR}/usr/include --cache-file=config.cache

        make install-headers

        install -dv ${TARGET_DIR}/usr/include/bits

        touch ${TARGET_DIR}/usr/include/bits/stdio_lim.h

        touch ${TARGET_DIR}/usr/include/gnu/stubs.h

        cp -v ../glibc-2.7/ports/sysdeps/unix/sysv/linux/mips/nptl/bits/pthreadtypes.h \

                ${TARGET_DIR}/usr/include/bits

        cd ..

        rm -rf glibc-build

        rm -rf glibc-2.7

popd


GCC交叉工具(仅支持C语言)
tar xvf ${DOWNLOADDIR}/gcc-4.2.3.tar.bz2 -C ${BUILDDIR}

pushd ${BUILDDIR}/gcc-4.2.3

        patch -Np1 -i ${DOWNLOADDIR}/gcc-4.2.3-posix-1.patch

        patch -Np1 -i ${DOWNLOADDIR}/gcc-4.2.3-cross_search_paths-1.patch

        mkdir -pv ../gcc-build

        cd ../gcc-build

        ../gcc-4.2.3/configure --prefix=${TARGET_DIR}/cross-tools \

                --host=${CROSS_HOST} --target=${CROSS_TARGET} --with-sysroot=${TARGET_DIR} \

                --disable-nls --disable-shared --disable-threads --disable-multilib \

                --enable-languages=c --with-abi=64

        make all-gcc

        make install-gcc

        cd ..

        rm -r gcc-build

        rm -r gcc-4.2.3

popd


目标系统的glibc
tar xvf ${DOWNLOADDIR}/glibc-2.7.tar.bz2 -C ${BUILDDIR}

pushd ${BUILDDIR}/glibc-2.7

        tar xvf ${DOWNLOADDIR}/glibc-ports-2.7.tar.bz2

        mv -v glibc-ports-2.7 ports

        patch -Np1 -i ${DOWNLOADDIR}/glibc-2.7-libgcc_eh-1.patch

        patch -Np1 -i ${DOWNLOADDIR}/glibc-2.7-localedef_segfault-1.patch

        patch -Np1 -i ${DOWNLOADDIR}/glibc-2.7-cross_hacks-1.patch

        patch -Np1 -i ${DOWNLOADDIR}/glibc-2.7-mips_fixes-1.patch

        sed -i '/default) machine=/s/n32/64/g' ports/sysdeps/mips/preconfigure

        mkdir -pv ../glibc-build

        cd ../glibc-build

        echo "libc_cv_forced_unwind=yes" > config.cache

        echo "libc_cv_c_cleanup=yes" >> config.cache

        echo "libc_cv_mips_tls=yes" >> config.cache

        echo "libc_cv_slibdir=/lib" >> config.cache

        echo "install_root=${TARGET_DIR}" > configparms

        echo "libdir=/usr/lib" >> configparms

        BUILD_CC="gcc" CC="${CROSS_TARGET}-gcc ${BUILD64}" AR="${CROSS_TARGET}-ar"  \

                RANLIB="${CROSS_TARGET}-ranlib" ../glibc-2.7/configure --prefix=/usr \

                --libexecdir=/usr/lib/glibc --host=${CROSS_TARGET} --build=${CROSS_HOST} \

                --disable-profile --enable-add-ons --with-tls --enable-kernel=2.6.18 \

                --with-__thread --with-binutils=${TARGET_DIR}/cross-tools/bin \

                --with-headers=${TARGET_DIR}/usr/include --cache-file=config.cache

        make

        make install

        make localedata/install-locales

        cd ..

        rm -rf glibc-build

        rm -rf glibc-2.7

       

cat > ${TARGET_DIR}/etc/nsswitch.conf << "EOF"

# Begin /etc/nsswitch.conf



passwd: files

group: files

shadow: files



hosts: files dns

networks: files



protocols: files

services: files

ethers: files

rpc: files



# End /etc/nsswitch.conf

EOF





cp -v --remove-destination ${TARGET_DIR}/usr/share/zoneinfo/Asia/Shanghai \
        ${TARGET_DIR}/etc/localtime





cat > ${TARGET_DIR}/etc/ld.so.conf << "EOF"

# Begin /etc/ld.so.conf



/usr/local/lib

/opt/lib



# End /etc/ld.so.conf

EOF



popd


GCC交叉工具(支持c和c++语言)
tar xvf ${DOWNLOADDIR}/gcc-4.2.3.tar.bz2 -C ${BUILDDIR}

pushd ${BUILDDIR}/gcc-4.2.3

        patch -Np1 -i ${DOWNLOADDIR}/gcc-4.2.3-posix-1.patch

        patch -Np1 -i ${DOWNLOADDIR}/gcc-4.2.3-cross_search_paths-1.patch

        mkdir -v ../gcc-build

        cd ../gcc-build

        ../gcc-4.2.3/configure --prefix=${TARGET_DIR}/cross-tools --host=${CROSS_HOST} \

                --target=${CROSS_TARGET} --with-sysroot=${TARGET_DIR} --with-abi=64 \

                --disable-nls --enable-shared --disable-multilib --enable-__cxa_atexit \

                --enable-c99 --enable-long-long --enable-threads=posix --enable-languages=c,c++

        make

        make install

        cd ..

        rm -rf gcc-build

        rm -rf gcc-4.2.3

popd


File软件包
tar xvf ${DOWNLOADDIR}/file-4.21.tar.gz -C ${BUILDDIR}
pushd ${BUILDDIR}/file-4.21
        ./configure --prefix=${TARGET_DIR}/cross-tools
        make
        make install
        cd ..
        rm -rf file-4.21
popd


Groff软件包
tar xvf ${DOWNLOADDIR}/groff-1.19.2.tar.gz -C ${BUILDDIR}
pushd ${BUILDDIR}/groff-1.19.2
        PAGE=A4 ./configure --prefix=${TARGET_DIR}/cross-tools --without-x
        make
        make install
        cd ..
        rm -rf groff-1.19.2
popd


Shadow软件包
tar xvf ${DOWNLOADDIR}/shadow-4.0.18.1.tar.bz2 -C ${BUILDDIR}
pushd ${BUILDDIR}/shadow-4.0.18.1
        patch -Np1 -i ${DOWNLOADDIR}/shadow-4.0.18.1-useradd_fix-2.patch
        patch -Np1 -i ${DOWNLOADDIR}/shadow-4.0.18.1-sysroot_hacks-1.patch
        echo "shadow_cv_passwd_dir=${TARGET_DIR}/bin" > config.cache
        echo "ac_cv_func_lckpwdf=no" >> config.cache
        ./configure --prefix=${TARGET_DIR}/cross-tools --sbindir=${TARGET_DIR}/cross-tools/bin \

                --sysconfdir=${TARGET_DIR}/etc --disable-shared --without-libpam --without-audit \

                --without-selinux --program-prefix=${CROSS_TARGET}- --cache-file=config.cache
        cp config.h{,.orig} &&
        sed "/PASSWD_PROGRAM/s/passwd/${CROSS_TARGET}-&/" config.h.orig > config.h
        make
        make install
        cd ..
        rm -rf shadow-4.0.18.1
popd


清理交叉工具链
pushd ${TARGET_DIR}/cross-tools

        /bin/find ./{bin,lib} -type f -exec strip --strip-debug '{}' ';'

popd
注意:不正确的清理参数用于库文件的时候有导致库文件 损坏的可能,因此请注意命令的 参数,如果你不放心也可跳过这部分,并不会影响后面的过程。




制作目标系统
环境设置
export CC="${CROSS_TARGET}-gcc"

export CXX="${CROSS_TARGET}-g++"

export AR="${CROSS_TARGET}-ar"

export AS="${CROSS_TARGET}-as"

export RANLIB="${CROSS_TARGET}-ranlib"

export LD="${CROSS_TARGET}-ld"

export STRIP="${CROSS_TARGET}-strip"

将环境变量设置到~/.bashrc中,以方便重新进入时自动设置 echo "export CC=\"${CROSS_TARGET}-gcc\"" >> ~/.bashrc

echo "export CXX=\"${CROSS_TARGET}-g++\"" >> ~/.bashrc

echo "export AR=\"${CROSS_TARGET}-ar\"" >> ~/.bashrc

echo "export AS=\"${CROSS_TARGET}-as\"" >> ~/.bashrc

echo "export RANLIB=\"${CROSS_TARGET}-ranlib\"" >> ~/.bashrc

echo "export LD=\"${CROSS_TARGET}-ld\"" >> ~/.bashrc

echo "export STRIP=\"${CROSS_TARGET}-strip\"" >> ~/.bashrc


---------man-pages--------------
tar xvf ${DOWNLOADDIR}/man-pages-2.78.tar.bz2 -C ${BUILDDIR}

pushd ${BUILDDIR}/man-pages-2.78

        make prefix=${TARGET_DIR} install

        cd ..

        rm -rf man-pages-2.78

popd


---------Binutils--------
tar xvf ${DOWNLOADDIR}/binutils-2.18.tar.bz2 -C ${BUILDDIR}

pushd ${BUILDDIR}/binutils-2.18

        mkdir -pv ../binutils-build

        cd ../binutils-build

        CC="${CC} ${BUILD64}" CXX="${CXX} ${BUILD64}" ../binutils-2.18/configure \

                --prefix=/usr --build=${CROSS_HOST} --host=${CROSS_TARGET} \

                --enable-64-bit-bfd --enable-shared --disable-multilib

        make configure-host

        make tooldir=/usr

        make DESTDIR=${TARGET_DIR} tooldir=/usr install

        cp -v ../binutils-2.18/include/libiberty.h ${TARGET_DIR}/usr/include

        cd ..

        rm -rf binutils-build

        rm -rf binutils-2.18

popd

-----------GCC------------
tar xvf ${DOWNLOADDIR}/gcc-4.2.3.tar.bz2 -C ${BUILDDIR}

pushd ${BUILDDIR}/gcc-4.2.3

        patch -Np1 -i ${DOWNLOADDIR}/gcc-4.2.3-posix-1.patch

        patch -Np1 -i ${DOWNLOADDIR}/gcc-4.2.3-pure64-1.patch

        cp libiberty/Makefile.in{,.orig} &&

        sed 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in.orig \

                > libiberty/Makefile.in

        cp gcc/gccbug.in{,.orig} &&

        sed 's/@have_mktemp_command@/yes/' gcc/gccbug.in.orig > gcc/gccbug.in

        cp gcc/Makefile.in{,.orig} &&

        sed 's@\./fixinc\.sh@-c true@' gcc/Makefile.in.orig > gcc/Makefile.in

        mkdir -v ../gcc-build

        cd ../gcc-build

        CC="${CC} ${BUILD64}" CXX="${CXX} ${BUILD64}" ../gcc-4.2.3/configure --prefix=/usr \

                --libexecdir=/usr/lib --build=${CROSS_HOST} --host=${CROSS_TARGET} \

                --target=${CROSS_TARGET} --enable-shared --enable-threads=posix \

                --enable-__cxa_atexit --enable-c99 --enable-long-long --with-abi=64 \

                --enable-clocale=gnu --enable-languages=c,c++ --disable-libstdcxx-pch \

                --disable-multilib

        make

        make DESTDIR=${TARGET_DIR} install

        ln -sv ../usr/bin/cpp ${TARGET_DIR}/lib

        ln -sv gcc ${TARGET_DIR}/usr/bin/cc

        cd ..

        rm -rf gcc-build

        rm -rf gcc-4.2.3

popd


--------Sed-----------
tar xvf ${DOWNLOADDIR}/sed-4.1.5.tar.gz -C ${BUILDDIR}

pushd ${BUILDDIR}/sed-4.1.5

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                --build=${CROSS_HOST} --host=${CROSS_TARGET} --prefix=/usr --bindir=/bin  \

                --enable-html

        make

        make DESTDIR=${TARGET_DIR} install

        cd ..

        rm -rf sed-4.1.5

popd


--------E2fsprogs--------
tar xvf ${DOWNLOADDIR}/e2fsprogs-1.40.6.tar.gz -C ${BUILDDIR}

pushd ${BUILDDIR}/e2fsprogs-1.40.6

        mkdir -v build

        cd build

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ../configure \

                --build=${CROSS_HOST} --host=${CROSS_TARGET} --prefix=/usr --with-root-prefix="" \

                --enable-elf-shlibs --disable-evms

        make

        make DESTDIR=${TARGET_DIR} install

        make DESTDIR=${TARGET_DIR} install-libs

        cd ../..

        rm -rf e2fsprogs-1.40.6

popd


---------Coreutils-----------
tar xvf ${DOWNLOADDIR}/coreutils-6.9.tar.bz2 -C ${BUILDDIR}
pushd ${BUILDDIR}/coreutils-6.9

        sed -i 's/futimens/gl_&/' src/{copy,touch}.c lib/utimens.{c,h}

        patch -Np1 -i ${DOWNLOADDIR}/coreutils-6.9-suppress_uptime_kill_su-1.patch

        patch -Np1 -i ${DOWNLOADDIR}/coreutils-6.9-uname-1.patch

        patch -Np1 -i ${DOWNLOADDIR}/coreutils-6.9-i18n-1.patch

        touch man/*.1

        echo "fu_cv_sys_stat_statfs2_bsize=yes" > config.cache

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                --build=${CROSS_HOST} --host=${CROSS_TARGET} --prefix=/usr --cache-file=config.cache

        make

        make DESTDIR=${TARGET_DIR} install

        mv -v ${TARGET_DIR}/usr/bin/{cat,chgrp,chmod,chown,cp,date} ${TARGET_DIR}/bin

        mv -v ${TARGET_DIR}/usr/bin/{dd,df,echo,false,hostname,ln,ls,mkdir,mknod} ${TARGET_DIR}/bin

        mv -v ${TARGET_DIR}/usr/bin/{mv,pwd,rm,rmdir,stty,true,uname} ${TARGET_DIR}/bin

        mv -v ${TARGET_DIR}/usr/bin/chroot ${TARGET_DIR}/usr/sbin



        mv -v ${TARGET_DIR}/usr/bin/{[,basename,head,install,nice} ${TARGET_DIR}/bin

        mv -v ${TARGET_DIR}/usr/bin/{readlink,sleep,sync,test,touch} ${TARGET_DIR}/bin

        ln -svf ../../bin/install ${TARGET_DIR}/usr/bin

        cd ..

        rm -rf coreutils-6.9

popd


---------Iana_Etc--------
tar xvf ${DOWNLOADDIR}/iana-etc-2.20.tar.bz2 -C ${BUILDDIR}

pushd ${BUILDDIR}/iana-etc-2.20

        make

        make DESTDIR=${TARGET_DIR} install

        cd ..

        rm -rf iana-etc-2.20

popd


----------M4------------
tar xvf ${DOWNLOADDIR}/m4-1.4.10.tar.bz2 -C ${BUILDDIR}

pushd ${BUILDDIR}/m4-1.4.10

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                --build=${CROSS_HOST} --host=${CROSS_TARGET} --prefix=/usr

        make

        make DESTDIR=${TARGET_DIR} install

        cd ..

        rm -rf m4-1.4.10

popd


---------Bison---------
tar xvf ${DOWNLOADDIR}/bison-2.3.tar.bz2 -C ${BUILDDIR}

pushd ${BUILDDIR}/bison-2.3

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                --build=${CROSS_HOST} --host=${CROSS_TARGET} --prefix=/usr

        echo '#define YYENABLE_NLS 1' >> config.h

        make

        make DESTDIR=${TARGET_DIR} install

        cd ..

        rm -rf bison-2.3

popd


--------Ncurses----------
tar xvf ${DOWNLOADDIR}/ncurses-5.6.tar.gz -C ${BUILDDIR}

pushd ${BUILDDIR}/ncurses-5.6

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                --build=${CROSS_HOST} --host=${CROSS_TARGET} --prefix=/usr --with-shared \

                --without-debug --without-ada --with-build-cc=gcc --libdir=/lib

        make

        make DESTDIR=${TARGET_DIR} install

        mv -v ${TARGET_DIR}/lib/lib{panel,menu,form,ncurses,ncurses++,curses}.a ${TARGET_DIR}/usr/lib

        rm -v ${TARGET_DIR}/lib/lib{ncurses,menu,panel,form,curses}.so

       

        ln -svf ../../lib/libncurses.so.5 ${TARGET_DIR}/usr/lib/libcurses.so

        ln -svf ../../lib/libncurses.so.5 ${TARGET_DIR}/usr/lib/libncurses.so

        ln -svf ../../lib/libmenu.so.5 ${TARGET_DIR}/usr/lib/libmenu.so

        ln -svf ../../lib/libpanel.so.5 ${TARGET_DIR}/usr/lib/libpanel.so

        ln -svf ../../lib/libform.so.5 ${TARGET_DIR}/usr/lib/libform.so

        chmod -v 755 ${TARGET_DIR}/lib/lib{panel,menu,form,ncurses}.so.5.6

        cd ..

        rm -rf ncurses-5.6

popd


-----------Procps------------
tar xvf ${DOWNLOADDIR}/procps-3.2.7.tar.gz -C ${BUILDDIR}

pushd ${BUILDDIR}/procps-3.2.7

        cp -v Makefile{,.orig} &&

        sed -e "/^install  :=/s/--owner 0 --group 0//" \

                -e "/^ldconfig :=/s/= ldconfig/=/" Makefile.orig > Makefile

        make

        make DESTDIR=${TARGET_DIR} lib64=lib install

        cd ..

        rm -rf procps-3.2.7

popd


-----------Libtool--------------
tar xvf ${DOWNLOADDIR}/libtool-1.5.26.tar.gz -C ${BUILDDIR}

pushd ${BUILDDIR}/libtool-1.5.26

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                --build=${CROSS_HOST} --host=${CROSS_TARGET} --prefix=/usr

        make

        make DESTDIR=${TARGET_DIR} install

        cd ..

        rm -rf libtool-1.5.26

popd


-----------Readline------------
tar xvf ${DOWNLOADDIR}/readline-5.2.tar.gz -C ${BUILDDIR}

pushd ${BUILDDIR}/readline-5.2

        patch -Np1 -i ${DOWNLOADDIR}/readline-5.2-fixes-3.patch

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                --build=${CROSS_HOST} --host=${CROSS_TARGET} --prefix=/usr --libdir=/lib

        make SHLIB_XLDFLAGS=-lncurses

        make DESTDIR=${TARGET_DIR} install

        chmod -v 755 ${TARGET_DIR}/lib/lib{readline,history}.so*

        mv -v ${TARGET_DIR}/lib/lib{readline,history}.a ${TARGET_DIR}/usr/lib

        rm -v ${TARGET_DIR}/lib/lib{readline,history}.so

       

        ln -svf ../../lib/libreadline.so.5 ${TARGET_DIR}/usr/lib/libreadline.so

        ln -svf ../../lib/libhistory.so.5 ${TARGET_DIR}/usr/lib/libhistory.so

        cd ..

        rm -rf readline-5.2

popd


------------Zlib-----------
tar xvf ${DOWNLOADDIR}/zlib-1.2.3.tar.gz -C ${BUILDDIR}

pushd ${BUILDDIR}/zlib-1.2.3

        patch -Np1 -i ${DOWNLOADDIR}/zlib-1.2.3-fPIC-1.patch

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                --prefix=/usr --shared

        make AR="${AR} rc"

        make prefix=${TARGET_DIR}/usr install

        mv -v ${TARGET_DIR}/usr/lib/libz.so.* ${TARGET_DIR}/lib

        ln -svf ../../lib/libz.so.1 ${TARGET_DIR}/usr/lib/libz.so

        chmod -v 644 ${TARGET_DIR}/usr/lib/libz.a

        cd ..

        rm -rf zlib-1.2.3

popd


-----------Autoconf------------
tar xvf ${DOWNLOADDIR}/autoconf-2.61.tar.bz2 -C ${BUILDDIR}

pushd ${BUILDDIR}/autoconf-2.61

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                --build=${CROSS_HOST} --host=${CROSS_TARGET} --prefix=/usr

        make

        make DESTDIR=${TARGET_DIR} install

        cd ..

        rm -rf autoconf-2.61

popd


-------------Automake-----------
tar xvf ${DOWNLOADDIR}/automake-1.10.1.tar.bz2 -C ${BUILDDIR}

pushd ${BUILDDIR}/automake-1.10.1

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                --build=${CROSS_HOST} --host=${CROSS_TARGET} --prefix=/usr

        make

        make DESTDIR=${TARGET_DIR} install

        cd ..

        rm -rf automake-1.10.1

popd


-------------Bash-----------
tar xvf ${DOWNLOADDIR}/bash-3.2.tar.gz -C ${BUILDDIR}

pushd ${BUILDDIR}/bash-3.2

        tar xvf ${DOWNLOADDIR}/bash-doc-3.2.tar.gz

        patch -Np1 -i ${DOWNLOADDIR}/bash-3.2-fixes-5.patch

        echo "bash_cv_sys_named_pipes=yes" > config.cache

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                --build=${CROSS_HOST} --host=${CROSS_TARGET} --prefix=/usr --bindir=/bin \

                --cache-file=config.cache --without-bash-malloc --with-installed-readline

        make

        make DESTDIR=${TARGET_DIR} htmldir=/usr/share/doc/bash-3.2 install

        ln -sv bash ${TARGET_DIR}/bin/sh

        cd ..

        rm -rf bash-3.2

popd


-------------Bzip2---------------
tar xvf ${DOWNLOADDIR}/bzip2-1.0.4.tar.gz -C ${BUILDDIR}

pushd ${BUILDDIR}/bzip2-1.0.4

        cp Makefile{,.orig} &&

        sed -e "/^all:/s/ test//" Makefile.orig > Makefile

        make -f Makefile-libbz2_so CC="${CC}" AR="${AR}" RANLIB="${RANLIB}"

        make clean

        make CC="${CC}" AR="${AR}" RANLIB="${RANLIB}"

        make PREFIX=${TARGET_DIR}/usr install

        cp -v bzip2-shared ${TARGET_DIR}/bin/bzip2

        cp -av libbz2.so* ${TARGET_DIR}/lib

        ln -sv ../../lib/libbz2.so.1.0 ${TARGET_DIR}/usr/lib/libbz2.so

        rm -v ${TARGET_DIR}/usr/bin/{bunzip2,bzcat,bzip2}

        ln -sv bzip2 ${TARGET_DIR}/bin/bunzip2

        ln -sv bzip2 ${TARGET_DIR}/bin/bzcat

        cd ..

        rm -rf bzip2-1.0.4

popd


------------Diffutils-----------
tar xvf ${DOWNLOADDIR}/diffutils-2.8.7.tar.gz -C ${BUILDDIR}

pushd ${BUILDDIR}/diffutils-2.8.7

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                --build=${CROSS_HOST} --host=${CROSS_TARGET} --prefix=/usr

        make

        make DESTDIR=${TARGET_DIR} install

        cd ..

        rm -rf diffutils-2.8.7

popd


-------------File---------------
tar xvf ${DOWNLOADDIR}/file-4.21.tar.gz -C ${BUILDDIR}

pushd ${BUILDDIR}/file-4.21

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                --build=${CROSS_HOST} --host=${CROSS_TARGET} --prefix=/usr

        make

        make DESTDIR=${TARGET_DIR} install

        cd ..

        rm -rf file-4.21

popd


--------------Findutils------------
tar xvf ${DOWNLOADDIR}/findutils-4.2.33.tar.gz -C ${BUILDDIR}

pushd ${BUILDDIR}/findutils-4.2.33

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                --build=${CROSS_HOST} --host=${CROSS_TARGET} --prefix=/usr \

                --libexecdir=/usr/lib/locate --localstatedir=/var/lib/locate

        make

        make DESTDIR=${TARGET_DIR} install

        mv -v ${TARGET_DIR}/usr/bin/find ${TARGET_DIR}/bin

        cp ${TARGET_DIR}/usr/bin/updatedb{,.orig}

        sed 's@find:=${BINDIR}@find:=/bin@' ${TARGET_DIR}/usr/bin/updatedb.orig \

                > ${TARGET_DIR}/usr/bin/updatedb

        rm ${TARGET_DIR}/usr/bin/updatedb.orig

        cd ..

        rm -rf findutils-4.2.33

popd


--------------Flex--------------
tar xvf ${DOWNLOADDIR}/flex-2.5.34.tar.bz2 -C ${BUILDDIR}

pushd ${BUILDDIR}/flex-2.5.34

        cp -v Makefile.in{,.orig} &&

        sed "s/-I@includedir@//g" Makefile.in.orig > Makefile.in

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                --build=${CROSS_HOST} --host=${CROSS_TARGET} --prefix=/usr

        patch -Np1 -i ${DOWNLOADDIR}/flex-2.5.34-fixes-1.patch

        make

        make DESTDIR=${TARGET_DIR} install

        ln -sv libfl.a ${TARGET_DIR}/usr/lib/libl.a

        cd ..

        rm -r flex-2.5.34



        cat > ${TARGET_DIR}/usr/bin/lex << "EOF"

#!/bin/sh

# Begin /usr/bin/lex



exec /usr/bin/flex -l "$@"



# End /usr/bin/lex

EOF

        chmod -v 755 ${TARGET_DIR}/usr/bin/lex



popd



----------------Gawk------------
tar xvf ${DOWNLOADDIR}/gawk-3.1.6.tar.bz2 -C ${BUILDDIR}

pushd ${BUILDDIR}/gawk-3.1.6

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                --build=${CROSS_HOST} --host=${CROSS_TARGET} --prefix=/usr --libexecdir=/usr/lib

        echo '#define HAVE_LANGINFO_CODESET 1' >> config.h

        echo '#define HAVE_LC_MESSAGES 1' >> config.h

        make

        make DESTDIR=${TARGET_DIR} install

        cd ..

        rm -r gawk-3.1.6

popd


--------------Gettext--------------
tar xvf ${DOWNLOADDIR}/gettext-0.16.1.tar.gz -C ${BUILDDIR}

pushd ${BUILDDIR}/gettext-0.16.1

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                --build=${CROSS_HOST} --host=${CROSS_TARGET} --prefix=/usr

        make

        make DESTDIR=${TARGET_DIR} install

        cd ..

        rm -rf gettext-0.16.1

popd



-----------------Grep--------------
tar xvf ${DOWNLOADDIR}/grep-2.5.3.tar.bz2 -C ${BUILDDIR}

pushd ${BUILDDIR}/grep-2.5.3

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                --build=${CROSS_HOST} --host=${CROSS_TARGET} --prefix=/usr --bindir=/bin \

                --disable-perl-regexp

        make

        make DESTDIR=${TARGET_DIR} install

        cd ..

        rm -rf grep-2.5.3

popd


---------------Groff----------------
tar xvf ${DOWNLOADDIR}/groff-1.19.2.tar.gz -C ${BUILDDIR}

pushd ${BUILDDIR}/groff-1.19.2

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" PAGE=A4 ./configure \

                --build=${CROSS_HOST} --host=${CROSS_TARGET} --prefix=/usr

        make TROFFBIN=troff GROFFBIN=groff GROFF_BIN_PATH=

        make prefix=${TARGET_DIR}/usr install

        ln -sv soelim ${TARGET_DIR}/usr/bin/zsoelim

        ln -sv eqn ${TARGET_DIR}/usr/bin/geqn

        ln -sv tbl ${TARGET_DIR}/usr/bin/gtbl

        cd ..

        rm -rf groff-1.19.2

popd


---------------Gzip--------------------
tar xvf ${DOWNLOADDIR}/gzip-1.3.12.tar.gz -C ${BUILDDIR}

pushd ${BUILDDIR}/gzip-1.3.12

        sed -i 's/futimens/gl_&/' gzip.c lib/utimens.{c,h}

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                --build=${CROSS_HOST} --host=${CROSS_TARGET} --prefix=/usr

        make

        make DESTDIR=${TARGET_DIR} install

        mv -v ${TARGET_DIR}/usr/bin/gzip ${TARGET_DIR}/bin

        rm -v ${TARGET_DIR}/usr/bin/{gunzip,zcat}

        ln -sv gzip ${TARGET_DIR}/bin/gunzip

        ln -sv gzip ${TARGET_DIR}/bin/zcat

        ln -sv gzip ${TARGET_DIR}/bin/compress

        ln -sv gunzip ${TARGET_DIR}/bin/uncompress

        cd ..

        rm -rf gzip-1.3.12

popd


--------------Inetutils---------------
tar xvf ${DOWNLOADDIR}/inetutils-1.5.tar.gz -C ${BUILDDIR}

pushd ${BUILDDIR}/inetutils-1.5

        patch -Np1 -i ${DOWNLOADDIR}/inetutils-1.5-no_server_man_pages-2.patch

        for dir in ping rcp rlogin rsh; do

                cp ${dir}/Makefile.in{,.orig}

                sed '/^SUIDMODE =/s/-o root//' ${dir}/Makefile.in.orig > ${dir}/Makefile.in

        done

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                --build=${CROSS_HOST} --host=${CROSS_TARGET} --prefix=/usr --libexecdir=/usr/sbin \

                --sysconfdir=/etc --localstatedir=/var --disable-logger --disable-syslogd \

                --disable-whois --disable-servers

        make

        make DESTDIR=${TARGET_DIR} install

        mv -v ${TARGET_DIR}/usr/bin/ping{,6} ${TARGET_DIR}/bin

        cd ..

        rm -rf inetutils-1.5

popd


-------------Iproute2------------
tar xvf ${DOWNLOADDIR}/iproute2-2.6.23.tar.gz -C ${BUILDDIR}

pushd ${BUILDDIR}/iproute2-2.6.23

        for dir in ip misc tc; do

                cp ${dir}/Makefile{,.orig}

                sed 's/0755 -s/0755/' ${dir}/Makefile.orig > ${dir}/Makefile

        done &&

        cp misc/Makefile{,.orig}

        sed '/^TARGETS/s@arpd@@g' misc/Makefile.orig > misc/Makefile

        make CC="${CC} ${BUILD64}" SBINDIR=/sbin

        make DESTDIR=${TARGET_DIR} SBINDIR=/sbin install

        cd ..

        rm -rf iproute2-2.6.23

popd


-------------Kbd------------------
tar xvf ${DOWNLOADDIR}/kbd-1.12.tar.bz2 -C ${BUILDDIR}

pushd ${BUILDDIR}/kbd-1.12

        patch -Np1 -i ${DOWNLOADDIR}/kbd-1.12-gcc4_fixes-1.patch

        patch -Np1 -i ${DOWNLOADDIR}/kbd-1.12-backspace-1.patch

        cp configure{,.orig} &&

        sed -e "s@&& ./conftest@@" configure.orig > configure

        cp src/Makefile.in{,.orig} &&

        sed -e "s/install -s/install/" src/Makefile.in.orig > src/Makefile.in

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                --datadir=/lib/kbd

        cp make_include{,.orig} &&

        sed "/^ARCH/s/=.*/=mips64el/" make_include.orig > make_include

        make CC="${CC} ${BUILD64}"

        make DESTDIR=${TARGET_DIR} install

        mv -v ${TARGET_DIR}/usr/bin/{kbd_mode,openvt,setfont} ${TARGET_DIR}/bin

        cd ..

        rm -rf kbd-1.12

popd



-------------Less------------
tar xvf ${DOWNLOADDIR}/less-418.tar.gz -C ${BUILDDIR}

pushd ${BUILDDIR}/less-418

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                --build=${CROSS_HOST} --host=${CROSS_TARGET} --prefix=/usr --sysconfdir=/etc

        make

        make prefix=${TARGET_DIR}/usr install

        mv -v ${TARGET_DIR}/usr/bin/less ${TARGET_DIR}/bin

        cd ..

        rm -rf less-418

popd


------------Make------------
tar xvf ${DOWNLOADDIR}/make-3.81.tar.bz2 -C ${BUILDDIR}

pushd ${BUILDDIR}/make-3.81

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                --build=${CROSS_HOST} --host=${CROSS_TARGET} --prefix=/usr

        make

        make DESTDIR=${TARGET_DIR} install

        cd ..

        rm -rf make-3.81

popd


--------------Man---------------
tar xvf ${DOWNLOADDIR}/man-1.6f.tar.gz -C ${BUILDDIR}

pushd ${BUILDDIR}/man-1.6f

        cp configure{,.orig} &&

        sed -e "/PREPATH=/s@=.*@=\"$(eval echo ${TARGET_DIR}/{,usr/}{sbin,bin})\"@g" \

                -e 's@-is@&R@g' configure.orig > configure

        cp src/man.conf.in{,.orig} &&

        sed -e 's@MANPATH./usr/man@#&@g' -e 's@MANPATH./usr/local/man@#@g' src/man.conf.in.orig \

                > src/man.conf.in

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                -confdir=/etc

        cp conf_script{,.orig} &&

        sed "s@${TARGET_DIR}@@" conf_script.orig > conf_script

        gcc src/makemsg.c -o src/makemsg

        make CC="${CC} ${BUILD64}"

        make DESTDIR=${TARGET_DIR} install

        cd ..

        rm -rf man-1.6f

popd


------------Mktemp------------
tar xvf ${DOWNLOADDIR}/mktemp-1.5.tar.gz -C ${BUILDDIR}

pushd ${BUILDDIR}/mktemp-1.5

        patch -Np1 -i ${DOWNLOADDIR}/mktemp-1.5-add_tempfile-3.patch

        cp Makefile.in{,.orig} &&

        sed -e 's/-s $(PROG)/$(PROG)/' Makefile.in.orig > Makefile.in

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                --build=${CROSS_HOST} --host=${CROSS_TARGET} --prefix=/usr --with-libc

        make

        make prefix=${TARGET_DIR}/usr install

        make prefix=${TARGET_DIR}/usr install-tempfile

        cd ..

        rm -rf mktemp-1.5

popd


--------Module_Init_Tools------------
tar xvf ${DOWNLOADDIR}/module-init-tools-3.2.2.tar.bz -C ${BUILDDIR}

pushd ${BUILDDIR}/module-init-tools-3.2.2

        patch -Np1 -i ${DOWNLOADDIR}/module-init-tools-3.2.2-config_update-1.patch

        patch -Np1 -i ${DOWNLOADDIR}/module-init-tools-3.2.2-modprobe-1.patch

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                --build=${CROSS_HOST} --host=${CROSS_TARGET} --prefix=/ --enable-zlib

        make

        make DESTDIR=${TARGET_DIR} INSTALL=install install

        cd ..

        rm -rf module-init-tools-3.2.2

popd


-------------Patch-----------
tar xvf ${DOWNLOADDIR}/patch-2.5.9.tar.gz -C ${BUILDDIR}

pushd ${BUILDDIR}/patch-2.5.9

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                --build=${CROSS_HOST} --host=${CROSS_TARGET} --prefix=/usr

        make

        make prefix=${TARGET_DIR}/usr install

        cd ..

        rm -rf patch-2.5.9

popd



-------------Psmisc--------------
tar xvf ${DOWNLOADDIR}/psmisc-22.6.tar.gz -C ${BUILDDIR}

pushd ${BUILDDIR}/psmisc-22.6

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                --build=${CROSS_HOST} --host=${CROSS_TARGET} --prefix=/usr --exec-prefix=""

        patch -Np1 -i ${DOWNLOADDIR}/psmisc-22.6-fixes-1.patch

        make

        make DESTDIR=${TARGET_DIR} install

        mv -v ${TARGET_DIR}/bin/pstree* ${TARGET_DIR}/usr/bin

        ln -sv killall ${TARGET_DIR}/bin/pidof

        cd ..

        rm -rf psmisc-22.6

popd



-----------Shadow--------------
tar xvf ${DOWNLOADDIR}/shadow-4.0.18.1.tar.bz2 -C ${BUILDDIR}

pushd ${BUILDDIR}/shadow-4.0.18.1

        patch -Np1 -i ${DOWNLOADDIR}/shadow-4.0.18.1-useradd_fix-2.patch

        echo "ac_cv_func_setpgrp_void=yes" > config.cache

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                --build=${CROSS_HOST} --host=${CROSS_TARGET} --libdir=/lib --sysconfdir=/etc \

                --enable-shared --without-libpam --without-audit --without-selinux \

                --cache-file=config.cache

        cp src/Makefile{,.orig} &&

        sed 's/groups$(EXEEXT) //' src/Makefile.orig > src/Makefile

        cp man/Makefile{,.orig} &&

        sed -e '/groups1.xml/d' -e 's/groups.1//' man/Makefile.orig > man/Makefile

        make

        make DESTDIR=${TARGET_DIR} install

        cp ${TARGET_DIR}/etc/login.defs login.defs.orig &&

        sed -e 's@#MD5_CRYPT_ENAB.no@MD5_CRYPT_ENAB yes@' -e 's@/var/spool/mail@/var/mail@' \

                login.defs.orig > ${TARGET_DIR}/etc/login.defs

        mv -v ${TARGET_DIR}/usr/bin/passwd ${TARGET_DIR}/bin

        mv -v ${TARGET_DIR}/lib/libshadow.*a ${TARGET_DIR}/usr/lib

        rm -v ${TARGET_DIR}/lib/libshadow.so

        ln -svf ../../lib/libshadow.so.0 ${TARGET_DIR}/usr/lib/libshadow.so

        ${CROSS_TARGET}-pwconv

        ${CROSS_TARGET}-grpconv

        ${CROSS_TARGET}-passwd root

        cd ..

        rm -rf shadow-4.0.18.1

popd


-------------Sysklogd-------------
tar xvf ${DOWNLOADDIR}/sysklogd-1.5.tar.gz -C ${BUILDDIR}

pushd ${BUILDDIR}/sysklogd-1.5

        cp Makefile{,.orig} &&

        sed -e 's/-o ${MAN_USER} -g ${MAN_GROUP}//' -e 's/500 -s/500/' Makefile.orig > Makefile

        make CC="${CC} ${BUILD64}"

        make prefix=${TARGET_DIR} install

        cd ..

        rm -rf sysklogd-1.5



        cat > ${TARGET_DIR}/etc/syslog.conf << "EOF"

# Begin /etc/syslog.conf



auth,authpriv.*                                        -/var/log/auth.log

*.*;auth,authpriv.none                                -/var/log/sys.log

daemon.*                                        -/var/log/daemon.log

kern.*                                                -/var/log/kern.log

mail.*                                                -/var/log/mail.log

user.*                                                -/var/log/user.log

*.info;mail.none;authpriv.none;cron.none        -/var/log/messages

*.emerg                                                *



# log the bootscript output:

local2.*                                        -/var/log/boot.log



# End /etc/syslog.conf

EOF



popd


-----------Sysvinit-----------
tar xvf ${DOWNLOADDIR}/sysvinit-2.86.tar.gz -C ${BUILDDIR}

pushd ${BUILDDIR}/sysvinit-2.86

        cp src/init.c{,.orig} &&

        sed 's@Sending processes@& started by init@g' src/init.c.orig > src/init.c

        cp -v src/Makefile src/Makefile.orig &&

        sed -e 's@/dev/initctl@$(ROOT)&@g' -e 's@\(mknod \)-m \([0-9]* \)\(.* \)p@\1\3p; chmod \2\3@g' \

                -e '/^ifeq/s/$(ROOT)//' -e 's@/usr/lib@$(ROOT)&@' src/Makefile.orig > src/Makefile

        make -C src clobber

        make -C src ROOT=${TARGET_DIR} CC="${CC} ${BUILD64}"

        make -C src ROOT=${TARGET_DIR} INSTALL="install" install

        cd ..

        rm -rf sysvinit-2.86

        cat > ${TARGET_DIR}/etc/inittab << "EOF"

# Begin /etc/inittab



id:3:initdefault:



si::sysinit:/etc/rc.d/init.d/rc sysinit



l0:0:wait:/etc/rc.d/init.d/rc 0

l1:S1:wait:/etc/rc.d/init.d/rc 1

l2:2:wait:/etc/rc.d/init.d/rc 2

l3:3:wait:/etc/rc.d/init.d/rc 3

l4:4:wait:/etc/rc.d/init.d/rc 4

l5:5:wait:/etc/rc.d/init.d/rc 5

l6:6:wait:/etc/rc.d/init.d/rc 6



ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now



su:S016:once:/sbin/sulogin



1:2345:respawn:/sbin/agetty tty1 9600

2:2345:respawn:/sbin/agetty tty2 9600

3:2345:respawn:/sbin/agetty tty3 9600

4:2345:respawn:/sbin/agetty tty4 9600

5:2345:respawn:/sbin/agetty tty5 9600

6:2345:respawn:/sbin/agetty tty6 9600



# End /etc/inittab

EOF



popd



-----------Tar-------------
tar xvf ${DOWNLOADDIR}/tar-1.18.tar.bz2 -C ${BUILDDIR}

pushd ${BUILDDIR}/tar-1.18

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                --build=${CROSS_HOST} --host=${CROSS_TARGET} --prefix=/usr --bindir=/bin \

                --libexecdir=/usr/sbin

        make

        make DESTDIR=${TARGET_DIR} install

        cd ..

        rm -rf tar-1.18

popd



------------Texinfo--------------
tar xvf ${DOWNLOADDIR}/texinfo-4.9.tar.bz2 -C ${BUILDDIR}

pushd ${BUILDDIR}/texinfo-4.9

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                --build=${CROSS_HOST} --host=${CROSS_TARGET} --prefix=/usr

        make

        make DESTDIR=${TARGET_DIR} install

        cd ..

        rm -rf texinfo-4.9

popd



pushd ${TARGET_DIR}/usr/share/info

        rm dir

        for f in *

          do install-info ${f} dir 2>/dev/null

        done

popd


-------------Udev-------------
tar xvf ${DOWNLOADDIR}/udev-118.tar.bz2 -C ${BUILDDIR}

pushd ${BUILDDIR}/udev-118

        install -dv ${TARGET_DIR}/lib/{firmware,udev/devices/{pts,shm}}

        mknod -m0666 ${TARGET_DIR}/lib/udev/devices/null c 1 3

        ln -sv /proc/self/fd ${TARGET_DIR}/lib/udev/devices/fd

        ln -sv /proc/self/fd/0 ${TARGET_DIR}/lib/udev/devices/stdin

        ln -sv /proc/self/fd/1 ${TARGET_DIR}/lib/udev/devices/stdout

        ln -sv /proc/self/fd/2 ${TARGET_DIR}/lib/udev/devices/stderr

        ln -sv /proc/kcore ${TARGET_DIR}/lib/udev/devices/core

        make CROSS_COMPILE="${CROSS_TARGET}-" CC="${CC} ${BUILD64}" LD="${CC} ${BUILD64}" \

                EXTRAS="`echo extras/*/`" udevdir=/dev

        make DESTDIR="${TARGET_DIR}" \

                EXTRAS="`echo extras/*/`" udevdir=/dev install

        install -v -m644 -D docs/writing_udev_rules/index.html \

                ${TARGET_DIR}/usr/share/doc/udev-118/index.html

        install -dv ${TARGET_DIR}/lib/firmware

        cd ..

        rm -rf udev-118

popd


------------Util_Linux_ng-----------
tar xvf ${DOWNLOADDIR}/util-linux-ng-2.13.1.tar.bz2 -C ${BUILDDIR}

pushd ${BUILDDIR}/util-linux-ng-2.13.1

        cp hwclock/hwclock.c{,.orig} &&

        sed 's@etc/adjtime@var/lib/hwclock/adjtime@g' hwclock/hwclock.c.orig > hwclock/hwclock.c

        mkdir -pv ${TARGET_DIR}/var/lib/hwclock

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \
                --build=${CROSS_HOST} --host=${CROSS_TARGET} \
                --enable-partx --disable-wall --enable-write \
                --disable-makeinstall-chown

        make

        make DESTDIR=${TARGET_DIR} install

        mv -v ${TARGET_DIR}/usr/bin/logger ${TARGET_DIR}/bin

        cd ..

        rm -r util-linux-ng-2.13.1

popd



-----------Vim-------------
tar xvf ${DOWNLOADDIR}/vim-7.1.tar.bz2 -C ${BUILDDIR}

tar xvf ${DOWNLOADDIR}/vim-7.1-extra.tar.gz -C ${BUILDDIR}

tar xvf ${DOWNLOADDIR}/vim-7.1-lang.tar.gz -C ${BUILDDIR}

pushd ${BUILDDIR}/vim71

        patch -Np1 -i ${DOWNLOADDIR}/vim-7.1-cross_compile-1.patch

        patch -Np1 -i ${DOWNLOADDIR}/vim-7.1-fixes-6.patch

        patch -Np1 -i ${DOWNLOADDIR}/vim-7.1-mandir-1.patch

        echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h

        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \

                --build=${CROSS_HOST} --host=${CROSS_TARGET} --prefix=/usr --enable-multibyte \

                --enable-gui=no --disable-gtktest --disable-xim --with-features=normal \

                --disable-gpm --without-x --disable-netbeans --with-tlib=ncurses

        make

        make DESTDIR=${TARGET_DIR} install

        ln -sv vim ${TARGET_DIR}/usr/bin/vi

        ln -sv ../vim/vim71/doc ${TARGET_DIR}/usr/share/doc/vim-7.1

        cd ..

        rm -rf vim71



        cat > ${TARGET_DIR}/etc/vimrc << "EOF"

" Begin /etc/vimrc



set nocompatible

set backspace=2

syntax on

if (&term == "iterm") || (&term == "putty")

  set background=dark

endif



" End /etc/vimrc

EOF



popd


---------Bootscripts-1.1-pre4--------------
tar xvf ${DOWNLOADDIR}/bootscripts-cross-lfs-1.1-pre4.tar.bz2 -C ${BUILDDIR}

pushd ${BUILDDIR}/bootscripts-cross-lfs

        make DESTDIR=${TARGET_DIR} install

        cd ..

        rm -rf bootscripts-cross-lfs

popd



编译内核tar xvf ${DOWNLOADDIR}/linux-2.6.24.2.tar.gz -C ${BUILDDIR}
pushd ${BUILDDIR}/linux-2.6.24.2
        make mrproper &&
        cp arch/mips/configs/fulong_defconfig .config &&
        make ARCH=mips CROSS_COMPILE=${CROSS_TARGET}- menuconfig &&
        make ARCH=mips CROSS_COMPILE=${CROSS_TARGET}- &&
        make ARCH=mips CROSS_COMPILE=${CROSS_TARGET}- INSTALL_MOD_PATH=${TARGET_DIR} modules_install &&
        cp vmlinux.32 ${TARGET_DIR}/boot/loongson-vmlinux-64-2.6.24.2 &&
        cp System.map ${TARGET_DIR}/boot/loongson-System.map-64-2.6.24.2
        cd ..
popd
  一个建议:内核编译目录可以保留不必删除,因为今后的一些编译有可能需要内核源码



新系统必要的配置文件
时间设置文件 cat > ${TARGET_DIR}/etc/sysconfig/clock << "EOF"
# Begin /etc/sysconfig/clock

UTC=1

# End /etc/sysconfig/clock
EOF

设置bash下的键盘功能键设置 cat > ${TARGET_DIR}/etc/inputrc << "EOF"
set horizontal-scroll-mode Off
set meta-flag On
set input-meta On
set convert-meta Off
set output-meta On
set bell-style none
"\eOd": backward-word
"\eOc": forward-word
"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[5~": beginning-of-history
"\e[6~": end-of-history
"\e[3~": delete-char
"\e[2~": quoted-insert
"\eOH": beginning-of-line
"\eOF": end-of-line
"\e[H": beginning-of-line
"\e[F": end-of-line
EOF

设置Bash Shell启动文件(The Bash Shell Startup Files) cat > ${TARGET_DIR}/etc/profile << "EOF"
# Begin /etc/profile

export LANG=zh_CN.UTF-8
export INPUTRC=/etc/inputrc
export PS1='\u:\w\$ '

# End /etc/profile
EOF

设置本地网络名
echo "HOSTNAME=loongsonbox" > ${TARGET_DIR}/etc/sysconfig/network

设置hosts文件
cat > ${TARGET_DIR}/etc/hosts << "EOF"
# Begin /etc/hosts (no network card version)

127.0.0.1 loongsonbox localhost

# End /etc/hosts (no network card version)
EOF

设置网络的静态地址
pushd ${TARGET_DIR}/etc/sysconfig/network-devices &&
mkdir -v ifconfig.eth0 &&
cat > ifconfig.eth0/ipv4 << "EOF"
ONBOOT=yes
SERVICE=ipv4-static
IP=192.168.1.1
GATEWAY=192.168.1.2
PREFIX=24
BROADCAST=192.168.1.255
EOF
popd
  注意:IP、GATEWAY、BROADCAST的地址根据自己的实际情况设置。

设置DNS
cat > ${TARGET_DIR}/etc/resolv.conf << "EOF"
# Begin /etc/resolv.conf

nameserver 你的首个DNS的地址
nameserver 你的第二DNS的地址

# End /etc/resolv.conf
EOF

建立fstab文件
cat > ${TARGET_DIR}/etc/fstab << "EOF"
# Begin /etc/fstab

# file system  mount-point  type   options         dump  fsck
#                                                        order

/dev/hda4     /            ext3  defaults        1     1
/dev/hda3     swap         swap   pri=1           0     0
proc           /proc        proc   defaults        0     0
sysfs          /sys         sysfs  defaults        0     0
devpts         /dev/pts     devpts gid=4,mode=620  0     0
shm            /dev/shm     tmpfs  defaults        0     0
# End /etc/fstab
EOF
  注意:这里的磁盘名以及文件系统名需要根据实际情况修改。


系统的打包及启动系统 完成 后可以用 exit退出loongson用户

重新进入root用户 export TARGET_DIR=/loongson
pushd ${TARGET_DIR}
mknod -m 600 dev/console c 5 1
mknod -m 666 dev/null c 1 3
chown -R root:root *
打包整个系统,用如下命令
tar -cjf loongson-system-64.tar.bz2 *来打包并压缩,以便复制到目标机器上展开。


一些建议  新系统建议展开到一个空白分区中,并且分区的文件系统应是内核支持的文件系统,并且和做好的系统中/etc/fstab中的文件系统描述一致。
  在系统正确运行在目标系统上后可以编译Perl并重新编译File软件包。



结束(转载请保持文章的完整性,请注明作者和出处)
                               作者:孙海勇
                               Email:youbest@sina.com
                               2008年2月18日
更新日志:2008年2月18日:本文发布。

2008年3月9日:修改笔误一处:
  http://ftp.gnu.org/gnu/gettext/gettext-0.16.1.tar.gz2
改为
  http://ftp.gnu.org/gnu/gettext/gettext-0.16.1.tar.gz
由龙梦论坛上的"FFFM"发现并报告

2008年3月9日:修改笔误10处:
  http://www.linux-mips.org/pub/linux/mips/kernel/v2.6/linux-2.6.24.2.tar.bz2
改为
  http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.24.2.tar.bz2

  ftp://ftp.gw.com/mirrors/pub/unix/file/file-4.21.tar.gz
改为
  ftp://ftp.gw.com/mirrors/unix/file/file-4.21.tar.gz

  http://www.kernel.org/pub/linux/utils/util-linux-ng/util-linux-ng-2.13.1.tar.bz2
改为
  http://www.kernel.org/pub/linux/utils/util-linux-ng/v2.13/util-linux-ng-2.13.1.tar.bz2

  tar xvf ${DOWNLOADDIR}/autoconf-2.61.tar.bz -C ${BUILDDIR}
改为
  tar xvf ${DOWNLOADDIR}/autoconf-2.61.tar.bz2 -C ${BUILDDIR}

  tar xvf ${DOWNLOADDIR}/gettext-0.16.1.tar.bz2 -C ${BUILDDIR}
改为
  tar xvf ${DOWNLOADDIR}/gettext-0.16.1.tar.gz -C ${BUILDDIR}

  tar xvf ${DOWNLOADDIR}/module-init-tools-3.2.2.tar.bz -C ${BUILDDIR}
改为
  tar xvf ${DOWNLOADDIR}/module-init-tools-3.2.2.tar.bz2 -C ${BUILDDIR}

  tar xvf ${DOWNLOADDIR}/shadow-4.0.18.1.tar.bz -C ${BUILDDIR}
改为
  tar xvf ${DOWNLOADDIR}/shadow-4.0.18.1.tar.bz2 -C ${BUILDDIR}

  patch -Np1 -i ${DOWNLOADDIR}/shadow-4.0.18.1-useradd_fix-1.patch
改为
  patch -Np1 -i ${DOWNLOADDIR}/shadow-4.0.18.1-useradd_fix-2.patch

  CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \
                  --build=${CLFS_HOST} --host=${CLFS_TARGET} \
                  --enable-partx --disable-wall --enable-write \
                  --disable-makeinstall-chown
改为
  CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \
                  --build=${CROSS_HOST} --host=${CROSS_TARGET} \
                  --enable-partx --disable-wall --enable-write \
                  --disable-makeinstall-chown
由龙梦论坛上的"linxyz"发现并报告

2008年3月16日:修改文件下载地址一处:
  ftp://ftp.pld.org.pl/software/shadow/shadow-4.0.18.1.tar.bz2
改为
  http://zdbr.net.cn/download/shadow-4.0.18.1.tar.bz2

2008年3月16日:增加文件下载地址一处:
  Bootscripts:
    http://zdbr.net.cn/download/bootscripts-cross-lfs-1.1-pre4.tar.bz2

bz2 -C ${BUILDDIR}

  tar xvf ${DOWNLOADDIR}/shadow-4.0.18.1.tar.bz -C ${BUILDDIR}
改为
  tar xvf ${DOWNLOADDIR}/shadow-4.0.18.1.tar.bz2 -C ${BUILDDIR}

  patch -Np1 -i ${DOWNLOADDIR}/shadow-4.0.18.1-useradd_fix-1.patch
改为
  patch -Np1 -i ${DOWNLOADDIR}/shadow-4.0.18.1-useradd_fix-2.patch

  CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \
                  --build=${CLFS_HOST} --host=${CLFS_TARGET} \
                  --enable-partx --disable-wall --enable-write \
                  --disable-makeinstall-chown
改为
  CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \
                  --build=${CROSS_HOST} --host=${CROSS_TARGET} \
                  --enable-partx --disable-wall --enable-write \
                  --disable-makeinstall-chown
由龙梦论坛上的"linxyz"发现并报告

2008年3月16日:修改文件下载地址一处:
  ftp://ftp.pld.org.pl/software/shadow/shadow-4.0.18.1.tar.bz2
改为
  http://zdbr.net.cn/download/shadow-4.0.18.1.tar.bz2

2008年3月16日:增加文件下载地址一处:
  Bootscripts:
    http://zdbr.net.cn/download/bootscripts-cross-lfs-1.1-pre4.tar.bz2

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/13265/showart_497602.html

[ 本帖最后由 Send_linux 于 2008-3-26 14:39 编辑 ]
  发表评论 查看评论(共有条评论) 我要提问
 
 


最新资讯更多>> 
· 开发者发行版:Debian Live 5...
· 再谈 Ubuntu 8.04 Hardy LTS 软..
· 加拿大魁北克省政府被控无视自..
· Mozilla 85%资金来自谷歌 将再..
· 保障Linux系统桌面安全的九个小..
· 开源编译器GCC 4.3.2发布
· Ubuntu发布最新版安全更新 以修..
· 比苹果的操作系统更加的豪华Ub..
· 坏运连连 红帽RHEL自带Perl再爆..
· 点评番茄花园事件
论坛热点更多>> 
· 突然发现了初恋女友的下落。..
· ubuntu 上网设置问题 郑州广..
· 『有奖征集』ChinaUnix论坛L..
· 团长老婆多大?
· 一直打喷嚏
· 看看你是不是带错了!!!!!!!!!!zt
· 这有大学肄业的没?说说原因吧。
· sudo的问题。棘手
· 看到一个大二的孩子说把GCC和..
· MIPS资料合集
文档更新更多>> 
· traceroute命令和tcpdump命令
· Linux磁盘管理指令集(二)
· Linux磁盘管理指令集(一)
· 给笔记本电脑装Linux系统
· set uid ,set gid,sticky bit的三..
· 文件结构体struct file(Linux 2...
· rpm包的安装、删除、效验、查询
· git-svn 简介
· 基础_tar.gz,tar.bz2
· 使用yum 代替up2date 自动更新升..
 
关于我们 | 联系方式 | 广告合作 | 诚聘英才 | 网站地图 | 友情链接 | 免费注册

Copyright © 2001-2008 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们