亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1074 | 回復(fù): 0
打印 上一主題 下一主題

手把手教你源代碼制作龍芯64位系統(tǒng) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2007-02-25 12:11 |只看該作者 |倒序瀏覽

手把手教你源代碼制作龍芯64位系統(tǒng)
(交叉編譯版本)正式版
作者:孫海勇
更新日志:  2007年2月18日(春節(jié)):正式版發(fā)布
目錄

  • 前言
  • 相關(guān)知識

    • 工具鏈原理
    • build、host和target
    • pushd和popd
    • tar的使用

  • 準備工作

    • 創(chuàng)建分區(qū)
    • 加載分區(qū)
    • 設(shè)置工作目錄
    • 設(shè)置必要的環(huán)境變量

  • 下載

    • 軟件包下載
    • 補丁下載

  • 建立目標系統(tǒng)目錄結(jié)構(gòu)
  • 制作交叉工具鏈

    • 環(huán)境設(shè)置
    • 內(nèi)核頭文件(Linux-Header)
    • Binutils交叉工具
    • 目標系統(tǒng)glibc頭文件
    • GCC交叉工具(僅支持C語言)
    • 目標系統(tǒng)的glibc
    • GCC交叉工具(支持c和c++語言)
    • File
    • Shadow
    • 清理交叉工具鏈

  • 制作目標系統(tǒng)

    • 環(huán)境設(shè)置
    • 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

  • 編譯內(nèi)核
  • 新系統(tǒng)必要的配置文件
  • 系統(tǒng)的打包及啟動
  • 一些建議
  • 結(jié)束

前言  一直很關(guān)心龍芯的成長,現(xiàn)在終于把基于龍芯2E的計算機拿到手了,于是便開始動手做一套原代碼編譯而來的純64位Linux系統(tǒng),其實制作系統(tǒng)本身和制作mips64位系統(tǒng)基本類似,只是有個別基于龍芯的補丁需要打上。
  CLFS中針對mips64位的制作方法非常詳細,因此這里不重復(fù)該過程,而我對sysroot的交叉方式“情有獨衷”,但CLFS-sysroot中還沒有出現(xiàn)針對mips和mips64的方法,因此本文將使用該方法建立一個在龍芯上運行的純64位系統(tǒng)。
  本文力爭完成一個完整的制作命令,可以根據(jù)本文提供的命令順序輸入就可以完成“龍芯”64位系統(tǒng)的制作了,通常命令表示為 命令  
更新:  由于篇幅比較長所以難免出現(xiàn)一些錯誤或者筆誤,也有可能加入新內(nèi)容,因此難免會進行修正或增刪一些內(nèi)容,如果本文被轉(zhuǎn)載可以在本人的Blog中查看最新版本。
  我的Blog:http://youbest.cublog.cn
  如須轉(zhuǎn)載請注明作者為孫海勇,并提供轉(zhuǎn)載出處。

  下面我們就開始制作的旅程,那么在開始前先了解一下我們會接觸到的一些知識,這些知識對于理解整個制作過程將非常有幫助。
