Сброка 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:
- 60244 просмотра
Новые записи в блогах
- Устранение дребезга контактов на основе вертикальных счетчиков
- Диагностика Imprecise Bus Faults в микроконтроллерах Cortex-M3/M4/M4F
- Self-powered камера
- Фоновый модулятор: беспроводная связь из ничего (перевод)
- Texas Instruments Analog Applications Journal SLYT612 "Снижение искажений в аналоговых КМОП ключах" (перевод)
- USB MSD. Часть 6. Команды SCSI (перевод)
- USB MSD. Часть 3. USB класс накопителей данных (перевод)
- Texas Instruments Application Report SBAA042 "Кодовые схемы, используемые в аналогово-цифровых преобразователях" (перевод)
- 10 принципов правильного интерфейса
- Релиз SDK на русский микропроцессор КРОЛИК
Recent comments
14 часов 3 минуты назад
15 часов 48 минут назад
23 часа 26 минут назад
1 день 10 часов назад
1 день 12 часов назад
1 день 14 часов назад
1 день 21 час назад
2 дня 2 часа назад
2 дня 16 часов назад
4 дня 6 часов назад