Skip to Content

Сброка toolchain для ARM и запуск Linux на AT91RM9200.

Итак, начнем

Для начала установим переменные окружения для сборки toolchain-а:

export TARGET=arm-linux
export PREFIX=/usr/local/arm
export SYSROOT=${PREFIX}/sysroot
export ARCH=arm
export CROSS_COMPILE=${TARGET}-
export PATH=$PATH:${PREFIX}/bin

Создаем каталоги для сборки:

mkdir /usr/local/arm
cd /usr/local/arm
mkdir src

 В каталог /usr/local/arm/src будем класть все пакеты для сборки.

Создадим каталог для сборки

mkdir /usr/local/arm/src/BUILD

 в нем будем производить сборку всего toolchain-а, чтобы не трогать родные каталоги пакетов

binutils

Распакуем binutils:

bunzip2 -c binutils-2.16.1.tar.bz2 | tar xv

 Создадим каталог для сборки binutils:

mkdir /usr/local/arm/src/BUILD/binutils-2.16.1

 В созданном каталоге делаем:

../../binutils-2.16.1/configure --prefix=${PREFIX} --target=${TARGET} \
--with-sysroot=${SYSROOT} 2>&1 | tee configure.out

 Собираем и инсталируем binutils:

make 2>&1 | tee make.out
make install 2>&1 | tee -a make.out

 Заголовочники (include) ядра

Распаковываем ядро и накатываем требуемые патчи:

bunzip2 -c linux-2.6.16.tar.bz2 | tar xv
ln -s linux-2.6.16 linux

Далее я накатывал патч 2.6.16-at91.patch от maxim (http://maxim.org.za/at91_26.html) Также накладываем остальные патчи, которые необходимо (я приложил в комплект свой патч для работы с RTL8102B(L) MII и для поддержки I2C-шных часов DS1307. последний пока сам не пробовал)

Делаем конфиг для требуемой платформы. У меня это так:

make at91rm9200dk_defconfig
make include/linux/version.h

На ошибки внимания не обращаем.

Теперь копируем include-файлы:

mkdir -p ${SYSROOT}/usr/include
cp -a ${PREFIX}/src/linux/include/linux ${SYSROOT}/usr/include/linux
cp -a ${PREFIX}/src/linux/include/asm-arm ${SYSROOT}/usr/include/asm
cp -a ${PREFIX}/src/linux/include/asm-generic ${SYSROOT}/usr/include/asm-generic

 GCC для сборки glibc

Сборка GCC будет осуществляться в два этапа - вначале промежуточная версия для сборки glibc, потом уже финальная версия.

Распакуем исходники GCC:

bunzip2 -c gcc-3.4.6.tar.bz2 | tar xv

Накатываем все патчи из patches/gcc.

Создаем каталог для сборки:

mkdir /usr/local/arm/src/BUILD/gcc-3.4.6-stage1

В созданном каталоге выполняем:

../../gcc-3.4.6/configure \
--prefix=${PREFIX} --target=${TARGET} --enable-languages=c \
--with-sysroot=${SYSROOT} --without-fp --with-softfloat-support=internal \
--with-newlib --disable-threads --disable-shared --enable-static \
--with-inhibit-libc --with-float=soft 2>&1 | tee configure.out

Собираем и инсталируем GCC:

make 2>&1 | tee make.out
make install 2>&1 | tee -a make.out

glibc

распаковываем glibc:

bunzip2 -c glibc-2.3.6.tar.bz2 | tar xv

заходим в каталог glibc-2.3.6 и распаковываем linux-threads:

bunzip2 -c ../glibc-linuxthreads-2.3.6.tar.bz2 | tar xv

накатываем патчи из patches/glibc.

Создаем каталог для сборки:

mkdir /usr/local/arm/src/BUILD/glibc-2.3.6

В созданном каталоге выполняем:

BUILD_CC=gcc CC=${CROSS_COMPILE}gcc AR=${CROSS_COMPILE}ar \
RANLIB=${CROSS_COMPILE}ranlib AS=${CROSS_COMPILE}as LD=${CROSS_COMPILE}ld \
../../glibc-2.3.6/configure --prefix=/usr --build=i386-unknown-linux \
--host=arm-linux --target=arm-linux --without-fp \
--without-__thread --enable-add-ons=linuxthreads \
--with-headers=${SYSROOT}/usr/include 2>&1 | tee configure.out

Ставим на сборку glibc и идем пить пиво (собирается оооочень долго):

make 2>&1 | tee make.out
make install_root=${SYSROOT} install

GCC

Создаем каталог для сборки:

mkdir /usr/local/arm/src/BUILD/gcc-3.4.6

В созданном каталоге выполняем:

../../gcc-3.4.6/configure \
--prefix=${PREFIX} --target=${TARGET} --enable-languages=c,c++ \
--with-sysroot=${SYSROOT} --without-fp --with-softfloat-support=internal \
--enable-threads=posix --with-float=soft 2>&1 | tee configure.out

Собираем и инсталируем GCC:

make 2>&1 | tee make.out
make install 2>&1 | tee -a make.out

Ядро

Тут все тривиально - как при сборке ядра под компьютер:

cd ${PREFIX}/src/linux
make Image
make modules
make INSTALL_MOD_PATH=${SYSROOT} modules_install

Не забываем поковырять arch/arm/mach-at91rm9200/ на предмет своей переферии. Там все очень просто (я даже сам удивился!!!). Разобраться во всем можно за час.

Расскажу тока пару своих исслодований:

1. Кол-во используемых uart-ов описывается в arch/arm/mach-at91rm9200/board-dk.c:

Комментарии

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Syntax highlight code surrounded by the {syntaxhighlighter SPEC}...{/syntaxhighlighter} tags, where SPEC is a Syntaxhighlighter options string or "class="OPTIONS" title="the title".
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <p> <span> <s> <strike> <div> <h1> <h2> <h3> <h4> <h5> <h6> <img> <map> <area> <hr> <br> <br /> <ul> <ol> <li> <dl> <dt> <dd> <table> <caption> <tbody> <tr> <td> <em> <b> <u> <i> <strong> <del> <ins> <sub> <sup> <quote> <blockquote> <pre> <address> <code> <cite> <embed> <object> <param> <strike>
  • Использовать как разделитель страниц.

Подробнее о форматировании

CAPTCHA
Введите текст что Вы видите на картинке. Регистр букв не важен.