胡笑翔's profile笑翔BlogGuestbookNetwork Tools 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):

 

前言................................................................................................................................. 5

1 基本功...................................................................................................................... 5

1.1 先拿个板子来跑一下..................................................................................... 5

1.1.1 连串口线(需要USB2Serial转接口吗?)................................................. 5

1.1.2 打开minicom....................................................................................... 5

1.1.3 上电,进入BIOS(gBoot)....................................................................... 5

1.1.4 引导Linux Kernel.................................................................................. 5

1.1.5 进入系统............................................................................................. 5

1.1.6 Enjoy yourself!...................................................................................... 5

1.2 开发流程....................................................................................................... 5

1.2.1 Toolchain.............................................................................................. 5

1.2.2 Bootloader............................................................................................ 5

1.2.3 Kernel.................................................................................................. 5

1.2.4 Rootfs.................................................................................................. 5

1.3 准备开发环境................................................................................................ 5

1.3.1 Minicom............................................................................................... 6

1.3.2 Kermit.................................................................................................. 6

1.3.3 Tftp..................................................................................................... 6

1.3.4 GNU工具链......................................................................................... 6

1.3.5 GNU交叉编译工具链........................................................................... 6

1.4 make和Makefile............................................................................................ 6

2 制作GNU交叉编译工具链........................................................................................ 6

2.1 全面认识GNU工具链.................................................................................... 6

2.1.1 binutils................................................................................................. 6

2.1.2 gcc...................................................................................................... 6

2.1.3 glibc/uclibc........................................................................................... 7

2.2 利用XBuild生成GNU交叉编译工具链........................................................... 7

2.2.1 准备工作............................................................................................. 7

2.2.2 安装kernel头文件................................................................................ 7

2.2.3 安装uClibc头文件............................................................................... 8

2.2.4 编译binutils.......................................................................................... 8

2.2.5 第一遍编译gcc.................................................................................... 8

2.2.6 编译uClibc........................................................................................... 9

2.2.7 第二遍编译gcc.................................................................................... 9

2.2.8 全部完成............................................................................................. 9

2.3 测试已生成的工具链..................................................................................... 9

3 Bootloader/BSP移植................................................................................................... 9

3.1 gBoot简介..................................................................................................... 9

3.1.1 gBoot功能和特性................................................................................. 9

3.1.2 gBoot启动........................................................................................... 9

3.1.3 gBoot命令详解.................................................................................... 9

3.2 移植gBoot..................................................................................................... 9

3.2.1 源码目录结构...................................................................................... 9

3.2.2 配置和编译.......................................................................................... 9

3.2.3 烧录.................................................................................................... 9

3.2.4 运行.................................................................................................... 9

3.3 其他bootloader.............................................................................................. 9

3.3.1 grub..................................................................................................... 9

3.3.2 u-boot................................................................................................ 10

4 Linux内核............................................................................................................... 10

4.1 Kernel 概览................................................................................................. 10

4.1.1 获取内核源码(git的使用)................................................................... 10

4.1.2 内核源码目录树................................................................................. 10

4.2 内核配置和编译........................................................................................... 10

4.2.1 Makefile和Kconfig............................................................................. 10

4.2.2 内核配置选项详解.............................................................................. 10

4.2.3 交叉编译 (+ install path)..................................................................... 10

4.3 添加自己的代码........................................................................................... 10

5 构建rootfs............................................................................................................... 10

5.1 rootfs的组成............................................................................................... 10

5.2 rootfs制作步骤详解..................................................................................... 11

5.2.1 生成目录树........................................................................................ 11

5.2.2 copy实时运行库(runtime lib)............................................................... 11

5.2.3 安装系统工具..................................................................................... 11

5.2.4 创建系统启动脚本.............................................................................. 11

5.2.5 image文件的制作及烧录..................................................................... 12

5.3 进一步完善rootfs........................................................................................ 12

5.3.1 不足................................................................................................... 12

5.3.2 添加网络支持..................................................................................... 12

5.3.3 添加声音支持..................................................................................... 12

6 搭建GUI环境......................................................................................................... 12

6.1 Linux GUI现状............................................................................................ 12

6.2 搭建嵌入式Linux GUI.................................................................................. 12

6.2.1 framebuffer......................................................................................... 13

6.2.2 directfb............................................................................................... 13

6.2.3 SDL................................................................................................... 14

6.2.4 Gtk.................................................................................................... 14

6.3 桌面GUI简介.............................................................................................. 14

6.3.1 Xorg.................................................................................................. 14

7 应用程序移植.......................................................................................................... 14

7.1 音频............................................................................................................ 14

7.1.1 mpg123.............................................................................................. 14

7.1.2 madplay.............................................................................................. 14

7.2 视频............................................................................................................ 14

7.2.1 Mplayer.............................................................................................. 14

7.2.2 xvid.................................................................................................... 14

7.2.3 mpeg4ip.............................................................................................. 14

7.3 游戏............................................................................................................ 14

7.4 网络............................................................................................................ 14

7.4.1 WWW................................................................................................ 14

7.4.2 Samba................................................................................................ 14

7.4.3 NFS................................................................................................... 15

7.4.4 FTP................................................................................................... 15

7.5 Storage........................................................................................................ 15

7.6 Other utilities................................................................................................ 15

April 14

Android移植成功

 
柳暗花明,经过十天的努力,Android在我们玉香阁的开发板移植和开发成功。
 
感谢访问!
Please wait...
Sorry, the comment you entered is too long. Please shorten it.
You didn't enter anything. Please try again.
Sorry, we can't add your comment right now. Please try again later.
To add a comment, you need permission from your parent. Ask for permission
Your parent has turned off comments.
Sorry, we can't delete your comment right now. Please try again later.
You've exceeded the maximum number of comments that can be left in one day. Please try again in 24 hours.
Your account has had the ability to leave comments disabled because our systems indicate that you may be spamming other users. If you believe that your account has been disabled in error please contact Windows Live support.
Complete the security check below to finish leaving your comment.
The characters you type in the security check must match the characters in the picture or audio.