Installing ELDK

Dec 16, 2013
6 min read
May 31, 2023 18:13 EEST

Download the image and mount it with:

mkdir ~/images
cd ~/images
mkdir /mnt/image
mount ~/images/ppc-2007-01-19.iso /mnt/image -o loop=/dev/loop3

Install ELDK

cd /mnt/image/
./install -d /usr/local/eldk ppc_6xx

Create the devices:

cd /usr/local/eldk/ppc_6xx/dev

Fix the permissions:

cd /usr/local/eldk

Set environment in ~/.zshrc:

#export CROSS_COMPILE=ppc_6xx- # have problem with compile for AMD64
export PATH=$PATH:/usr/local/eldk/usr/bin:/usr/local/eldk/bin

Create the console device with:

mknod /usr/local/eldk/ppc_6xx/dev/console c 5 1

Install U-Boot

To get u-boot:

cd /usr/local/eldk/usr/src/
git clone git:// u-boot

Load image from RAM

At this testphase we boot u-boot from RAM so we can test if everything is ok before burn it into flash.

cd /usr/local/eldk/usr/src/u-boot
(change in Makefile line 391 the address 0xFF000000 to 0x00020000)
make Lite5200_LOWBOOT_config
cp u-boot.srec /tftpboot/MPC5200

Now set the jumper on your board to boot from high.

dBUG> set client
dBUG> set server
dBUG> set netmask
dBUG> dn -s MPC5200/u-boot.srec
dBUG> go 20100

u-boot should appear now on your icecube. The next step is now to write u-boot to flash.

Write u-boot to FLASH

Set bootmode to high boot in the icecube board.

cd /usr/local/eldk/usr/src/u-boot
make distclean
make Lite5200_LOWBOOT_config
(with address 0xFF000000)
cp u-boot.bin /tftproot/MPC5200/u-boot-lowboot.bin 

dBUG> set mac 00:01:AF:52:01:13
dBUG> set client (IP-address of icecube)
dBUG> set server (IP-address of the workstation)
dBUG> set netmask
dBUG> dn -i -o 0x100000 MPC5200/u-boot-lowboot.bin
dBUG> fe 0xFF000000 0xff050000
dBUG> fp 0xff000000 0xff040000 0x100000
dBUG> store (you can save the config in flash for boot-high)

Power off the board to set boot to low boot.

====== > setenv bootcmd
====== > setenv bootdelay
====== > setenv netdev
====== > setenv nfsargs
====== > setenv ramargs
====== > setenv addip
====== > setenv flash_nfs
====== > setenv flash_self
====== > setenv net_nfs
====== > setenv rootpath
====== > setenv bootfile
====== > setenv ntpserverip
====== > setenv bootcmd sntp\\; tftp 200000\\; bootm 200000
====== > setenv preboot echo\\;echo Autostarting. Press any key to abort..\\;echo
====== > setenv serverip
====== > setenv ipaddr
====== > setenv netmask
====== > setenv ethaddr 00:01:AF:52:01:13
====== > setenv bootdelay 5
====== > setenv hostname icecube
====== > setenv nfsroot root=/dev/nfs rw nfsroot=$(serverip):/usr/local/eldk/ppc_6xx
====== > setenv ip ip=$(ipaddr):$(serverip):$(serverip):$(netmask):$(hostname)::off
====== > setenv flashroot root=/dev/mtdblock2 rw
====== > setenv rootfs $(nfsroot)
====== > setenv bootfile MPC5200/uImage
====== > setenv bootargs $(rootfs) $(ip) console=ttyPSC0
====== > saveenv

Prepare NFS Server

Edit the file /etc/exports:


Restart the NFS server with:

/etc/init.d/nfs restart

Prepare TFTP Server

mkdir /tftpboot
mkdir /tftpboot/MPC5200
chown nobody:nobody /tftpboot
emerge net-ftp/atftp

Add the line to /etc/conf.d/local.start

/usr/sbin/in.tftpd -v --daemon /tftpboot

Building Linux-kernel 2.6

Getting the kernel:

git clone linux-2.6-mpc52xx
cd linux-2.6-mpc52xx
git pull ide:mpc52xx_ide
git pull bestcomm:mpc52xx_bestcomm
cd ..
ln -s linux-2.6-mpc52xx linux

or use the denx archive: (not working yet)

git checkout -b private2.6.18 v2.6.18

You can found the kernel configuration config-mpc52xx.bz2 .
Compile the kernel:

cd linux-2.6-mpc52xx
export CROSS_COMPILE=ppc_6xx-
make ARCH=ppc lite5200_defconfig
make ARCH=ppc menuconfig
make ARCH=ppc EXTRAVERSION=-mpc52xx CROSS_COMPILE=ppc-linux- uImage

Install the kernel for booting via TFTP:

cp arch/ppc/boot/images/uImage /tftpboot/MPC5200

Install the kernel for booting from FLASH:

mkimage -n 'Linux PPC MPC5200 2.6' -A ppc -O linux -T kernel -C gzip -a 00000000 -e 00000000 \
        -d arch/ppc/boot/images/vmlinux.gz /tftpboot/MPC5200/vmlinux.img

You can change the installation pathes with the variable:


Building and installing the modules:

make ARCH=ppc EXTRAVERSION=-mpc52xx CROSS_COMPILE=ppc-linux- modules
make ARCH=ppc EXTRAVERSION=-mpc52xx CROSS_COMPILE=ppc-linux- INSTALL_MOD_PATH=/usr/local/eldk/ppc_6xx modules_install

Boot kernel with U-BOOT

To load kernel from tftp:

====== > tftp
====== > bootm

To write kernel to flash:

====== > tftpboot 100000 MPC5200/vmlinux.img
====== > erase FF100000 FF1FFFFF
====== > cp.b 100000 FF100000 $(filesize)
====== > bootm FF100000

To save the bootvaribles in flash:

====== > setenv bootcmd bootm FF100000
====== > saveenv
====== > reset

setenv bootargs root=/dev/ram0 console=ttyPSC0 rw panic=1

Boot kernel from flash: (need to test)

Here's an example assuming you have a kernel image at address
$loadaddr and the dtb at $ftaddr

dtc -b0 -Idts -Odtb -V16 lite5200.dts > lite5200.dtb

download lite5200.dtb to the system

====== > bootm $loadaddr - $fdtaddr

Add the -f flag to dtc to ignore the missing /chosen node error

Use the "-O dtb" flag to output a fdt blob

Oh, and like Kumar said, you need the -V 0x10 flag to generate the
correct blob version.
Oh, and, -V 0x10 is the default now with a current
top-of-git DTC too.  :-)

Installing busybox

Download busybox:

Writing kernel modules for 2.6

Create a directory:

cd /usr/local/eldk/ppc_6xx/usr/src
mkdir kernel_mini_mod
cd kernel_mini_mod

Create a file minimod.c:

#include <linux/version.h>
#include <linux/module.h>


int init_module(void)
   return 0;

void cleanup_module(void)

Create a Makefile:

ARCH		:=	ppc
CROSS_COMPILE	:=	ppc_6xx-
INSTALL		:=	install -c

KERNELVERSION	:=	2.6.16-mpc52xx-gc92bc8e3
ELDK_DIR	:=	/usr/local/eldk
KDIR		:=	$(ELDK_DIR)/ppc_6xx/lib/modules/$(KERNELVERSION)/build
INSTALLDIR	:=	$(ELDK_DIR)/ppc_6xx/lib/modules/$(KERNELVERSION)/kernel/drivers


obj-m	:=	minimod.o


PWD		:=	$(shell pwd)


	rm -f *.o *.ko *.mod.o *.mod.c .*.{cmd,flags}
	rm -rf config.status config.log autom4te*.cache .tmp_version

install: all
	mkdir -p $(INSTALLDIR)
	$(INSTALL_DATA) minimod.ko $(INSTALLDIR)/minimod.ko
	depmod -b $(ELDK_DIR)/ppc_6xx/ $(KERNELVERSION)

Now you can compile the module with make and install it with make install.



Check if the module i2c_mpc and i2c_dev loads successfully. I can see the following with dmesg:

i2c_adapter i2c-0: adapter [[MPC|adapter]] registered
i2c_adapter i2c-1: adapter [[MPC|adapter]] registered
i2c /dev entries driver
i2c-core: driver [[dev_driver]] registered
i2c-dev: adapter [[MPC|adapter]] registered as minor 0
i2c-dev: adapter [[MPC|adapter]] registered as minor 1

the command

cat /proc/devices

says that i2c use the major number 89. i2c-dev says it uses the minor number 0 and 1 so we create the devices in /dev:

mknod i2c-0 c 89 0
mknod i2c-1 c 89 1

To autoload modules in ELDK create file /etc/rc.modules on the NFS mount with:

modprobe i2c_mpc
modprobe i2c_dev

and make it executable with:

chmod +x rc.modules

Creating a Flash Disk

On Thu, 2007-08-23 at 06:36 -0700, Mirek23 wrote:

Could someone advice me how to configure Linux kernel to make use of the Flash (with above mentioned partitions and JFFS2.

The Denx U-boot and Linux Guide (DULG) will tell you how to configure the kernel for MTD devices and will give some good general information:

I do not know however which specific options to enable for MTD/JFFS2 since it has many sub options.

The following post has some relevant information for your setup:

I do not know also where to place: -the partition information (which I have mentioned above)

The partition information probably should go in a file that you create for your board located at “drivers/mtd/maps/<your_file>.c”

-the start (0xFF800000) and end (0xFFBFFFFF) physical location of my Flash memory.

I think this information just needs to be defined in your board’s .h file in u-boot. I don’t think you need to specify this in any linux config files.