S3C2440 - EM2440/MINI2440

MINI2440

 Konfiguracja Linux'a dla modułuEM2440/MINI2440 z procesorem S3C2440.

!!! Pamiętaj ta procedura zadziałała w moim przypadku, ale jeśli zamieni twojego kota w łosia nie wiń mnie za to .
Używasz informacji z tej strony na własną odpowiedzialność. !!!

Najpierw musimy pobrać źródła jądra Linux'a, źródła Uboot i toolchain do kompilacji.
Otwórz okno terminala i wpisz :

$ cd /opt
$ mkdir mini2440
$ cd mini2440
$ mkdir uboot
$ mkdir kernel-src
$ cd kernel-src
$ git clone git://repo.or.cz/linux-2.6/mini2440.git
$ cd ..
$ cd uboot
$ git clone git://repo.or.cz/u-boot-openmoko/mini2440.git
$ cd ..
$ wget http://www.codesourcery.com/sgpp/lite/arm/portal/package3696/public/arm-...
$ tar xjf arm-2008q3-72-arm-none-linux-gnueabi-i686-pc-linuxgnu.tar.bz2

Utwórz katalog serwera TFTP

$ mkdir /tftpboot

Skompiluj Uboot i jądro Linux'a

$ export CROSS_COMPILE=arm-none-linux-gnueabi-
$ export CC=${CROSS_COMPILE}"gcc -march=armv4t -mtune=arm920t"
$ export PATH=$PATH:/opt/mini2440/arm-2008q3/bin
$ export ARCH=arm

$ cd uboot/mini2440
$ make mini2440_config
$ cd /opt/mini2440
$ cd /opt/mini2440/kernel-src/mini2440
$ make  mrproper
$ cp /opt/mini2440/kernel-src/mini2440/arch/arm/configs/mini2440_defconfig /opt/mini2440/kernel- 
   src/mini2440/.config
$ make   menuconfig

W tym momencie powinien pojawić się ekran konfiguracyjny Linux'a.
Wykorzystując configurator możemy zmodyfikować właściwości jądra.

 

 

Kompilujemy jądro Linuxa

$ make -j4
$ make ARCH=arm  -j4 modules modules_install

Konwertujemy obraz jądra zImage do uImage i wgrywamy do katalogu serwera TFTP .

$ cd /opt/mini2440
$ ./uboot/mini2440/tools/mkimage -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008000  
   -d kernel-src/mini2440/arch/arm/boot/zImage /tftpboot/uImage

Pobierz skrypt kompilujący jądro i uboot.
Pobierz plik konfiguracyjny uboot.

Teraz możemy wgrać obraz jądra Linux'a do modułu EM2440/MINI2440.


 
OK. Mamy skompilowane jądro Linux'a. Chcemy wgrać je teraz do naszego modułu.
Potrzebujemy kabel RS232 do komunikacji z układem, oraz minicom i serwer tftp.

Schemat kabla do połączenia portu RS232 w komputerze i CS-E9302

     DCD 1 <-----------------------> 1 DCD
     RD  2 <-----------------------> 2 RD 
     TD  3 <-----------------------> 3 TD 
     DTR 4 <-----------------------> 4 DTR
     SG  5 <-----------------------> 5 SG 
     DSR 6 <-----------------------> 6 DSR
     RTS 7 <-----------------------> 7 RTS
     CTS 8 <-----------------------> 8 CTS

Musimy zainstalować server TFTP - moduł pobierze obraz jądra z serwera .


 

   Instalacja  serwera tftp w Debian'ie                                                            

Otwórz okno terminala i wpisz

$aptitude install tftpd
$aptitude install tftp
$mkdir /tftpboot
$chmod 777 /tftpboot

Zmień lokalizację foldera serwera TFTP w pliku /etc/inetd.conf z /srv/tftp to /tftpboot

tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /tftpboot

Zrestartuj  tftpd.
$cd /etc/init.d
$./openbsd-inetd restart

Dla bezpieczeństwa możesz zmienić ustawienia /etc/hosts.allow i /etc/hosts.deny .

 

Teraz musimy zainstalować Minicom program.
Minicom to tekstowy program do obsługi modemu i emulator teminala dla systemów typu Unix.

Aby zainstalować Minicom otwórz okno terminala i wpisz
$aptitude install minicom

Teraz musimy skonfigurować Minicoma. Otwórz okno terminala i wpisz

$minicom

Wciśnij CTRL+z później a . Pojawi się okno konfiguracyjne.Wciśnij p aby skonfigurować port comm i zmień ustawienia na :

   Speed : 115200
   Parity : None
   Data : 8
   Stopbits :1

 

Podłącz EM2440/MINI2440 do portu RS232 komputera i zasil układ.
W oknie programu Minicom pojawi się :

U-Boot 1.3.2-mini2440 (Nov 25 2009 - 11:22:39)          
I2C: ready                                              
DRAM: 64 MB                                             
Flash: 2 MB                                             
NAND: 64 MiB                                            
Found Environment offset in OOB..                       
USB: S3C2410 USB Deviced                                
In: serial                                              
Out: serial                                             
Err: serial                                             
MAC: 08:08:11:18:12:27                                  
Hit any key to stop autoboot: 0                         

Wciśnij dowolny klawisz aby zatrzymać skrypt
Skonfigurujemy moduł dla naszych potrzeb. W oknie minicoma wpisz :

MINI2440 # setenv serverip 192.168.1.100
MINI2440 # setenv ipaddr 192.168.1.10
MINI2440 # setenv bootfile uImage
MINI2440 # setenv loadaddr 0x32000000

Server ip to adres IP anaszego komputera z serwerem TFTP , ipaddr to statyczny adres naszego modułu e board.
Zapisz konfigurację do pamięci flash :

MINI2440 # saveenv

Teraz załadujemy obraz jadra Linux'a (uImage) z serwera TFTPr :

MINI2440 # tftp

Uruchamiamy system z pamięci modułu :

MINI2440 # bootm

Jeżeli wszystko przebiegło pomyślnie w oknie minicoma zobaczymy tekst podobny do tego  :

## Booting kernel from Legacy Image at 32000000 ...
Image Name:
Created: 2009-12-28 18:01:54 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
.
.
.
1f01 128 mtdblock1 (driver?)
1f02 5120 mtdblock2 (driver?)
1f03 60032 mtdblock3 (driver?)
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
Na końcu pojawi się komunikat.

Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)              

Oznacza to, że linux nie znalazł systemu plików root.Musimy teraz utworzyć system plików root

Utworzymy teraz system plików arm emdebian dla modułu CS-E9302 z wykorzystaniem debootstrap.

  Debootstrap część 1                                                                          

Aby utworzyć podstawowy system plików emdebian otwórz okno terminala i wpisz :
$mkdir debootstrap
$cd debootstrap
$sudo debootstrap --arch=armel --foreign lenny grip/ http://www.emdebian.org/grip/
 
$cd grip
$tar jcf ../emdebian-grip.tar.bz2 .

  Przygotowanie pendrive'a                                                  
Ja używam karty  micro SD z czytnikiem USB , ale można użyć dowolnej karty SD 1GB -4GB.
Podłącz kartę SD do komputera. Możesz sprawdzić pod jaką nazwą zmapowane jest urządzenie komendą  :
$fdisk -l
W przykładzie wykorzystana jest urządzenie /dev/sdd, musisz użyć tej nazwy pod którą zmapowny jest twoja karta SD, jeżeli użyjesz innej możesz uszkodzić swojego Linux'a.
Skonfigurujemy system ext3 karcie SD. Otwórz okno terminala i wpisz komendy jak poniżej.

 

modbus-debian:/home/andrzej# fdisk /dev/sdd

Command (m for help): o
Building a new DOS disklabel with disk identifier 0xa5017fba.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
Command (m for help): p
Disk /dev/sdd: 990 MB, 990904320 bytes
32 heads, 63 sectors/track, 960 cylinders
Units = cylinders of 2016 * 512 = 1032192 bytes
Disk identifier: 0xa5017fba
Device Boot Start End Blocks Id System
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-960, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-960, default 960):
Using default value 960
Command (m for help): p
Disk /dev/sdd: 990 MB, 990904320 bytes
32 heads, 63 sectors/track, 960 cylinders
Units = cylinders of 2016 * 512 = 1032192 bytes
Disk identifier: 0xa5017fba
Device Boot Start End Blocks Id System
/dev/sdd1 1 960 967648+ 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
modbus-debian:/home/andrzej#
modbus-debian:/home/andrzej# mkfs.ext3 /dev/sdd1
mke2fs 1.41.3 (12-Oct-2008)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
60544 inodes, 241912 blocks
12095 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=251658240
8 block groups
32768 blocks per group, 32768 fragments per group
7568 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 32 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override
.
Montowanie nowej partycji

$sudo mkdir /mnt/arm
$sudo mount /dev/sdd1 /mnt/arm

  Instalowanie debootstrap                                                                    

Aby skopiować system plików Debiana na naszą partycję ext3 wpisz
$cd /mnt/arm
$sudo tar zxf /opt/debootstrap/emdebian-grip.tar.bz2
$sync
$mkdir boot

  Kończenie fazy 1                                                                             

Musimy teraz skonfigurować nasz system plików.

$cd /mnt/arm
$echo "proc /proc proc none 0 0" >>etc/fstab
$echo "EM2440" >etc/hostname
$mknod dev/console c 5 1
$mknod dev/ttySAC0 c 204 64
$echo 'http://www.emdebian.org/grip/ lenny main' >>etc/apt/sources.list
$cp /tftpboot/uImage /mnt/arm/boot

Teraz możemy uruchomić nasz system.
Podłącz kartę SD do slotu MMC w module EM2440/MINI2440, zrestartuj .
W oknie minicoma wpisz :

MINI2440 # setenv  "bootcmd=mmcinit;ext2load mmc 1:1 0x32000000 /boot/uImage;bootm"
MINI2440 # setenv "bootargs=console=ttySAC0,115200 noinitrd root=/dev/mmcblk0p1 ip=dhcp init=/bin/sh rootwait=5"
MINI2440 # seveenv

Na końcu powinien wyświetlić się prompt - sh-3.2#

Druga faza instalacji debootstrap

Aby zakończyć instalacje systemu debian wpisz :

sh-3.2# mount /proc /proc -t proc
sh-3.2# export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
sh-3.2# /debootstrap/debootstrap --second-stage

Zabierze to trochę czasu, więc uzbrój się w cierpliwość.

Uwaga-  udev może wygenerować ostrzeżenia, w takim przypadku reinstaluj dev poleceniem :

sh-3.2# dpkg -i /var/cache/apt/archives/udev_0.125-7em1_armel.deb

  Końcowa faza instalacji                                                              

Wpisz następujące polecenia

sh-3.2# echo ttySAC00 >>etc/securetty
sh-3.2# printf "T0:123:respawn:/sbin/getty 115200 ttySAC0\n" >>etc/inittab

konfiguracja  DHCP
sh-3.2# printf "auto eth0\niface eth0 inet dhcp\n" >>etc/network/interfaces

Zrestartuj moduł EM2440/MINI2440 i zatrzymaj skrypt uboot.
MINI2440 # setenv "bootargs=console=ttySAC0,115200 noinitrd root=/dev/mmcblk0p1 ip=dhcp rootwait=5"
MINI2440 # seveenv

Zrestartuj EM244/MINI2440

Zaloguj się do systemu jako root i ustaw hasło.
Uaktualnij system:

EM2440:~# apt-get update
EM2440:~# apt-get upgrade

System Linux dla modułu EM2440/MINI2440 jest gotowy do działania.