User:Mwalle
From Milkymist Wiki
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 ..

