Difference between revisions of "MINI2440 embedded projects"

From Kenneth Noyens
Jump to: navigation, search
(Upload the file)
Line 165: Line 165:
 
</pre>
 
</pre>
 
Typ "dhcp" in the uboot console of the mini2440 board, normaly you should see the kernel loading.
 
Typ "dhcp" in the uboot console of the mini2440 board, normaly you should see the kernel loading.
 +
 +
== Filesystem ==
 +
<pre>
 +
cd ~/mini2240
 +
mkdir filesystem
 +
cd filesystem
 +
debootstrap --arch=arm --foreign lenny grip/ http://www.emdebian.org/grip/
 +
</pre>
 +
=== NFS server ===
 +
<pre>
 +
apt-get install nfs-kernel-server
 +
</pre>
 +
edit /etc/exports:
 +
<pre>
 +
 +
</pre>

Revision as of 18:16, 14 January 2010

This page is currently under constructions, I'm doing this all over with the new versions of all the software

Toolchain

First of all, we need a toolchain containing some command-line tools for our ARM platform:

  • C and C++ compilers
  • assembler
  • linker
  • C and C++ runtime libraries
  • GNU debugger


I'm going to use the Sourcery G++ Lite ARM that is available for free.
You can get the last version from http://www.codesourcery.com/sgpp/lite/arm/portal/subscription3053

Downloading and unpacking

mkdir mini2440
cd mini2440
wget http://www.codesourcery.com/sgpp/lite/arm/portal/package5353/public/arm-none-eabi/arm-2009q3-68-arm-none-eabi-i686-pc-linux-gnu.tar.bz2
tar jxf arm-2009q3-68-arm-none-eabi-i686-pc-linux-gnu.tar.bz2
export PATH=/home/ttts/mini2440/arm-2008q3/bin:$PATH

The last line will add the bin directory the $PATH variable so that we can use the commands in that directory like normal commands.
Every time you open a terminal, you have to enter that last line. (or you can add it to your .bashrc file)

Uboot

Download uboot for mini2440

mkdir uboot
cd uboot
git clone git://repo.or.cz/u-boot-openmoko/mini2440.git

Compile uboot

export CROSS_COMPILE=arm-none-eabi-
cd mini2440
make mini2440_config
make all

When I tried to compile uboot I got an error about some weak declarations in lib_arm/board.c and common/main.c
I'm using the 4.4.x gcc, and the 4.3.x does not cause that error. You can downgrade your gcc or remove the "weak" definitions in those files like I did

Compile upload tool

cd ~/mini2440
wget http://mini2440.googlecode.com/files/s3c2410_boot_usb-20060807.tar.bz2
tar jxf s3c2410_boot_usb-20060807.tar.bz2
cd s3c2410_boot_usb
make

When make fails because he can not find the file "usb.h" install the ubuntu/debian package libusb-dev.

Upload the file

Open a terminal to the serial connection of the mini2440 board.
Put the NOR switch to NOR and power the board.
Now you get a "FriendlyARM BIOS"/supervivi menu, choose q to go to the supervivi shell.
In this shell you typ "load flash 0 232188 u"
Where "232188" is the size of the uboot.bin file you are going to send. (ls -la mini2240/uboot/mini2440 | grep u-boot.bin)
Send the file from your linux terminal:

./s3c2410_boot_usb ../uboot/u-boot.bin

Sometimes the upload tool says that the upload is failed, but don't trust it :P
The upload of uboot didn't work for me at first but just keep trying

Kernel

Download kernel

cd ~/mini2240
mkdir kernel
cd kernel
git clone git://repo.or.cz/linux-2.6/mini2440.git
cd mini2440

Config kernel

mkdir ../kernel-bin
CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm make O=../kernel-bin/ mini2440_defconfig
CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm make O=../kernel-bin/ menuconfig

After the last command you will get a menu where you can select the kernel options you want.

I had a problem compiling my kernel in the next stap and found this solution:
Mail-archive.com solution
Quote from the website above:
Try this:
in Kernel config
-->"User Space Binary formats"
-->un-check "Kernel support for a.out and ECOFF binaries"

Compile kernel

CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm make O=../kernel-bin/

Make kernel image

Because uboot expect some headers you have to add some headers to your fresh compiled kernel.

cd ~/mini2240
./uboot/mini2440/tools/mkimage -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008000 -d kernel/kernel-bin/arch/arm/boot/zImage linux-image

A => Architecture
O => Operating system
T => image typ
C => compression
a => load adres in hex
e => entry point
d => image data

Load the kernel in the board

All command are entered as root

DHCP server

Install DHCP server:

apt-get install dhcp3-server

Put your pc on a static IP, edit /etc/network/interfaces

auto eth1
iface eth1 inet static
     address 192.168.0.2
     network 192.168.0.0
     netmask 255.255.255.0
     broadcast 192.168.0.255
     gateway 192.168.0.1

I use a special setup with a subnet behind NAT
eth0 is connected directly to my lan, eth1 is connected to a router where the mini2440 is connected
You don't want to run a DHCP server on a LAN where there is already a DHCP server!!
Open /etc/dhcp3/dhcd.conf with your favorite editor and add the folow lines:

subnet 192.168.0.0 netmask 255.255.255.0
{
        range 192.168.0.10 192.168.0.240;
        option routers 192.168.0.1;
        option domain-name-servers 8.8.8.8;
}
host mini2440    
{
        filename "linux";
        server-name "192.168.0.2";
        next-server 192.168.0.2;
        hardware ethernet 08:08:11:18:12:27;
        fixed-address 192.168.0.9;
}

Change the hardware address to the MAC address of your board
If you don't known the MAC address of your board, you can find this in the uboot console during boot
You can change the IP addresses to fit your needs.
8.8.8.8 is the open DNS server from google
192.168.0.1 => router
192.168.0.2 => debian server
192.168.0.9 => mini2440

Reboot DHCP server:

invoke-rc.d dhcp3-server restart

TFTP server

Install tftp server and client (client for testing):

apt-get install tftpd tftp
/etc/init.d/openbsd-inetd restart

Copy the linux-image to /srv/tftp/linux:

cp /home/ttts/mini2440/linux-image /srv/tftp/linux

Typ "dhcp" in the uboot console of the mini2440 board, normaly you should see the kernel loading.

Filesystem

cd ~/mini2240
mkdir filesystem
cd filesystem
debootstrap --arch=arm --foreign lenny grip/ http://www.emdebian.org/grip/

NFS server

apt-get install nfs-kernel-server

edit /etc/exports: