سؤال

وظيفة تباطية (أقل وصفية) هنا.

أحاول أن أرفق سلسلة الأداة الخاصة بي باستخدام الإصدارات الحديثة على أوبونتو وكان يأمل أن يكون هناك ما يكفي من مجتمع Linux هنا أنه يمكنني الحصول على مشورة محددة بشأن مشاكل معينة أثناء توصلنا إليها.

مع مساعدة الجميع، أود أن أرى هذا الدوران إلى مرجع مفيد في نهاية المطاف.

أولا قبالة "crosstool."الذي يشير كل شخص تقريبا إلى التاريخ قليلا (2006)CROSSTOOL-NG."الذي يبدو أنه يحمل الآن أن الشعلة يفشل على جهازي. أفضل تصحيح العملية نفسها من البرنامج النصي (الذي يبدو أنه يتطلب مني فهم العملية).

فيما يلي خطوات أساسية لما أعمل به حتى الآن؛ في الوقت الحاضر، أنا عالق في محاولة لتجميع أول تمرير من دول مجلس التعاون الخليجي.

حيث فشل ...

إنه فشل لأن المكتبة المترجمة التي تحتوي على "crti.o" مفقودة:

# ./gcc-4.4.1/configure --target=arm-linux --disable-thread --enable-langauges=c 
/bin/bash ../../../gcc-4.4.1/libgcc/../mkinstalldirs .
/usr/src/gnu-4.4.1-build/./gcc/xgcc -B ........
/usr/local/arm-linux/bin/ld: crti.o No such file: No such file or directory
collect2: ld returned 1 exit status
make[2]: *** [libgcc_s.so] Error 1
make[2]: Leaving directory `/usr/src/gnu/gcc-4.4.1-build/arm-linux/libgcc'
make[1]: *** [all-target-libgcc] Error 2
make[1]: Leaving directory `/usr/src/gnu/gcc-4.4.1-build'
make: *** [all] Error 2

بناء خطوات

على تركيب Ubuntu 9.04 تكوين طازج، فيما يلي الخطوات التي قمت بها حتى الآن:

#New configuration of Ubuntu 9.04
sudo updatedb
sudo apt-get install build-essential subversion
# For kernel configuration
sudo apt-get install libncurses5-dev
# For building GCC
sudo apt-get install libgmp3-dev libmpfr-dev

#Get Linux Headers for GCC/GLIBC compilations
# I use a hacked Linux from Artilla, 
pushd ~ && svn co http://.../linux m501-linux && cd !$
make ARCH=arm m501_defconfig
make ARCH=arm menuconfig
sudo mkdir /usr/local/arm-linux/include
sudo cp -dR include/asm-arm /usr/local/arm-linux/include/asm
sudo cp -dR include/linux /usr/local/arm-linux/include/linux
cd /usr/local/arm-linux/
sudo ln -s include sys-include
popd

#Get sources:
cd /usr/src/
sudo su root
mkdir gnu
ftp ftp.gnu.org
# get gnu/binutils/binutils-2.19.1.tar.bz2
# get gnu/gcc/gcc-4.4.1/gcc-4.4.1.tar.bz2
# get gnu/glibc/glibc-2.10.1.tar.bz2
# get gnu/gdb/gdb-6.8.tar.bz2

#Build Binutils
bzcat binutils-2.19.1.tar.bz2 | tar -xv
mkdir binutils-2.19.1-build && cd !$
cp ../binutils-2.19.1/gas/config/tc-arm.c ./tc-arm.c 
sed -r 's/(as_bad[ \t]*\()(.+\[.+\]\))/\1\"%s\",\2/' < ./tc-arm.c > ../binutils-2.19.1/gas/config/tc-arm.c 
rm ./tc-arm.c    
../binutils-2.19.1/configure --target=arm-linux
make && make install && cd ..

#Build GCC
bzcat gcc-4.4.1.tar.bz2 | tar -xv
mkdir gcc-4.4.1-build && cd !$
../gcc-4.4.1/configure --target=arm-linux --disable-thread --enable-langauges=c -with-headers=/usr/local/arm-linux/include
make
هل كانت مفيدة؟

المحلول 7

كان هذا قليلا من الرنجة الحمراء. على ما يبدو تعرج سلسلة أداة لنظام موجود مع Glibc العمل لا يتطلب إعادة ترجمة Glibc. أنا بصراحة لا أعرف كيف تجاهلت هذه الحقيقة.

لذلك على الرغم من أنني ما زلت لا أعرف كيفية عبور مجموعة دول مجلس التعاون الخليجي و Glibc، لأنني بحاجة فقط إلى دول مجلس التعاون الخليجي، سأحدث هذا كما أغلق.

