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://

2) Get the patches from

3) Edit the patches to match the location of the buildroot (where you save it)
for example if my location of build root is
u need to change the following in the patch file
edit all the patches as above

4) Now as mentioned here
add $(BUILDROOT)/build_mipsel/staging_dir/usr/bin/ to your search PATH by
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 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
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 --->
String and Stdio Support --->
[*] Support Signed Characters In 'ctype.h' Functions.

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

uClibc development/debugging options --->

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 u may encounter one of the following problems

1) Possible issue 1:
make[4]: *** [] 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

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 `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; \
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

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 \
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

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

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...