| 胡笑翔's profile笑翔BlogGuestbookNetwork | Help |
笑翔骑着没有缰绳的马 |
||||
|
November 28 桃花运昨天在北京的UME看了《桃花运》,片子算不上新颖,但人生百味,悲喜哭笑尽现其中。“胖大姐”为了爱义无反顾,让常人感动,令浪子回头。x小露(?)处处为心爱的人着想,竭尽所能,甚至所不能!... April 17 script for building toolchain During embedded R&D, there are many times we'd build cross-toolchain manually for the target platform. "Oh, no, that's a time-consuming job, and always company with strange errors", someone fears :P
Now Linke Wang and I have wroten down all the steps in a script which, eventually, makes the job easier than talking with your girlfriend in MSN :)
The toolchain generated by this script not only supports generic arm-linux, but also google's Andoird OS.
In the coming logs, I'd like to explain the following script step by step for those interested.
----------------------- srcipt: mktoolchain ----------------------------------
#!/bin/sh
# # # Create GNU toolchain from scratch (with GPL 2.0). # # http://AndroidSprite.spaces.live.com # # Authors: # Kongfu <conke.hu@gmail.com> # Linke <linke.wang@gmail.com> # date > /tmp/period.txt TOP_PATH=`pwd`
KERN_PATH=
UCLIBC_PATH= BINUTILS_PATH= GCC_PATH= SRC_PATH=${TOP_PATH}/src BUILD_PATH=${TOP_PATH}/build UCLIBC_LOCALE=uClibc-locale-030818.tgz TARGET_CPU=arm926ej-s
TOOLCHAIN_SYSROOT=`echo ${TARGET_CPU} | sed 's/-//g'`
if [ x"${TOOLCHAIN_SYSROOT}" = x"" ]; then echo "\nNo correct TARGET_CPU was assigned (${TARGET_CPU})!" exit fi TOOLCHAIN_SYSROOT=/opt/${TOOLCHAIN_SYSROOT}_eabi if [ x"${OS}" != x"" ]; then
TARGET_PLATFORM=arm-${OS}-linux-uclibcgnueabi else TARGET_PLATFORM=arm-linux-uclibcgnueabi fi BUILD_PLATFORM=`gcc -dumpmachine`
if [ x"${BUILD_PLATFORM}" = x"" ]; then echo "Please install gcc for host:)" exit fi HOSTCC_PATH=`which gcc`
if [ -d ${TOOLCHAIN_SYSROOT} ]; then
echo "Removing the old toolchain (${TOOLCHAIN_SYSROOT}) ..." rm -rf ${TOOLCHAIN_SYSROOT} || exit fi mkdir -p ${TOOLCHAIN_SYSROOT} || exit if [ -d ${BUILD_PATH} ]; then echo "Removing the tmp build dir (${BUILD_PATH}) ..." rm -rf ${BUILD_PATH} || exit fi mkdir -p ${BUILD_PATH} || exit cd ${BUILD_PATH}
BUILD_PATH=`pwd` cd ${SRC_PATH} FOUND=0
KERN_LIST="kernel-android kernel linux-2.6 linux-2.6.26 linux-2.6.25 linux-2.6.24 linux-2.6.23 linux-2.6.22.1" for KERN_PATH in $KERN_LIST do if [ -d ${KERN_PATH} ]; then echo "Using existing kernel source dir \"${KERN_PATH}\"." # make -C ${KERN_PATH} ARCH=arm clean || exit FOUND=1 break; elif [ -e ${KERN_PATH}.tar.bz2 ]; then echo "Extracting kernel source dir \"${KERN_PATH}\"." tar jxvf ${KERN_PATH}.tar.bz2 || exit FOUND=1 break; fi done if [ $FOUND = "0" ]; then echo "\nNo kernel source package found!" echo "Please copy the kernel source package to subdir \"src\"." exit fi KERN_PATH=${SRC_PATH}/${KERN_PATH}
FOUND=0 BINUTILS_LIST="binutils binutils-2.18 binutils-2.17 binutils-2.16" for BINUTILS_PATH in $BINUTILS_LIST do if [ -d ${BINUTILS_PATH} ]; then echo "Using existing binutils source dir \"${BINUTILS_PATH}\"." FOUND=1 break; elif [ -e ${BINUTILS_PATH}.tar.bz2 ]; then echo "Extracting binutils source dir \"${BINUTILS_PATH}\"." tar jxvf ${BINUTILS_PATH}.tar.bz2 FOUND=1 break; fi done if [ $FOUND = "0" ]; then
echo "\nNo binutils source package found!" echo "Please copy the binutils source package to subdir \"src\"." exit fi BINUTILS_PATH=${SRC_PATH}/${BINUTILS_PATH}
FOUND=0 UCLIBC_LIST="uClibc uClibc-0.9.30 uClibc-0.9.29" for UCLIBC_PATH in $UCLIBC_LIST do if [ -d ${UCLIBC_PATH} ]; then echo "Using existing uClibc source dir \"${UCLIBC_PATH}\"." make HOSTCC=${HOSTCC_PATH} -C ${UCLIBC_PATH} clean > /dev/null 2>&1 || exit FOUND=1 break; elif [ -e ${UCLIBC_PATH}.tar.bz2 ]; then echo "Extracting uClibc source dir \"${UCLIBC_PATH}\"." tar jxvf ${UCLIBC_PATH}.tar.bz2 || exit FOUND=1 break; fi done if [ $FOUND = "0" ]; then
echo "\nNo uClibc source package found!" echo "Please copy the uClibc source package to subdir \"src\"." exit fi UCLIBC_PATH=${SRC_PATH}/${UCLIBC_PATH}
if [ ! -f ${UCLIBC_LOCALE} ]; then echo "\nNo uClibc-locale package was fond, try downloading ..." wget http://www.uclibc.org/downloads/${UCLIBC_LOCALE} fi if [ ! -f ${UCLIBC_PATH}/extra/locale/${UCLIBC_LOCALE} ]; then
cp ${UCLIBC_LOCALE} ${UCLIBC_PATH}/extra/locale/ || exit fi FOUND=0 GCC_LIST="gcc gcc-4.3.0 gcc-4.2.3 gcc-4.2.1" for GCC_PATH in $GCC_LIST do if [ -d ${GCC_PATH} ]; then echo "Using existing gcc source dir \"${GCC_PATH}\"." FOUND=1 break; elif [ -e ${GCC_PATH}.tar.bz2 ]; then echo "Extracting gcc source dir \"${GCC_PATH}\"." tar jxvf ${GCC_PATH}.tar.bz2 || exit FOUND=1 break; fi done if [ $FOUND = "0" ]; then
echo "\nNo gcc source package found!" echo "Please copy the gcc source package to subdir \"src\"." exit fi GCC_PATH=${SRC_PATH}/${GCC_PATH}
make -C ${KERN_PATH} \ ARCH=arm \ INSTALL_HDR_PATH=${TOOLCHAIN_SYSROOT}/usr \ headers_install || exit cd ${UCLIBC_PATH} cp -f ${TOP_PATH}/config-uclibc .config make CROSS=${TOOLCHAIN_SYSROOT}/usr/bin/${TARGET_PLATFORM}- oldconfig
make \
PREFIX=${TOOLCHAIN_SYSROOT} \ DEVEL_PREFIX=/usr/ \ RUNTIME_PREFIX=/ \ KERNEL_HEADERS=${TOOLCHAIN_SYSROOT}/usr/include \ CROSS=${TOOLCHAIN_SYSROOT}/usr/bin/${TARGET_PLATFORM}- \ HOSTCC=${HOSTCC_PATH} \ pregen || exit make \
PREFIX=${TOOLCHAIN_SYSROOT} \ DEVEL_PREFIX=/usr/ \ RUNTIME_PREFIX=/ \ KERNEL_HEADERS=${TOOLCHAIN_SYSROOT}/usr/include \ CROSS=${TOOLCHAIN_SYSROOT}/usr/bin/${TARGET_PLATFORM}- \ HOSTCC=${HOSTCC_PATH} \ install_headers || exit mkdir -p ${BUILD_PATH}/build_binutils || exit cd ${BUILD_PATH}/build_binutils ${BINUTILS_PATH}/configure \
--prefix=/usr \ --build=${BUILD_PLATFORM} \ --host=${BUILD_PLATFORM} \ --target=${TARGET_PLATFORM} \ --with-sysroot=${TOOLCHAIN_SYSROOT}/ \ --with-float=soft \ --disable-multilib \ --disable-werror make || exit
make DESTDIR=${TOOLCHAIN_SYSROOT} install || exit
mkdir -p ${BUILD_PATH}/gcc_pass_1 || exit cd ${BUILD_PATH}/gcc_pass_1 ${GCC_PATH}/configure \
--prefix=${TOOLCHAIN_SYSROOT}/usr \ --build=${BUILD_PLATFORM} \ --host=${BUILD_PLATFORM} \ --target=${TARGET_PLATFORM} \ --enable-languages=c \ --with-sysroot=${TOOLCHAIN_SYSROOT} \ --disable-__cxa_atexit \ --enable-target-optspace \ --with-gnu-ld \ --disable-shared \ --enable-threads \ --enable-tls \ --enable-long-long \ --disable-multilib \ --with-float=soft \ --with-cpu=${TARGET_CPU} \ --with-tune=${TARGET_CPU} make all-gcc || exit
make install-gcc || exit
cd ${UCLIBC_PATH} make \
PREFIX=/ \ DEVEL_PREFIX=/ \ RUNTIME_PREFIX=/ \ KERNEL_HEADERS=${TOOLCHAIN_SYSROOT}/usr/include \ CROSS=${TOOLCHAIN_SYSROOT}/usr/bin/${TARGET_PLATFORM}- \ all || exit make \
PREFIX=${TOOLCHAIN_SYSROOT} \ DEVEL_PREFIX=/usr/ \ RUNTIME_PREFIX=/ \ KERNEL_HEADERS=${TOOLCHAIN_SYSROOT}/usr/include \ CROSS=${TOOLCHAIN_SYSROOT}/usr/bin/${TARGET_PLATFORM}- \ install_runtime || exit make \
PREFIX=${TOOLCHAIN_SYSROOT} \ DEVEL_PREFIX=/usr/ \ RUNTIME_PREFIX=/ \ KERNEL_HEADERS=${TOOLCHAIN_SYSROOT}/usr/include \ CROSS=${TOOLCHAIN_SYSROOT}/usr/bin/${TARGET_PLATFORM}- \ install_dev || exit #make -C utils \ # PREFIX=${TOOLCHAIN_SYSROOT} \ # KERNEL_HEADERS=${TOOLCHAIN_SYSROOT}/usr/include \ # CROSS=${TARGET_PLATFORM}- \ # hostutils mkdir -p ${BUILD_PATH}/gcc_pass_2 || exit cd ${BUILD_PATH}/gcc_pass_2 ${GCC_PATH}/configure \
--prefix=/usr \ --build=${BUILD_PLATFORM} \ --host=${BUILD_PLATFORM} \ --target=${TARGET_PLATFORM} \ --enable-languages=c,c++ \ --with-sysroot=${TOOLCHAIN_SYSROOT} \ --with-build-time-tools=${TOOLCHAIN_SYSROOT}/usr/${TARGET_PLATFORM}/bin \ --disable-__cxa_atexit \ --enable-target-optspace \ --with-gnu-ld \ --enable-shared \ --enable-threads \ --with-tls \ --disable-multilib \ --enable-long-long \ --with-float=soft \ --with-cpu=${TARGET_CPU} \ --with-tune=${TARGET_CPU} make all || exit
make DESTDIR=${TOOLCHAIN_SYSROOT} install || exit
echo cd ${TOOLCHAIN_SYSROOT}/usr/bin for file in `ls ${TARGET_PLATFORM}*` do ln -vs ${file} arm-linux-${file##*-} # ln -vs ${file} arm-linux-gnueabi-${file##*-} done grep arm ~/.bashrc || echo "\nexport PATH=\${PATH}:${TOOLCHAIN_SYSROOT}/usr/bin" >> ~/.bashrc
echo
echo "XBuild completed successfully!" echo "Toolchain has been installed to ${TOOLCHAIN_SYSROOT}/usr/bin/ !" date >> /tmp/period.txt echo
echo "If any question, please contact the authors:" echo " Kongfu <conke.hu@gmail.com>" echo " Linke <linke.wang@gmail.com>" echo "Or visit the website:" echo " http://AndroidSprite.spaces.live.com" echo April 15 嵌入式Linux系统搭建今天开发正式动手完成这本书的编写,初拟目录如下(pls ignore the page numbers):
1.1 先拿个板子来跑一下..................................................................................... 5 1.1.1 连串口线(需要USB2Serial转接口吗?)................................................. 5 1.1.3 上电,进入BIOS(gBoot)....................................................................... 5 1.3.5 GNU交叉编译工具链........................................................................... 6 2.1 全面认识GNU工具链.................................................................................... 6 2.2 利用XBuild生成GNU交叉编译工具链........................................................... 7 2.2.2 安装kernel头文件................................................................................ 7 2.2.3 安装uClibc头文件............................................................................... 8 2.2.5 第一遍编译gcc.................................................................................... 8 2.2.7 第二遍编译gcc.................................................................................... 9 2.3 测试已生成的工具链..................................................................................... 9 3.1.1 gBoot功能和特性................................................................................. 9 3.2.1 源码目录结构...................................................................................... 9 4.1.1 获取内核源码(git的使用)................................................................... 10 4.1.2 内核源码目录树................................................................................. 10 4.2.2 内核配置选项详解.............................................................................. 10 4.2.3 交叉编译 (+ install path)..................................................................... 10 5.2.2 copy实时运行库(runtime lib)............................................................... 11 5.2.3 安装系统工具..................................................................................... 11 5.2.4 创建系统启动脚本.............................................................................. 11 5.2.5 image文件的制作及烧录..................................................................... 12 5.3.2 添加网络支持..................................................................................... 12 5.3.3 添加声音支持..................................................................................... 12 |
||||
|
|