إذا استطعت، سأعود إلى هذا المنصب ووضع علامة على ما فعلته في النهاية.

تعديل:

الدفع هذه.

نصائح أخرى

أهلا بك, ، انت لست وحدك.

القصة

لا أعرف لماذا تعتبر ذراع التجميع عبر كابوس. ليس رأيي، دعونا نرى، ما يقوله الآخرون ...

بناء مجموعة أدوات Clibc Clibc Clibc للاستخدام في تطوير الأنظمة المضمنة تستخدم ليكون احتمالا مخيفا، تتطلب وسوف ستتطلب الحديد، أيام إن لم يكن أسابيع من الجهد، الكثير من UNIX و GNU Lore، وأحيانا ترغب في اتخاذ اختصارات المراوغة. ( http://www.kegel.com/crosstool/ )

يعمل جهاز الكمبيوتر الخاص بي (Gurupplug) على Debian، لذلك أحتاج فقط إلى مترجم G ++ القياسي، دون أي قرص.

أنا أستخدم أوبونتو 32 بت على دفتر ملاحظاتي. هناك حزم ديب لمجموعة التحويل البرمجي AVR، أو حتى بالنسبة ل Z80، ولكن لا شيء من الذراع - لماذا؟ حسنا، علينا تجميع واحدة. دعنا نذهب. عملية تجميع Toolchain مربكة بعض الشيء بالنسبة لي. 14K خطوط طويلة makefile، شكرا لك.

بعد بعض الأيام (والليالي) فشلت.

الحل

أخيرا، لقد وجدت Soluion خارج الصندوق. لقد قمت للتو بتنزيل الإصدار Lite من هذه الأشياء: http://www.codesourcery.com/sgpp/lite_edition.html. والآن أنا سعيد. لديها مثبت قبيح، لكنها تعمل. انها تقول:ARM-None-Linux-Gnueabi-G ++ (Sourcery G ++ Lite 2010Q1-202) 4.4.1, ، ما هو إصدار G ++ محدثا.

(يحتوي صديقي على جهاز Mac، وقد فشل أيضا في تجميع مجموعة الأدوات بعد القتال معها لمدة أسبوع. إنه يستخدم هذا التحويل البرمجي الآن على أوبونتو VM.)

يجب أن تكون بالفعل بذل المزيد من الجهد باستخدام Crosstool-NG، لأن القائمة البريدية Crosstool تفاعلية للغاية. نظرا لأن فهم العملية برمتها مهمة ضخمة، فهم كيفية استخدام أداة قد تقوم بإعادة استخدامها IMHO أكثر إثارة للاهتمام.

هنا هو هيلينوس البرنامج النصي لتركيب Toychain ARM-32، وهذا يجب أن يفعل ما تريد مع القليل من الغطاء جدا. أنا أستخدمه على أوبونتو الآن (أنا أحد مطوري هيلينوس). كتبها مارتن ديك

#!/bin/bash

# Cross-Compiler Toolchain for ${PLATFORM}
#  by Martin Decky <martin@decky.cz>
#
#  GPL'ed, copyleft
#


check_error() {
    if [ "$1" -ne "0" ]; then
        echo
        echo "Script failed: $2"
        exit
    fi
}

if [ -z "${CROSS_PREFIX}" ] ; then
    CROSS_PREFIX="/usr/local"
fi

BINUTILS_VERSION="2.19.1"
GCC_VERSION="4.3.3"

BINUTILS="binutils-${BINUTILS_VERSION}.tar.gz"
GCC_CORE="gcc-core-${GCC_VERSION}.tar.bz2"
GCC_OBJC="gcc-objc-${GCC_VERSION}.tar.bz2"
GCC_CPP="gcc-g++-${GCC_VERSION}.tar.bz2"

BINUTILS_SOURCE="ftp://ftp.gnu.org/gnu/binutils/"
GCC_SOURCE="ftp://ftp.gnu.org/gnu/gcc/gcc-${GCC_VERSION}/"

PLATFORM="arm"
WORKDIR=`pwd`
TARGET="${PLATFORM}-linux-gnu"
PREFIX="${CROSS_PREFIX}/${PLATFORM}"
BINUTILSDIR="${WORKDIR}/binutils-${BINUTILS_VERSION}"
GCCDIR="${WORKDIR}/gcc-${GCC_VERSION}"
OBJDIR="${WORKDIR}/gcc-obj"

echo ">>> Downloading tarballs"

if [ ! -f "${BINUTILS}" ]; then
    wget -c "${BINUTILS_SOURCE}${BINUTILS}"
    check_error $? "Error downloading binutils."
fi
if [ ! -f "${GCC_CORE}" ]; then
    wget -c "${GCC_SOURCE}${GCC_CORE}"
    check_error $? "Error downloading GCC Core."
fi
if [ ! -f "${GCC_OBJC}" ]; then
    wget -c "${GCC_SOURCE}${GCC_OBJC}"
    check_error $? "Error downloading GCC Objective C."
fi
if [ ! -f "${GCC_CPP}" ]; then
    wget -c "${GCC_SOURCE}${GCC_CPP}"
    check_error $? "Error downloading GCC C++."
fi

echo ">>> Creating destionation directory"
if [ ! -d "${PREFIX}" ]; then
    mkdir -p "${PREFIX}"
    test -d "${PREFIX}"
    check_error $? "Unable to create ${PREFIX}."
fi

echo ">>> Creating GCC work directory"
if [ ! -d "${OBJDIR}" ]; then
    mkdir -p "${OBJDIR}"
    test -d "${OBJDIR}"
    check_error $? "Unable to create ${OBJDIR}."
fi

echo ">>> Unpacking tarballs"
tar -xvzf "${BINUTILS}"
check_error $? "Error unpacking binutils."
tar -xvjf "${GCC_CORE}"
check_error $? "Error unpacking GCC Core."
tar -xvjf "${GCC_OBJC}"
check_error $? "Error unpacking GCC Objective C."
tar -xvjf "${GCC_CPP}"
check_error $? "Error unpacking GCC C++."

echo ">>> Compiling and installing binutils"
cd "${BINUTILSDIR}"
check_error $? "Change directory failed."
./configure "--target=${TARGET}" "--prefix=${PREFIX}" "--program-prefix=${TARGET}-" "--disable-nls"
check_error $? "Error configuring binutils."
make all install
check_error $? "Error compiling/installing binutils."

echo ">>> Compiling and installing GCC"
cd "${OBJDIR}"
check_error $? "Change directory failed."
"${GCCDIR}/configure" "--target=${TARGET}" "--prefix=${PREFIX}" "--program-prefix=${TARGET}-" --with-gnu-as --with-gnu-ld --disable-nls --disable-threads --enable-languages=c,objc,c++,obj-c++ --disable-multilib --disable-libgcj --without-headers --disable-shared
check_error $? "Error configuring GCC."
PATH="${PATH}:${PREFIX}/bin" make all-gcc install-gcc
check_error $? "Error compiling/installing GCC."

echo
echo ">>> Cross-compiler for ${TARGET} installed."

آسف لأي غلاف خط، يجب أن يكون من السهل إصلاحه. إذا كنت تريد برقيبين أو رابط HTTP للحصول عليه، فما عليك سوى ترك تعليق.

إذا كنت ترغب حقا في بناء مجموعة أدوات كاملة لنفسك:
http://frank.harvard.edu/~coldwell/toolchain/
http://ftp.snapgear.org/pub/snapgear/tools/arm-linux/build-arm-linux-3.4.4.
ضع في اعتبارك، حيث يجب عليك البحث عن مصفوفة Toolchain Compatibilty أو قد تقوم بالجري في أخطاء تجميع غريبة.

إذا كان لا يزال لديك خيار Crosstool-NG، فهذا ما كنت أعمل عليه في الأيام القليلة الماضية:
http://blog.stranadurakov.com/2009/08/04/how-to-arm-linux/
ستجد هنا ملف تكوين Crosstool-NG الخاص بي، الذي كان يعمل بالنسبة لي.

لقد قمت مؤخرا ببناء Toolchain GNU للذراع باستخدام Crosstool-NG. استغرق الأمر من المحاكمة والخطأ لمعرفة إصدارات مكونات Toolchain التي ستلعبها معا، لكنني أخيرا حصلت عليها مع الإصدارات التالية:

  • Binutils 2.19.1.
  • دول مجلس التعاون الخليجي 4.3.2.
  • GMP 4.2.2.
  • لينكس نواة 2.6.29.1.
  • MPFR 2.3.1.
  • UCLIBC 0.9.30.1.

معرفة ما إذا كانت هذه تعمل لك أيضا.

أيضا، openwrt. كجزء من عملية بناء تكنولوجيا المعلومات يخلق مجموعة أدوات تجميع عبر الترجمة. قد ترغب في تجربة ذلك، واختيار إحدى المجالس المستندة إلى الذراع كهدف، حتى لو لم تكن مهتما بجعل جهاز توجيه لاسلكي.

لقد كان حظا سعيدا باستخدام buildroot. لبناء أدوات ومكتبات لمكتبات Linux عبر تجميعها. يستخدم Buildroot مكتبة UCLIBC C خفيفة الوزن بدلا من glibc، لذلك قد لا تعمل لأغراضك. (والحصول على Toolchain قد لا تكون هذه الطريقة مثيرة للغاية وتجميعها بنفسك.)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top