Sunday, August 24, 2008

Building linux for psp - getting toolchain / crosscompiler


Here i will explain how to get the psp-linux toolchain. Not that this is not the same toolchain which is used to compile homebrew applications.

1) Get the buildroot sutable for the patches 20071216
version ; but if u go to buildroot website u will not find this , so checkout a version from svn close to this
svn co --revision 20650 svn://uclibc.org/trunk/buildroot

2) Get the patches from http://jacksonm88.googlepages.com/linuxonpsp.htm

3) Edit the patches to match the location of the buildroot (where you save it)
for example if my location of build root is
/home/vijay/stuff/embeddedsystems/psplinux/buildroot/buildroot
u need to change the following in the patch file
/usr/src/buildroot/./toolchain_build_mipsel/gcc-4.2.1/libgomp/configure
to
/home/vijay/stuff/embeddedsystems/psplinux/buildroot/buildroot/toolchain_build_mipsel/gcc-4.2.1/libgomp/configure
edit all the patches as above

4) Now as mentioned here
http://jacksonm88.googlepages.com/linuxonpsp.htm
add $(BUILDROOT)/build_mipsel/staging_dir/usr/bin/ to your search PATH by
PATH=$PATH:/path/to/buidroot/
build_mipsel/staging_dir/usr/bin
This is during compilation of uclibc libraries. It searches the PATH variable for the mipsel-linux-gcc command. Basically when u type a command in terminal; linux system searches for that command in the locations defined in PATH variable.
Place the gcc,uclibc and elf2flt patches to

$(BUILDROOT)/toolchain/gcc/4.2.1/
$(BUILDROOT)/toolchain/uClibc/

$(BUILDROOT)/toolchain/elf2flt/
Buildroot applies these patches during build time
.

5)Apply the buildroot patch
cd /path/to/buildroot/
patch -p1 < /path/to/buildroot-20071216.linuxonpsppatch
Now it may compile that a particular file has not found manually enter the path, just give the complete path to the file

6) configuring builroot
copy the
buildroot-20071216-linuxonpsp.config to $(BUILDROOT)/
U need to change the .config file in the /path/to/buildroot folder with the above file ; this file contains the information about wht to build and all
cp /path/to/
buildroot-20071216-linuxonpsp.config /path/to/buildroot/.config
use the below command from /path/to/buildroot directory to customize the options
cd /path/to/buildroot
make menuconfig

7) configuring uclibc c library
use
make uclibc-menuconfig
this will download the uclibc-0.9.29 and start menuconfig for customizing the option; just exit menuconfig for now. and copy the uclibc-0.9.29-linuxonpsp.config to the $(BUILDROOT)/toolchain_build_mipsel/uClibc-0.9.29 folder
cp /path/to/
uclibc-0.9.29-linuxonpsp.config /path/to/buildroot/toolchain_build_mipsel/uClibc-0.9.29/.config
We will now again issue the make uclibc-menuconfig for customizing,
Select the below options

Target Architecture Features and Options --->
(/path/to/buildroot/toolchain_build_mipsel/linux/include)
String and Stdio Support --->
[*] Support Signed Characters In 'ctype.h' Functions.

ctype argument checking (Do not check -- unsafe) --->

uClibc development/debugging options --->
(/path/to/buildroot/build_mipsel/staging_dir/usr/bin/mipsel-linux-uclibc-)

This a resolves a error later, Enable any other options/support u require and exit the menuconfig
Now u are ready for buildind the toolchain.

8) Start building toolchain/cross compiler
cd /path/to/buildroot make source make

9) Possible problems and solutions
As mentioned here
http://jacksonm88.googlepages.com/linuxonpsp.htm u may encounter one of the following problems

1) Possible issue 1:
make[4]: *** [bfd.info] Error 1
make[4]: Leaving directory `/usr/src/buildroot-20071216/toolchain_build_mipsel/binutils-2.18-build/bfd/doc'
...
make[4]: Leaving directory `/usr/src/buildroot-20071216/toolchain_build_mipsel/binutils-2.18-build/bfd'
make[3]: *** [info-recursive] Error 1
make[3]: Leaving directory `/usr/src/buildroot-20071216/toolchain_build_mipsel/binutils-2.18-build/bfd'
make[2]: *** [all-bfd] Error 2
make[2]: Leaving directory `/usr/src/buildroot-20071216/toolchain_build_mipsel/binutils-2.18-build'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/usr/src/buildroot-20071216/toolchain_build_mipsel/binutils-2.18-build'
make: *** [/usr/src/buildroot-20071216/toolchain_build_mipsel/binutils-2.18-build/binutils/objdump] Error 2

Workaround:
cd /usr/src/buildroot-20071216/toolchain_build_mipsel/binutils-2.18-build/bfd/doc
makeinfo --split-size=5000000 --split-size=5000000 -I /usr/src/buildroot-20071216/toolchain_build_mipsel/binutils-2.18/bfd/doc -o bfd.info `test -f 'bfd.texinfo' || echo '/usr/src/buildroot-20071216/toolchain_build_mipsel/binutils-2.18/bfd/doc/'`bfd.texinfo
continue to run make under $(BUILDROOT)/

2) Possible issue 2:
if [ ! -e /usr/src/buildroot-20071216/build_mipsel/staging_dir/mipsel-linux-uclibc/bin/cc ]; then \
ln -snf gcc /usr/src/buildroot-20071216/build_mipsel/staging_dir/mipsel-linux-uclibc/bin/cc; \
fi
ln: creating symbolic link `/usr/src/buildroot-20071216/build_mipsel/staging_dir/mipsel-linux-uclibc/bin/cc' to `gcc': No such file or directory
make: *** [/usr/src/buildroot-20071216/toolchain_build_mipsel/gcc-4.2.1-final/.installed] Error 1

Workaround:
cd $(BUILDROOT)/build_mipsel/staging_dir/
ln -s usr/mipsel-linux-uclibc/ mipsel-linux-uclibc
continue to run make under $(BUILDROOT)/

3) Possible issue 3:
install -c /usr/src/buildroot-20071216/project_build_mipsel/linuxonpsp/root/usr/bin/ldd \
/usr/src/buildroot-20071216/build_mipsel/staging_dir/mipsel-linux-uclibc/target_utils/ldd
install: cannot stat `/usr/src/buildroot-20071216/project_build_mipsel/linuxonpsp/root/usr/bin/ldd': No such file or directory
make: *** [/usr/src/buildroot-20071216/project_build_mipsel/linuxonpsp/root/usr/bin/ldd] Error 1

Workaround:
touch $(BUILDROOT)/project_build_mipsel/linuxonpsp/root/usr/bin/ldd
continue to run make under $(BUILDROOT)/

4) Possible issue 4:
[ -f /usr/src/buildroot-20071216/build_mipsel/staging_dir/bin/mipsel-linux-uclibc-ld.real ] || \
mv /usr/src/buildroot-20071216/build_mipsel/staging_dir/bin/mipsel-linux-uclibc-ld /usr/src/buildroot-20071216/build_mipsel/staging_dir/bin/mipsel-linux-uclibc-ld.real
mv: can't stat source /usr/src/buildroot-20071216/build_mipsel/staging_dir/bin/mipsel-linux-uclibc-ld
make[1]: *** [install] Error 1
make[1]: Leaving directory `/usr/src/buildroot-20071216/toolchain_build_mipsel/elf2flt'
make: *** [/usr/src/buildroot-20071216/toolchain_build_mipsel/elf2flt/elf2flt] Error 2

Workaround:
cd $(BUILDROOT)/build_mipsel/staging_dir/bin/
ln -s `find .. -name 'mipsel-linux-uclibc-ld'` mipsel-linux-uclibc-ld
cd $(BUILDROOT)/toolchain_build_mipsel/elf2flt/
make install
continue to run make under $(BUILDROOT)/

10) Remeber if u needed to do a ( make clean and make )in the buildroot directory for rebuilding the toolchain with extra options; Issue the Steps in possible issue :4 otherwise -elf2flt support will be broken in toolchain
11) now add the /path/tp/buildroot/
build_mipsel/staging_dir/usr/bin to ur PATH variable permanently by editing the .bashrc file in home directory
echo "export PATH=$PATH:
/path/tp/buildroot/build_mipsel/staging_dir/usr/bin" >> ~/.bashrc
12) Now u r up with the toolchain for psp linux development :)

1 comment:

Anonymous said...

Thanks!

Google