User:Mwalle

From Milkymist Wiki

Jump to: navigation, search

Contents

[edit] Linux ABI changes

  • asm/posix_types.h: use generic posix_types.h (changes mode_t, nlink_t, ipc_pid_t, uid_t, gid_t, old_uid_t, old_gid_t, old_dev_t)
  • asm/stat.h: use generic stat.h
  • asm/param.h: use generic param.h
  • asm/unistd.h: use generic unistd.h
  • kernel/sys_call_table.c: new file, content dynamically generated from asm/unistd.h
  • kernel/entry.S: using sys_call_table.c instead of a duplicated local table

[edit] Toolchain issues

  • uclinux defines / multilib
  • fdpic
  • elf2flt: fix --enable-emit-relocs (real linker doesnt save addend in HI16 reloc)

[edit] Creating your own LM32 uclinux toolchain

Note: The resulting toolchain will build FLAT binaries.

  • set environment
export MY_PREFIX=/home/mw/local/lm32-uclinux
export PATH=$MY_PREFIX/bin:$PATH
  • unpack and patch source
tar xvfj binutils-2.20.1.tar.bz2
cd binutils-2.20.1
patch -p1 < ../binutils-lm32-uclinux-flat-support.patch
cd ..

tar xvfj gcc-core-4.5.2.tar.bz2
cd gcc-4.5.2
patch -p1 < ../gcc-fix-lm32-uclinux-configure-options.patch
patch -p1 < ../gcc-fix-lm32-libgcc.patch
patch -p1 < ../gcc-lm32-uclinux-flat-support.patch
cd ..
<uclibc, linux and elf2flt here>
  • build binutils
mkdir b-binutils
../binutils-2.20.1/configure --prefix=$MY_PREFIX --target=lm32-uclinux
make
make install
cd ..
  • build stage 1 gcc
mkdir b-1-gcc
cd b-1-gcc
../gcc-4.5.2/configure --prefix=$MY_PREFIX --target=lm32-uclinux --enable-languages=c --disable-shared \
   --disable-threads --without-headers --disable-multilib --disable-libssp
make
make install
cd ..
  • build linux
mkdir b-linux
cd b-linux
make -C ../milkymist-linux O=$PWD CROSS_COMPILE=lm32-uclinux- ARCH=lm32 defconfig
make -C ../milkymist-linux O=$PWD CROSS_COMPILE=lm32-uclinux- ARCH=lm32 menuconfig
[make sure you enable OPTIMIZE_FOR_SIZE, disable BINFMT_ELF_FDPIC and enable BINFMT_FLAT]
make -C ../milkymist-linux O=$PWD CROSS_COMPILE=lm32-uclinux- ARCH=lm32
make -C ../milkymist-linux O=$PWD CROSS_COMPILE=lm32-uclinux- ARCH=lm32 INSTALL_HDR_PATH=$MY_PREFIX/lm32-uclinux headers_install
cd ..
  • build uclibc
mkdir b-uclibc
cd b-uclibc
make -C ../uClibc O=$PWD CROSS=lm32-uclinux- ARCH=lm32 PREFIX=$MY_PREFIX/lm32-uclinux defconfig
[set KERNEL_HEADERS to $MY_PREFIX/lm32-uclinux/include, disable FDPIC and enable FLAT, disable SOFT-FLOAT, enable FPU]
[set RUNTIME_PREFIX to / and DEVEL_PREFIX to /]
make -C ../uClibc O=$PWD CROSS=lm32-uclinux- ARCH=lm32 PREFIX=$MY_PREFIX/lm32-uclinux
make -C ../uClibc O=$PWD CROSS=lm32-uclinux- ARCH=lm32 PREFIX=$MY_PREFIX/lm32-uclinux install
cd ..
  • build stage 2 gcc
mkdir b-2-gcc
cd b-2-gcc
../gcc-4.5.2/configure --prefix=$MY_PREFIX --target=lm32-uclinux --enable-languages=c --disable-shared \
   --enable-c99 --enable-long-long --disable-libssp
make
make install
cd ..
  • build elf2flt
mkdir b-elf2flt
cd b-elf2flt
# copy autogenerated bfd.h
cp ../b-binutils/bfd/bfd.h ../bintuils-2.20.1/include/
../elf2flt/configure --prefix=$MY_PREFIX --target=lm32-uclinux --with-bfd-include-dir=$PWD/../binutils-2.20.1/include \
   --with-libbfd=$PWD/../b-binutils/bfd/libbfd.a --with-libiberty=$PWD/../b-binutils/libiberty/libiberty.a --disable-emit-relocs
make
make install
cd ..

[edit] Patches

Personal tools