相關(guān)知識  sysroot、工具鏈及制作過程原理
    請參考我的另一篇文章《CLFS2.0原理分析》,該文將整個交叉過程中的原理進行了描述,建議在開始動手前閱讀該文章。
    文章地址:
      http://youbest.cublog.cn
      或者http://www.linuxsir.org/bbs/showthread.php?t=267672
  build、host和target
    在交叉編譯中比較 常見 的一些參數(shù)就是build、host和target了,正確的理解這三者的含義對于交叉編譯是非常重要的,下面就此進行解釋
    --build=編譯該軟件所使用的平臺
    --host=該軟件將運行的平臺
    --target=該軟件所處理的目標平臺
    我們以 gcc 為例子來 講解 這三者的作用
    在gcc編譯中我們使用
    ./configure --build=編譯平臺 --host=運行平臺 --target=目標平臺 [各種編譯參數(shù)]
    來配置gcc的源代碼,以讓其編譯出我們需要的gcc編譯器。
    那么在這組配置參數(shù)中:
      --build:
        表示目前我們正在運行的平臺名稱是什么,如果當(dāng)前我們是在intel的pentium機器中編譯該系統(tǒng),那么我們的--build就可能是i686-pc-linux-gnu,當(dāng)然如果我們在其它種類的機器上編譯那么這個build就應(yīng)該是那個機器所對應(yīng)的平臺名稱。
        該參數(shù)在不指定的情況下將自動常識猜測目前平臺的名稱。
      --host:
        表示我們把這個編譯好的gcc在什么樣的平臺下運行,在交叉編譯過程中這個需要我們來指定,因為機器自己是不能知道我們心里是怎么想的,那么我們可以明確的告訴它,我們要做出來的程序是運行在“龍芯”上的,但是目前還不能直接指定“龍芯”,因此我們這里指定為mips64el-unknown-linux-gnu(如果你省點事情那么就用這個名字好了,如果你想用個有個性的名字,那么請你想明白它的含義再動手,并且做好后面的過程需要多出一些手續(xù)的麻煩的心理準備)。
        --host也可以不指定,那么host將自動使用build來定義自己,不過那將不再是交叉編譯。
      注:--build和--host在不同的時候就被配置文件認定為交叉編譯方式。
      --target:
        該參數(shù)的目的是讓配置程序知道這個軟件被編譯后使用來處理什么平臺上的文件的。
        target這個參數(shù)只有在為數(shù)不多的幾個包中有用處,雖然在./configure --help中經(jīng)常能看到該參數(shù),但實際上絕大多數(shù)軟件包都是不需要該參數(shù)的。
        從這個參數(shù)的含義來看,說明其處理的目標只有在不同平臺下表現(xiàn)為不同的時候才有作用,而這些文件通常都跟目標平臺 的指令系統(tǒng)直接或間接有關(guān):比如可執(zhí)行文件,對于不同平臺下使用的可執(zhí)行文件的編碼可以是完全不同的,因此必須使用 對應(yīng)能處理該編碼的程序才能正確處理,而如果錯誤的使用則可能導(dǎo)致程序錯誤或者破壞文件,對于這樣要處理不同平臺下會 出現(xiàn)不同編碼的軟件,我們就應(yīng)當(dāng)對它指定目標平臺,以免另其錯誤處理;而對于文本文件,對于不同的平臺同樣的內(nèi)容表達的 含義都是相同的,因此我們不需要專門針對平臺來處理,這樣的軟件我們就可以不必對它指定需要處理的平臺了。
      我們來總結(jié)一下:
        build:自動測試在用平臺名稱,若無法檢測出來則需要指定。
        host:若無指定,自動使用build的結(jié)果。
        build和host相同時表示本地編譯,若不相同則表示交叉編譯。
        target:表示需要處理的目標平臺名稱,若無指定使用host相同名稱,gcc、binutils等于平臺指令相關(guān)軟件有此參數(shù),多數(shù)軟件此參數(shù)無用處。
    pushd和popd
      這是一組用來切換當(dāng)前目錄的實用命令
      pushd [目錄名]
      用來將當(dāng)前目錄壓入堆棧中,并設(shè)置當(dāng)前目錄為指定的目錄
      popd
      用來從堆棧中取出最后壓入的目錄,并將當(dāng)前目錄設(shè)置為改目錄
      例如:
      當(dāng)前目錄為/usr
      pushd /var/log
      此時當(dāng)前目錄為/var/log,/usr進入堆棧中
      cd /opt
      進入到/opt目錄下
      popd
      從堆棧中取出最后加入的目錄,此時的結(jié)果為/usr,當(dāng)前目錄重新回到/usr下。
      靈活使用這組命令將方便的切換目錄,后面的制作過程中將使用該組命令來實現(xiàn)目錄的切換。
    tar的使用
      tar可以說是Linux下使用頻率非常高的命令,該命令用來將一組文件打包成一個獨立的文件,也可以把一個壓縮/打包的文件。
      還原成原來的一組文件。
      新版本的tar可以自動識別文件的后綴名來確認使用何種程序來解壓縮,因此可以用tar xvf來解開包括tar/tar.bz2/tar.gz/tar.Z等文件而不需要指定壓縮類型,因此本文中將直接使用tar xvf來解開文件。
      例如:
        tar xvf gcc-4.1.1.tar.bz2 -C /source
        表示將gcc-4.1.1.tar.bz2展開并存放到/source目錄下,-C用來指定目標目錄。
      tar 的使用方式非常的多,可使用tar --help或者man tar來查看具體應(yīng)用。
準備工作
建立用戶 groupadd loongson
useradd -s /bin/bash -g loongson -m -k /dev/null loongson
passwd loongson
創(chuàng)建工作目錄 export TARGET_DIR="/loongson"
mkdir -pv ${TARGET_DIR}/{build,download}
chown -Rv loongson ${TARGET_DIR}
切換用戶 su - loongson
設(shè)置必要的環(huán)境變量 cat > ~/.bash_profile cat > ~/.bashrc source ~/.bash_profile
以下是執(zhí)行完上述命令后使用export命令所顯示內(nèi)容的一個例子
  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.linux-mips.org/pub/linux/mips/kernel/v2.6/linux-2.6.18.1.tar.gz
  Binutils:
    http://ftp.gnu.org/gnu/binutils/binutils-2.17.tar.bz2
  Glibc:
    http://ftp.gnu.org/gnu/glibc/glibc-2.5.tar.bz2
  Glibc-Ports:
    http://ftp.gnu.org/gnu/glibc/glibc-ports-2.5.tar.bz2
  GCC:
    http://ftp.gnu.org/gnu/gcc/gcc-4.1.2/gcc-4.1.2.tar.bz2
  File:
    ftp://ftp.gw.com/mirrors/pub/unix/file/file-4.19.tar.gz
  Shadow:
    ftp://ftp.pld.org.pl/software/shadow/shadow-4.0.18.1.tar.bz2
  Man-Pages:
    http://www.kernel.org/pub/linux/docs/manpages/man-pages-2.43.tar.bz2
  Sed:
    http://ftp.gnu.org/gnu/sed/sed-4.1.5.tar.gz
  E2fsprogs:
    http://downloads.sourceforge.net/e2fsprogs/e2fsprogs-1.39.tar.gz
  Coreutils:
    http://ftp.gnu.org/gnu/coreutils/coreutils-6.7.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.8.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.22.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.tar.bz2
  Bash:
    http://ftp.gnu.org/gnu/bash/bash-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.29.tar.gz
  Flex:
    http://downloads.sourceforge.net/flex/flex-2.5.33.tar.bz2
  Gawk:
    http://ftp.gnu.org/gnu/gawk/gawk-3.1.5.tar.bz2
  Gettext:
    http://ftp.gnu.org/gnu/gettext/gettext-0.16.1.tar.gz2
  Grep:
    http://ftp.gnu.org/gnu/grep/grep-2.5.1a.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.9.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.18-061002.tar.gz
  Kbd:
    http://www.kernel.org/pub/linux/utils/kbd/kbd-1.12.tar.bz2
  Less:
    http://www.greenwoodsoftware.com/less/less-394.tar.gz
  Make:
    http://ftp.gnu.org/gnu/make/make-3.81.tar.bz2
  Man:
    http://primates.ximian.com/~flucifredi/man/man-1.6e.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.3.tar.gz
  Sysklogd:
    http://www.infodrom.org/projects/sysklogd/download/sysklogd-1.4.1.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.16.1.tar.bz2
  Texinfo:
    http://ftp.gnu.org/gnu/texinfo/texinfo-4.8a.tar.bz2
  Udev:
    http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev-105.tar.bz2
  Util-Linux:
    http://www.kernel.org/pub/linux/utils/util-linux/util-linux-2.12r.tar.bz2
  Vim:
    ftp://ftp.vim.org/pub/vim/unix/vim-7.0.tar.bz2
    ftp://ftp.vim.org/pub/vim/extra/vim-7.0-extra.tar.gz
    ftp://ftp.vim.org/pub/vim/extra/vim-7.0-lang.tar.gz
  說明:所有文件請下載后保存在${DOWNLOADDIR}(本文中即/loongson/download)目錄中。
補丁及配置文件    http://www.zdbr.net.cn/download/patch_and_config-1.tar.bz2
  說明:下載該文件后可執(zhí)行以下命令展開到download目錄中。 tar xvf patch_and_config-1.tar.bz2 -C ${DOWNLOADDIR}
建立目標系統(tǒng)目錄結(jié)構(gòu)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
        cd boot
        ln -svf . boot
popd
創(chuàng)建必要的用戶、組和日志文件cat > ${TARGET_DIR}/etc/passwd cat > ${TARGET_DIR}/etc/group 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
制作交叉工具鏈內(nèi)核頭文件(Linux-Header)
tar xvf ${DOWNLOADDIR}/linux-2.6.18.1.tar.gz -C ${BUILDDIR}
pushd ${BUILDDIR}/linux-2.6.18.1
        patch -Np1 -i ${DOWNLOADDIR}/linux-2.6.18.1-loongson-1.patch
        make include/linux/version.h
        cp -av include/{asm-generic,linux,mtd,scsi,sound} ${TARGET_DIR}/usr/include
        cp -av include/asm-mips ${TARGET_DIR}/usr/include/asm
        cd ..
        rm -r linux-2.6.18.1
