binutils-2.18 не требует патчей
gcc-4.2.2 требует gcc-arm-softfloat.patch. В отличии от остальных - этот патч известный, выдернул из buildroot наверное, не помню точно, хотя и в интернете можно найти. Лечит отсутствие -lfloat.
uClibc-0.9.29 требует uClibc-msync-redeclaration.patch.
linux kernel headers я взял свои текущие (2.6.11.8-hsc0-ea). Не знаю точно, насколько сильно конфигурация ядра влияет на устанавливаемые заголовки, но предпочел взять и ядро и конфигурацию свою. так вернее.
elf2flt-src-20060506.tar.bz2. --disable-got-check не помог elf2flt генерировать файлы правильно, поэтому прищлось вырезать все лишнее. После наложения патча elf2flt-nogot.patch elf2flt будет генерировать исключительно Load-to-ram бинари.
На всякий случай приложу sha1sum исходных архивов.
fdec92e9dfc6c32155869f3910f47041c78e2277 binutils-2.18.tar.bz2
b7046a127b91fd58b5680e1c8fcdab2bd6d9cc5a elf2flt-nogot.patch
61b2133609e44e470d07ee66eb4d7ccfcf33e96e elf2flt-src-20060506.tar.bz2
dcf2139e0f318850d475a6af3dcd5f176f1acb0e gcc-4.2.2.tar.bz2
f2df77f26528fd18466538d0cb2cf5e93d0527f3 gcc-arm-softfloat.patch
1c5a36dc2cfa58b41db413190e45675c44ca4691 uClibc-0.9.29.tar.bz2
7508ee533004dec56070fbe221ccfea1be60389b uClibc-msync-redeclaration.patch
Порядок сборки следующий:
- binutils:
./configure --prefix=$(PREFIX) --with-sysroot=${PREFIX} --target=arm-linux --disable-nls
make
make install
После сборки исходники не удалять, они еще понадобяться для elf2flt. - gcc (стадия первая):
./configure --prefix=$(PREFIX) --target=arm-linux --with-sysroot=${PREFIX} --with-float=soft --with-arch=armv4t --with-tune=arm7tdmi --with-newlib --enable-languages=c --enable-threads=no --disable-shared --disable-nls --disable-multilib --disable-tls --disable-mudflap
make
make install
После сборки и установки binutils в пути (PATH) необходимо добавить $(PREFIX)/bin. - заголовки ядра:
- Если у вас ядро свежее 2.6.18, то можно сделать так:
make ARCH=arm CROSS_COMPILE=arm-linux- headers_install INSTALL_HDR_PATH=$(PREFIX)/usr
- В противном случае (более старое ядро) придется мучаться:
make ARCH=arm CROSS_COMPILE=arm-linux- prepare
mkdir -p $(PREFIX)/usr/include
cp -a ./include/linux $(PREFIX)/usr/include/linux
cp -a ./include/asm-arm $(PREFIX)/usr/include/asm
cp -a ./include/asm-generic $(PREFIX)/usr/include/asm-generic
- Если у вас ядро свежее 2.6.18, то можно сделать так:
- uClibc:
make CROSS=arm-linux- menuconfig
make CROSS=arm-linux- KERNEL_HEADERS=$(PREFIX)/usr/include
make CROSS=arm-linux- install PREFIX=$(PREFIX)/ RUNTIME_PREFIX= DEVEL_PREFIX=usr/ KERNEL_HEADERS=$(PREFIX)/usr/include - gcc (финальная стадия):
./configure --prefix=$(PREFIX) --target=arm-linux --with-sysroot=${PREFIX} --with-float=soft --with-arch=armv4t --with-tune=arm7tdmi --enable-languages=c --enable-threads=posix --disable-shared --disable-nls --disable-multilib --disable-mudflap
make
make install - elf2flt:
./configure --prefix=$(PREFIX) --target=arm-linux --with-binutils-include-dir=../binutils/include/ --with-bfd-include-dir=../binutils/bfd/ --with-libbfd=../binutils/bfd/libbfd.a --disable-got-check
make
make install
И на последок самое главное - привожу Makefile, которым все собирается. Я думаю никому не составит труда заточить его под свои нужды или переработать в шелл скрипт. Мне Makefile удобнее.
PS: Я еще не разобрался как заставить работать init из busybox, но это уже вопрос времени. Шеллы всякие в качестве инитов или скрипты у меня прекрасно запускаются. Можно жить.
2 коммент.:
# gcc (стадия первая):
./configure --prefix=$(PREFIX) --target=arm-linux --with-sysroot=${PREFIX} --with-float=soft --with-arch=armv4t --with-tune=arm7tdmi --with-newlib --enable-languages=c --enable-threads=no --disable-shared --disable-nls --disable-multilib --disable-tls --disable-mudflap
make
make install
После сборки и установки binutils в пути (PATH) необходимо добавить $(PREFIX)/bin.
тут ошибочки есть или же для разных gcc по разному.
для gcc-4.1.1
вместо --disable-mudflap надо --disable-libmudflap --disable-libssp
Спасибо за каммент, насчет пути ты верно подметил, его надо прописать.
А насчет опций, ИМХО собрать работоспособный тулчейн для ARM - это вообще нетривиальная задача. Все версии сильно отличаются.
Сейчас, пока безуспешно, пытаюсь собрать с glibc.
Отправить комментарий