OLIMEX CS-E9302

OLIMEX CS-E9302

Kompilacja jądra Linux'a dla modułu OLIMEX CS-E9302

!!! 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ść. !!!

 

Kompilacja przeprowadzana jest pod systemem Linux.

Na początku musimy pobrać żródła jądra Linux'a (linux-2.6.24.7.tar.gz) z
http://www.kernel.org/pub/linux/kernel/v2.6/
i patch dla modułu z
http://dev.ivanow.eu/projects/cs-e9302

W terminalu Linuxa wpisz:

$ mkdir EP9302
$ cd EP9302
$ wget
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.24.7.tar.gz
$ wget http://dev.ivanov.eu/projects/cs-e9302/linux-2.6.24-rc8_ep93xx_mmc.patch.gz
$ tar -zxf linux-2.6.24.7.tar.gz
$ cd linux-2.6.24.7
$ zcat ../linux-2.6.24-rc8_ep93xx_mmc.patch.gz | patch -p1 $ cp cs-e9302_kernel_config .config

Jako cross compilatora użyjemy zestawu ELDK dla procesorów ARM.
Zestaw ELDK dla ARM ver 4.2 można pobrać z ftp://ftp.denx.de/pub/eldk/4.2/arm-linux-x86/
Zainstaluj ELDK np. w folderzez /opt/ELDK

Otwórz plik Makefile z folderu linux-2.6.24.7 i zamień

ARCH ?= $(SUBARCH) na ARCH ?= arm
i
CROSS_COMPILE ?= na CROSS_COMPILE = arm-linux-

Możemy przystąpić do konfiguracji i kompilacji jądra.
Dobrze jest stworzyć skrypt który ustawi zmienne środowiskowe i wyczyści poprzednie kompilacje.
Przykładowy skrypt :

#!/bin/bash

#set the environment
export CROSS_COMPILE=arm-linux-
export PATH=/opt/eldk/usr/bin:/opt/eldk/bin:$PATH
export ARCH=arm

cd linux-2.6.24.7

#clean the previous compilation
make mrproper

#copy the config for CS9302
cp cs-e9302_kernel_config .config

#run the configuration
make menuconfig

#make the kernel
make

Zapisz ten skrypt jako make-kernel.sh w katalogu EP9302.
Uruchom skrypt z terminala (./make-kernel.sh), po chwili pokaże się okno konfiguracyjne jądra Linux'a.

Używając tego konfiguratora możesz zmieniać właściwości jądra. Np. możemy dodać obsługę serwera NFS

 

Po pomyślnej kompilacji otrzymamy plik zImage (obraz jądra Linux'a ) w katalogu "/linux-2.6.247/arch/arm/boot"

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

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

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

  Jak zainstalować serwerl 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 : 57600
Parity : None
Data : 8
Stopbits :1

 

 

Podłącz EC-S9302 do portu RS232 komputera i zasil układ.
W oknie programu Minicom pojawi się :

+Ethernet eth0: MAC address 00:00:00:00:54:33                       
IP: 192.168.1.10/255.255.255.0, Gateway: 192.168.1.1                
Default server: 192.168.1.100, DNS server IP: 208.67.222.222        
RedBoot(tm) bootstrap and debug environment [ROMRAM]                
Non-certified release, version v2_0 - built 08:14:43, Aug 22 2006   
Platform: Cirrus Logic EDB9302 Board (ARM920T) Rev A                
Copyright (C) 2000, 2001, 2002, Red Hat, Inc.                       
RAM: 0x00000000-0x02000000, 0x00041e68-0x01fdd000 available         
FLASH: 0x60000000 - 0x61000000, 128 blocks of 0x00020000 bytes each.
== Executing boot script in 5.000 seconds - enter ^C to abort      

 

Zatrzymaj wykonywanie się skryptu wciskając CTR-C.
Wpisz poniższą komendę aby skonfigurować parametry CS-E9302 :

RedBoot> fconfig

Ustaw zmienne dla twojego systemu

>> fis load zImage                                                
>> exec -c "console=ttyAM root=dev/sda1 rootdelay=5"              
>>                                                                
Boot script timeout (1000ms resolution): 5                        
Use BOOTP for network configuration: false                        
Gateway IP address: 192.168.1.1                                   
Local IP address: 192.168.1.10                                    
Local IP address mask: 255.255.255.0                              
Default server IP address: 192.168.1.100                          
DNS server IP address: 208.67.222.222                             
Set eth0 network hardware address [MAC]: true                     
eth0 network hardware address [MAC]: 0x00:0x00:0x00:0x00:0x54:0x33
GDB connection port: 9000                                         
Force console for special debug messages: false                   
Network debug at boot time: false                                 
Update RedBoot non-volatile configuration - continue (y/n)?       

Gdzie :

Boot script - wpisz tutaj parametry startowe
fis load zImage
exec -c "console=ttyAM root=dev/sda1 rootdelay=5"
skrypt startowy pobierze obraz jądra z pamięci flash, ustawi port comm jako konsole Linux'a console, i podłaczy pendrive dołączony do portu USB 1 jako root system file.
Boot script timeout 5 po 5s - RedBoot uruchomi skrypt
Use BOOTP for network configuration - Boot używa protokołu BOOTP
Gateway IP address - adres gateway w twojej sieci
Local IP address - Statyczny adres IP modułu CS-E9302 w twojej sieci
Local IP address mask - mask adres w twojej sieci
Default server IP address - adres IP twojego komputera w z serwerem TFTP
DNS server IP address - adres serwera DNS
eth0 network hardware address - adres MAC
GDB connection port - nr portu serwera GDB
Force console for special debug messages - uruchom konsole z komunikatami do debugowania
Network debug at boot time - debugowanie po sieci

Uruchomienie jądra Linuxa

Skopiuj obraz jądra (zImage) z /linux-2.6.247/arch/arm/boot" do /tftpboot.
Podłącz CS-E9302 do sieci LAN
Wprowadź komendę ładującą zImage (minicom)

RedBoot> load -r -v -b 0x80000 zImage

Pojawi się wirujący znak "/" w lewym rogu okna minicom . RedBoot pobiera zImage z serwera TFTP.

Startujemy Linuxa wpisując komendę
RedBoot> exec -c "console=ttyAM root=/dev/sda1 rootdelay=5"

Jeżeli szystko jest w porządku w oknie programu minicom powinno sie pojawić :

+Uncompressing Linux.......................
done, booting the kernel.
Linux version 2.6.24.7 (root@modbus-debian) (gcc version 4.2.2) #1 PREEMPT Thu Dec 24 16:18:30 CET 2009
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
Machine: Cirrus Logic EDB9302 Evaluation Board
.                                             
.                                             
VFS: Cannot open root device "sda1" or unknown-block(2,0)                      
Please append a correct "root=" boot option; here are the available partitions:
1f00 16384 mtdblock0 (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=arm --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 (umożliwa to także podłaczenie systemu plików poprzez złącze MMC), ale można użyć dowolnego pendrive'a 1GB -4GB.
Podłącz pendrive'a 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 twój pendrive, jeżeli uzyjesz innej możesz uszkodzić swojego Linux'a.

Skonfigurujemy system ext3 na pendrive'ie. 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

  Kończenie fazy 1                                                                                                      

Musimy teraz skonfigurować nasz system plików.

$cd /mnt/arm
$echo "proc /proc proc none 0 0" >>etc/fstab
$echo "EP9302" >etc/hostname
$mknod dev/console c 5 1
$mknod dev/ttyAM0 c 204 16

$echo 'http://www.emdebian.org/grip/ lenny main' >>etc/apt/sources.list

Teraz możemy uruchomić nasz system.
Podłącz pendrive do portu USB1 w CS-E9302 .
W oknie minicoma wpisz :

RedBoot> load -r -v -b 0x80000 zImage
RedBoot> exec -c "console=ttyAM root=/dev/sda1 init=/bin/sh rootdelay=5"

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 reinstalu dev poleceniem :

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

  Końcowa faza instalacji                                                                                                         

Wpisz następujące polecenia:

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

konfiguracja DHCP

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

Zrestartuj CS-E9302 , zatrzymaj skrypt RedBoot script i wpisz
RedBoot> fis load zImage
RedBoot> exec -c "console=ttyAM root=dev/sda1 rootdelay=5"

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

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

Jeżeli jądro jest stabilne,możemy wgrać zImage do pamięci Flash aby system startował automatycznie.

Zrestartuj CS-E9302, zatrzymajskrypt RedBoot i wpisz polecenia

RedBoot> fis delete zImage
RedBoot> load -r -v -b 0x80000 zImage
RedBoot> fis create -b 0x80000 -l 0xXXXXXX zImage

,gdzie 0xXXXXX to wielkość pliku zImage w bajtach.

System Linux dla modułu CS-E9302 jest gotowy do działania.