popd
Binutils交叉工具
tar xvf ${DOWNLOADDIR}/binutils-2.17.tar.bz2 -C ${BUILDDIR}
pushd ${BUILDDIR}/binutils-2.17
        patch -Np1 -i ${DOWNLOADDIR}/binutils-2.17-posix-1.patch
        patch -Np1 -i ${DOWNLOADDIR}/binutils-2.17-branch_update-2.patch
        patch -Np1 -i ${DOWNLOADDIR}/binutils-2.17-loongson-1.dpatch
        mkdir -pv ../binutils-build
        cd ../binutils-build
        ../binutils-2.17/configure --prefix=${TARGET_DIR}/cross-tools \
                --host=${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.17/include/libiberty.h ${TARGET_DIR}/usr/include
        cd ..
        rm -r binutils-build
        rm -r binutils-2.17
popd
目標系統(tǒng)glibc頭文件
tar xvf ${DOWNLOADDIR}/glibc-2.5.tar.bz2 -C ${BUILDDIR}
pushd ${BUILDDIR}/glibc-2.5
        cp configure{,.orig} &&
        sed -e 's/3.4/3.[0-9]/g' configure.orig > configure
        tar xvf ${DOWNLOADDIR}/glibc-ports-2.5.tar.bz2
        mv -v glibc-ports-2.5 ports
        patch -Np1 -i ${DOWNLOADDIR}/glibc-2.5-mips_fixes-1.patch
        echo "" > ports/sysdeps/mips/mips64/n32/Makefile
        sed -i 's/-mabi=$mips_config_abi//g' ports/sysdeps/mips/preconfigure
        mkdir -vp ../glibc-build
        cd ../glibc-build
        echo "libc_cv_forced_unwind=yes" > config.cache &&
        echo "libc_cv_c_cleanup=yes" >> config.cache &&
        echo "libc_cv_mips64_tls=yes" >> config.cache
        echo "install_root=${TARGET_DIR}" > configparms
        CC="gcc" ../glibc-2.5/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.5/ports/sysdeps/unix/sysv/linux/mips/nptl/bits/pthreadtypes.h \
                ${TARGET_DIR}/usr/include/bits
        cd ..
        rm -r glibc-build
        rm -r glibc-2.5
popd
GCC交叉工具(僅支持C語言)
tar xvf ${DOWNLOADDIR}/gcc-4.1.2.tar.bz2 -C ${BUILDDIR}
pushd ${BUILDDIR}/gcc-4.1.2
        patch -Np1 -i ${DOWNLOADDIR}/gcc-4.1.2-posix-1.patch
        patch -Np1 -i ${DOWNLOADDIR}/gcc-4.1.2-cross_search_paths-1.patch
        mkdir -vp ../gcc-build
        cd ../gcc-build
        ../gcc-4.1.2/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.1.2
popd
目標系統(tǒng)的glibc
tar xvf ${DOWNLOADDIR}/glibc-2.5.tar.bz2 -C ${BUILDDIR}
pushd ${BUILDDIR}/glibc-2.5
        tar xvf ${DOWNLOADDIR}/glibc-ports-2.5.tar.bz2
        mv -v glibc-ports-2.5 ports
        patch -Np1 -i ${DOWNLOADDIR}/glibc-2.5-libgcc_eh-2.patch
        patch -Np1 -i ${DOWNLOADDIR}/glibc-2.5-localedef_segfault-1.patch
        patch -Np1 -i ${DOWNLOADDIR}/glibc-2.5-cross_hacks-2.patch
        patch -Np1 -i ${DOWNLOADDIR}/glibc-2.5-branch_update-3.patch
        patch -Np1 -i ${DOWNLOADDIR}/glibc-2.5-mips_fixes-1.patch
        sed -i '/default) machine=/s/n32/64/g' ports/sysdeps/mips/preconfigure
        mkdir -vp ../glibc-build
        cd ../glibc-build
        echo "libc_cv_forced_unwind=yes" > config.cache
        echo "libc_cv_c_cleanup=yes" >> config.cache
        echo "libc_cv_mips64_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.5/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 -r glibc-build
        rm -r glibc-2.5
       
cat > ${TARGET_DIR}/etc/nsswitch.conf  ${TARGET_DIR}/etc/ld.so.conf
GCC交叉工具(支持c和c++語言)
tar xvf ${DOWNLOADDIR}/gcc-4.1.2.tar.bz2 -C ${BUILDDIR}
pushd ${BUILDDIR}/gcc-4.1.2
        patch -Np1 -i ${DOWNLOADDIR}/gcc-4.1.2-posix-1.patch
        patch -Np1 -i ${DOWNLOADDIR}/gcc-4.1.2-cross_search_paths-1.patch
        mkdir -v ../gcc-build
        cd ../gcc-build
        ../gcc-4.1.2/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 -r gcc-build
        rm -r gcc-4.1.2
popd
File軟件包
tar xvf ${DOWNLOADDIR}/file-4.19.tar.gz -C ${BUILDDIR}
pushd ${BUILDDIR}/file-4.19
        ./configure --prefix=${TARGET_DIR}/cross-tools
        make
        make install
        cd ..
        rm -r file-4.19
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-1.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 -r shadow-4.0.18.1
popd
清理交叉工具鏈
pushd ${TARGET_DIR}/cross-tools
        /usr/bin/find ./{bin,lib} -type f -exec strip --strip-debug '{}' ';'
popd
注意:不正確的清理參數(shù)用于庫文件的時候有導(dǎo)致庫文件 損壞的可能,因此請注意命令的 參數(shù),如果你不放心也可跳過這部分,并不會影響后面的過程。
制作目標系統(tǒng)
環(huán)境設(shè)置
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"
將環(huán)境變量設(shè)置到~/.bashrc中,以方便重新進入時自動設(shè)置 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.43.tar.bz2 -C ${BUILDDIR}
pushd ${BUILDDIR}/man-pages-2.43
        make prefix=${TARGET_DIR} install
        cd ..
        rm -r man-pages-2.43
popd
---------Binutils--------
tar xvf ${DOWNLOADDIR}/binutils-2.17.tar.bz2 -C ${BUILDDIR}
pushd ${BUILDDIR}/binutils-2.17
        patch -Np1 -i ${DOWNLOADDIR}/binutils-2.17-posix-1.patch
        patch -Np1 -i ${DOWNLOADDIR}/binutils-2.17-branch_update-2.patch
        patch -Np1 -i ${DOWNLOADDIR}/binutils-2.17-loongson-1.dpatch
        mkdir -pv ../binutils-build
        cd ../binutils-build
        CC="${CC} ${BUILD64}" CXX="${CXX} ${BUILD64}" ../binutils-2.17/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.17/include/libiberty.h ${TARGET_DIR}/usr/include
        cd ..
        rm -r binutils-build
        rm -r binutils-2.17
popd
-----------GCC------------
tar xvf ${DOWNLOADDIR}/gcc-4.1.2.tar.bz2 -C ${BUILDDIR}
pushd ${BUILDDIR}/gcc-4.1.2
        patch -Np1 -i ${DOWNLOADDIR}/gcc-4.1.2-posix-1.patch
        patch -Np1 -i ${DOWNLOADDIR}/gcc-4.1.2-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.1.2/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 -r gcc-build
        rm -r gcc-4.1.2
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 -r sed-4.1.5
popd
--------E2fsprogs--------
tar xvf ${DOWNLOADDIR}/e2fsprogs-1.39.tar.gz -C ${BUILDDIR}
pushd ${BUILDDIR}/e2fsprogs-1.39
        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 -r e2fsprogs-1.39
popd
---------Coreutils-----------
tar xvf ${DOWNLOADDIR}/coreutils-6.7.tar.bz2 -C ${BUILDDIR}
pushd ${BUILDDIR}/coreutils-6.7
        patch -Np1 -i ${DOWNLOADDIR}/coreutils-6.7-suppress_uptime_kill_su-1.patch
        patch -Np1 -i ${DOWNLOADDIR}/coreutils-6.7-uname-1.patch
        touch man/uname.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 -r coreutils-6.7
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 -r iana-etc-2.20
popd
----------M4------------
tar xvf ${DOWNLOADDIR}/m4-1.4.8.tar.bz2 -C ${BUILDDIR}
pushd ${BUILDDIR}/m4-1.4.8
        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 -r m4-1.4.8
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 -r 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 -r 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 -r procps-3.2.7
popd
-----------Libtool--------------
tar xvf ${DOWNLOADDIR}/libtool-1.5.22.tar.gz -C ${BUILDDIR}
pushd ${BUILDDIR}/libtool-1.5.22
        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 -r libtool-1.5.22
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-1.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 -r readline-5.2
popd
------------Zlib-----------
tar xvf ${DOWNLOADDIR}/zlib-1.2.3.tar.bz -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 -r zlib-1.2.3
popd
-----------Autoconf------------
tar xvf ${DOWNLOADDIR}/autoconf-2.61.tar.bz -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 -r autoconf-2.61
popd
-------------Automake-----------
tar xvf ${DOWNLOADDIR}/automake-1.9.6.tar.bz2 -C ${BUILDDIR}
pushd ${BUILDDIR}/automake-1.9.6
        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 -r automake-1.9.6
popd
-------------Bash-----------
tar xvf ${DOWNLOADDIR}/bash-3.2.tar.gz -C ${BUILDDIR}
pushd ${BUILDDIR}/bash-3.2
        patch -Np1 -i ${DOWNLOADDIR}/bash-3.2-fixes-4.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 -r 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 -r 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 -r diffutils-2.8.7
popd
-------------File---------------
tar xvf ${DOWNLOADDIR}/file-4.19.tar.gz -C ${BUILDDIR}
pushd ${BUILDDIR}/file-4.19
        patch -Np1 -i ${DOWNLOADDIR}/file-4.19-config_update-1.patch
        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 -r file-4.19
popd
--------------Findutils------------
tar xvf ${DOWNLOADDIR}/findutils-4.2.29.tar.gz -C ${BUILDDIR}
pushd ${BUILDDIR}/findutils-4.2.29
        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 -r findutils-4.2.29
popd
--------------Flex--------------
tar xvf ${DOWNLOADDIR}/flex-2.5.33.tar.bz2 -C ${BUILDDIR}
pushd ${BUILDDIR}/flex-2.5.33
        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
        make
        make DESTDIR=${TARGET_DIR} install
        ln -sv libfl.a ${TARGET_DIR}/usr/lib/libl.a
        cd ..
        rm -r flex-2.5.33
        cat > ${TARGET_DIR}/usr/bin/lex
----------------Gawk------------
tar xvf ${DOWNLOADDIR}/gawk-3.1.5.tar.bz2 -C ${BUILDDIR}
pushd ${BUILDDIR}/gawk-3.1.5
        patch -Np1 -i ${DOWNLOADDIR}/gawk-3.1.5-segfault_fix-1.patch
        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.5
popd
--------------Gettext--------------
tar xvf ${DOWNLOADDIR}/gawk-3.1.5.tar.bz2 -C ${BUILDDIR}
pushd ${BUILDDIR}/gawk-3.1.5
        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 -r gawk-3.1.5
popd
-----------------Grep--------------
tar xvf ${DOWNLOADDIR}/grep-2.5.1a.tar.bz2 -C ${BUILDDIR}
pushd ${BUILDDIR}/grep-2.5.1a
        patch -Np1 -i ${DOWNLOADDIR}/grep-2.5.1a-config_update-1.patch
        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 -r grep-2.5.1a
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 -r groff-1.19.2
popd
---------------Gzip--------------------
tar xvf ${DOWNLOADDIR}/gzip-1.3.9.tar.gz -C ${BUILDDIR}
pushd ${BUILDDIR}/gzip-1.3.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
        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 -r gzip-1.3.9
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 -r inetutils-1.5
popd
-------------Iproute2------------
tar xvf ${DOWNLOADDIR}/iproute2-2.6.18-061002.tar.gz -C ${BUILDDIR}
pushd ${BUILDDIR}/iproute2-2.6.18-061002
        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 -r iproute2-2.6.18-061002
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
        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 -r kbd-1.12
popd
-------------Less------------
tar xvf ${DOWNLOADDIR}/less-394.tar.gz -C ${BUILDDIR}
pushd ${BUILDDIR}/less-394
        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 -r less-394
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 -r make-3.81
popd
--------------Man---------------
tar xvf ${DOWNLOADDIR}/man-1.6e.tar.gz -C ${BUILDDIR}
pushd ${BUILDDIR}/man-1.6e
        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 -r man-1.6e
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 -r 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
        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 -r 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 -r patch-2.5.9
popd
-------------Psmisc--------------
tar xvf ${DOWNLOADDIR}/psmisc-22.3.tar.gz -C ${BUILDDIR}
pushd ${BUILDDIR}/psmisc-22.3
        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure \
                --build=${CROSS_HOST} --host=${CROSS_TARGET} --prefix=/usr --exec-prefix=""
        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 -r psmisc-22.3
popd
-----------Shadow--------------
tar xvf ${DOWNLOADDIR}/shadow-4.0.18.1.tar.bz -C ${BUILDDIR}
pushd ${BUILDDIR}/shadow-4.0.18.1
        patch -Np1 -i ${DOWNLOADDIR}/shadow-4.0.18.1-useradd_fix-1.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 -r shadow-4.0.18.1
popd
-------------Sysklogd-------------
tar xvf ${DOWNLOADDIR}/sysklogd-1.4.1.tar.gz -C ${BUILDDIR}
pushd ${BUILDDIR}/sysklogd-1.4.1
        patch -Np1 -i ${DOWNLOADDIR}/sysklogd-1.4.1-fixes-2.patch
        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 -r sysklogd-1.4.1
        cat > ${TARGET_DIR}/etc/syslog.conf
-----------Sysvinit-----------
tar xvf ${DOWNLOADDIR}/sysvinit-2.86.tar.gz -C ${BUILDDIR}
pushd ${BUILDDIR}/sysvinit-2.8
        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 -r sysvinit-2.8
        cat > ${TARGET_DIR}/etc/inittab
-----------Tar-------------
tar xvf ${DOWNLOADDIR}/tar-1.16.1.tar.bz2 -C ${BUILDDIR}
pushd ${BUILDDIR}/tar-1.16.1
        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 -r tar-1.16.1
popd
------------Texinfo--------------
tar xvf ${DOWNLOADDIR}/texinfo-4.8a.tar.bz2 -C ${BUILDDIR}
pushd ${BUILDDIR}/texinfo-4.8
        patch -Np1 -i ${DOWNLOADDIR}/texinfo-4.8a-tempfile_fix-1.patch
        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 -r texinfo-4.8
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-104.tar.bz2 -C ${BUILDDIR}
pushd ${BUILDDIR}/udev-104
        make CROSS_COMPILE="${CROSS_TARGET}-" CC="${CC} ${BUILD64}" LD="${CC} ${BUILD64}" \
                EXTRAS="extras/floppy extras/cdrom_id extras/firmware extras/scsi_id
                extras/volume_id extras/ata_id extras/usb_id extras/edd_id
                extras/dasd_id extras/path_id"
        make DESTDIR="${TARGET_DIR}" EXTRAS="extras/floppy extras/cdrom_id
                extras/firmware extras/scsi_id extras/volume_id extras/ata_id
                extras/usb_id extras/edd_id extras/dasd_id extras/path_id" install
        install -v extras/eventrecorder.sh ${TARGET_DIR}/lib/udev
        install -v -m644 -D docs/writing_udev_rules/index.html \
                ${TARGET_DIR}/usr/share/doc/udev-104/index.html
        install -dv ${TARGET_DIR}/lib/firmware
        cd ..
        rm -r udev-104
popd
------------Util_Linux-----------
tar xvf ${DOWNLOADDIR}/util-linux-2.12r.tar.bz2 -C ${BUILDDIR}
pushd ${BUILDDIR}/util-linux-2.12r
        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
        patch -Np1 -i ${DOWNLOADDIR}/util-linux-2.12r-cramfs-1.patch
        patch -Np1 -i ${DOWNLOADDIR}/util-linux-2.12r-syscall_fixes-1.patch
        patch -Np1 -i ${DOWNLOADDIR}/util-linux-2.12r-missing_header-1.patch
        patch -Np1 -i ${DOWNLOADDIR}/util-linux-2.12r-missing_lseek-1.patch
        cp MCONFIG{,.orig} &&
        sed -e "s/-o root//" MCONFIG.orig > MCONFIG
        CC="${CROSS_TARGET}-gcc ${BUILD64}" CXX="${CROSS_TARGET}-g++ ${BUILD64}" ./configure
        make HAVE_KILL=yes HAVE_SLN=yes CPUOPT="" ARCH="" CPU=""
        make HAVE_KILL=yes HAVE_SLN=yes CPUOPT="" ARCH="" CPU="" \
                USE_TTY_GROUP=no DESTDIR=${TARGET_DIR} install
        mv -v ${TARGET_DIR}/usr/bin/logger ${TARGET_DIR}/bin
        cd ..
        rm -r util-linux-2.12r
popd
-----------Vim-------------
tar xvf ${DOWNLOADDIR}/vim-7.0.tar.bz2 -C ${BUILDDIR}
tar xvf ${DOWNLOADDIR}/vim-7.0-extra.tar.gz -C ${BUILDDIR}
tar xvf ${DOWNLOADDIR}/vim-7.0-lang.tar.gz -C ${BUILDDIR}
pushd ${BUILDDIR}/vim70
        patch -Np1 -i ${DOWNLOADDIR}/vim-7.0-cross_compile-1.patch
        patch -Np1 -i ${DOWNLOADDIR}/vim-7.0-fixes-21.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/vim70/doc ${TARGET_DIR}/usr/share/doc/vim-7.0
        cd ..
        rm -r vim70
        cat > ${TARGET_DIR}/etc/vimrc
---------Bootscripts-1.1-pre3--------------
tar xvf ${DOWNLOADDIR}/bootscripts-cross-lfs-1.1-pre3.tar.bz2 -C ${BUILDDIR}
pushd ${BUILDDIR}/bootscripts-cross-lfs
        make DESTDIR=${TARGET_DIR} install
        cd ..
        rm -r bootscripts-cross-lfs
popd
---------Udev_Rules-1.1-pre3--------------
tar xvf ${DOWNLOADDIR}/udev-cross-lfs-1.1-pre3.tar.bz2 -C ${BUILDDIR}
pushd ${BUILDDIR}/udev-cross-lfs
        make DESTDIR=${TARGET_DIR} install
        cd ..
        rm -r udev-cross-lfs
popd
編譯內(nèi)核tar xvf ${DOWNLOADDIR}/linux-2.6.18.1.tar.gz -C ${BUILDDIR}
pushd ${BUILDDIR}/linux-2.6.18.1
        patch -Np1 -i ${DOWNLOADDIR}/linux-2.6.18.1-loongson-1.patch &&
        make mrproper &&
        cp ${DOWNLOADDIR}/config-2.6.18.1-loongson .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.18.1 &&
        cp System.map ${TARGET_DIR}/boot/loongson-System.map-64-2.6.18.1
        cd ..
popd
  一個建議:內(nèi)核編譯目錄可以保留不必刪除,因為今后的一些編譯有可能需要內(nèi)核源碼
新系統(tǒng)必要的配置文件
時間設(shè)置文件 cat > ${TARGET_DIR}/etc/sysconfig/clock
設(shè)置bash下的鍵盤功能鍵設(shè)置 cat > ${TARGET_DIR}/etc/inputrc
設(shè)置Bash Shell啟動文件(The Bash Shell Startup Files) cat > ${TARGET_DIR}/etc/profile
設(shè)置本地網(wǎng)絡(luò)名
echo "HOSTNAME=loongsonbox" > ${TARGET_DIR}/etc/sysconfig/network
設(shè)置hosts文件
cat > ${TARGET_DIR}/etc/hosts
設(shè)置網(wǎng)絡(luò)的靜態(tài)地址
pushd ${TARGET_DIR}/etc/sysconfig/network-devices &&
mkdir -v ifconfig.eth0 &&
cat > ifconfig.eth0/ipv4   注意:IP、GATEWAY、BROADCAST的地址根據(jù)自己的實際情況設(shè)置。
設(shè)置DNS
cat > ${TARGET_DIR}/etc/resolv.conf
建立fstab文件
cat > ${TARGET_DIR}/etc/fstab   注意:這里的磁盤名以及文件系統(tǒng)名需要根據(jù)實際情況修改。
系統(tǒng)的打包及啟動系統(tǒng) 完成 后可以用 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 *
打包整個系統(tǒng),用如下命令
tar -cjf loongson-system-64.tar.bz2 *
來打包并壓縮,以便復(fù)制到目標機器上展開。
一些建議  新系統(tǒng)建議展開到一個空白分區(qū)中,并且分區(qū)的文件系統(tǒng)應(yīng)是內(nèi)核支持的文件系統(tǒng),并且和做好的系統(tǒng)中/etc/fstab中的文件系統(tǒng)描述一致。
  在系統(tǒng)正確運行在目標系統(tǒng)上后可以編譯Perl并重新編譯File軟件包。
結(jié)束(轉(zhuǎn)載請保持文章的完整性,請注明作者和出處)
                               作者:孫海勇
                               Email:youbest@sina.com
                               2007年2月18日


本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u/17412/showart_249588.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP