Προς το περιεχόμενο

Cross Compile


capthookb

Προτεινόμενες αναρτήσεις

Δημοσ.

Κατέβασα τον GPL κώδικα για το router μου, (WAG354G).

Αυτό είναι βασισμένο στην πλατφόρμα της Texas Instruments AR7, και σύμφωνα και με την Linksys πρέπει να κάνω compile τον κώδικα για mipsel.

Ψάχνοντας βρήκα ένα script που αναλαμβάνει να κάνει compile το gcc και τα σχετικά για κάθε πλατφόρμα που θες.

 

Επειδή ουσιαστικά δεν έχω καταλάβει τι κάνω, αν θα μπορούσε κάποιος να μου ξεκαθαρίσει ένα δυο πράγματα.

 

Μετά το script έχω gcc για 2 πλατφόρμες στο pc μου, σωστά;

Μια για i386 που βρίσκεται στο /usr/bin

και μια για mipsel στο φάκελο που έφτιαξε το crosstool script στο /opt/crosstool/mipsel-unknown-linux-uclibc/gcc-3.3.3-uClibc-0.9.23/bin

Μάλιστα στον τελευταίο φάκελο βρίσκονται τα εκτελέσιμα με ονοματα όπως mipsel-unknown-linux-uclibc-gcc κτλ.

 

Το θέμα είναι τώρα πως να κάνω make τον κώδικα του router. Έχω τις εξής απορίες:

  • Πως θα χρησιμοποιήσω το gcc για την πλατφόρμα mipsel και όχι για ι386; Γίνεται αυτόματα κάτι τέτοιο εάν υπάρχουν στο $PATH και οι δυο παραπάνω κατάλογοι;
  • Αν γίνεται κάτι τέτοιο, θα πρέπει να μετονομάσω το mipsel-unknown-linux-uclibc-gcc σε σκέτο gcc;
  • Αλλιώς τι πρέπει να κάνω; Να βγάλω από το $PATH το /usr/bin; Να απεγκαταστήσω το gcc-i386;

Δημοσ.

  • Πως θα χρησιμοποιήσω το gcc για την πλατφόρμα mipsel και όχι για ι386; Γίνεται αυτόματα κάτι τέτοιο εάν υπάρχουν στο $PATH και οι δυο παραπάνω κατάλογοι;

Γενικά δίνεις ./configure --target=mipsel και το configure θα κοιτάξει για crosscompiler κλπ' date=' αρκεί αυτά να είναι στο path σου.

[*]Αν γίνεται κάτι τέτοιο, θα πρέπει να μετονομάσω το mipsel-unknown-linux-uclibc-gcc σε σκέτο gcc;

Όχι, σε καμία περίπτωση

[*]Αλλιώς τι πρέπει να κάνω; Να βγάλω από το $PATH το /usr/bin; Να απεγκαταστήσω το gcc-i386;

Όχι, βλέπε παραπάνω. Γενικά πάντως, για να σου κάνει τη ζωή πιο εύκολη, και αφού θα πας σε uClibc περιβάλλον, δοκίμασε το buildroot.

 

Για ό,τι άλλο χρειαστείς, εδώ είμαστε (πάντα, για τόσο ενδιαφέροντα θέματα :-) )

Δημοσ.

Το θέμα είναι πως δεν υπάρχουν καθόλου configure scripts στον κώδικα.:neutral:

Στο readme αναφέρει πως τρέχω το make.sh που περιέχει τα εξής.

>
cd router
make linux-clean
make linux-dep
make linux
make clean
make
make linux-modules
make install
make rom
make upgrade
cd ..

 

Επίσης λέει πως τα εργαλεία που χρειάζομαι για να κάνω compile είναι:

1)Montavista Linux Preview [αυτό τι κάνει; εξομοίωση της πλατφόρμας;] Δεν το έχω, αλλά διάβασα κάπου οτι δεν είναι απαραίτητο.

2)GNU binutils με target mipsel-linux

3)uClibc

4)GNU MP Library και το compile να έχει γίνει για mipsel.

 

Θα κοιτάξω και το Buildroot.

 

Άσχετο: Ένα σωρό errors βγάζει σε μερικά αρχεία κώδικα. Ήθελα να 'ξερα αν αυτό είναι που έχουν κάνει πραγματικά compile.... Ευκαιρία να φρεσκάρω τη C++ :)

Δημοσ.

Για αρχή δοκίμασε να κάνεις export CC=path-to-mipsel-gcc και δες τι γίνεται. Φοβάμαι πολύ ότι θα σκαλώσει στα binutils μετά...

 

Btw, μήπως το Makefile έχει πουθενά μεταβλητές για τον compiler και τα binutils που μπορείς να πειράξεις;

Δημοσ.

Nullscan δοκιμάζω το buildroot προς το παρόν. Μόλις ξαναδοκιμάσω compile θα γράψω τα errors. Απ'ότι θυμάμαι χτες μου έβγαζε λάθη συντακτικά π.χ η συνάρτηση ήταν

>
ret = websWrite(wp," 
       <td width=150><font face=Arial size=2> %s </font> </td>\n
       <td width=70><input type=checkbox name=sum%d value=1 ></td>\n
     </tr>\n",time_buf, i+1);

και έπρεπε να γίνει

>
ret = websWrite(wp," \
       <td width=150><font face=Arial size=2> %s </font> </td>\n\
       <td width=70><input type=checkbox name=sum%d value=1 ></td>\n\
     </tr>\n",time_buf, i+1);

για να συνεχίσει το compile.

 

Στο buildroot είδα οτι στις επιλογές είχε μια σειρά από kernels, ενώ στον κώδικα του router χρησιμοποιούν (linux-2.4.17-mvl21). Δε θα έπρεπε να χρησιμοποιήσω την ίδια έκδοση;

 

Επίσης, οι εκδόσεις των εργαλείων, gcc, binutils, κτλ μπορεί να είναι οποιεςδήποτε; π.χ οι τελευταίες;

Δημοσ.

Βρήκα και το Makefile που έχει μεταβλητές για Cross-compiling. Παραθέτω τις default ρυθμίσεις:

>
[b]...[/b]


#
# Paths
#

# Source bases
export PLATFORM LINUXDIR LIBDIR USRLIBDIR
export TOP := $(shell pwd)
export SRCBASE := $(shell (cd $(TOP)/.. && pwd -P))

#
# Cross-compile environment variables
#

# Build platform
export BUILD := i386-pc-linux-gnu
export HOSTCC := gcc

# uClibc wrapper
ifeq ($(CONFIG_UCLIBC),y)
export PLATFORM := $(PLATFORM)-uclibc
endif

ifeq ($(PLATFORM),mipsel)
#export CROSS_COMPILE := mipsel-linux-
export CROSS_COMPILE := mips_fp_le-
export CONFIGURE := ./configure mipsel-linux --build=$(BUILD)
export TOOLCHAIN := $(shell cd $(dir $(shell which $(CROSS_COMPILE)gcc))/../mipsel-linux && pwd -P)
endif

ifeq ($(PLATFORM),mipsel-uclibc)
export CROSS_COMPILE := mipsel-uclibc-
export CONFIGURE := ./configure mipsel-linux --build=$(BUILD)
export TOOLCHAIN := $(shell cd $(dir $(shell which $(CROSS_COMPILE)gcc))/.. && pwd -P)
endif


export CC := $(CROSS_COMPILE)gcc
export AR := $(CROSS_COMPILE)ar
export AS := $(CROSS_COMPILE)as
export LD := $(CROSS_COMPILE)ld
export NM := $(CROSS_COMPILE)nm
export RANLIB := $(CROSS_COMPILE)ranlib
export STRIP := $(CROSS_COMPILE)strip
export SIZE := $(CROSS_COMPILE)size

#
# Install and target directories
#

export PLATFORMDIR := $(TOP)/$(PLATFORM)
export INSTALLDIR := $(PLATFORMDIR)/install
export TARGETDIR := $(PLATFORMDIR)/target

#
# Configuration
#
[b]...[/b]

Δημοσ.

Όσον αφορά τις εκδόσεις των εργαλείων που θα χρησιμοποιήσεις για το cross compiling, εάν οι developers δεν λένε να χρησιμοποιήσεις κάποια συγκεκριμένη version λόγω π.χ. incompatibilities ή πιθανής αστάθειας, μπορείς να χρησιμοποιήσεις όποια version θέλεις, ούτως ή άλλως ο compiler λίγη σχέση έχει με το αν θα γίνει σωστά η διαδικασία. Αλλά για να είσαι και σίγουρος κάνε compile με gcc 3.x που είναι τεσταρισμένος χρόνια τώρα και αποδεδειγμένα σταθερός. Το ίδιο και με τα άλλα tools, κυνήγα να χρησιμοποιήσεις σταθερές και δοκιμασμένες εκδόσεις.

Δημοσ.

errors:

>../shared/ping_config.c:39: warning: no semicolon at end of struct or union
../shared/ping_config.c:53: error: conflicting types for `ping_start_flag'
../shared/broadcom.h:60: error: previous declaration of `ping_start_flag'

 

>
buildroot/build_mipsel/staging_dir/bin-ccache/../lib/gcc/mipsel-linux-uclibc/3.4.2/../../../../mipsel-linux-uclibc/bin/ld: ../ti_ap/wireless.o: Relocations in generic ELF (EM: 3)
../ti_ap/wireless.o: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
make[1]: *** [httpd] Error 1

 

Το τελευταίο είναι θέμα ρυθμίσεων;

Δημοσ.

Ουφ, δε μπορώ άλλο, τα παρατάω (για σήμερα). Δοκίμασα ότι μπορούσα να φανταστώ αλλά δεν έβγαλα άκρη. Τα συντακτικά λάθη τα διόρθωσα. Το τελευταίο με τίποτα. Με έπιασε πονοκέφαλος.....

Τελικά το Montavista Preview Kit, γνωρίζει κανείς τι ακριβώς είναι και αν το χρειάζομαι;

 

(Κανένα howto για να φτιάξω καλώδιο για serial console για το router ξέρετε;)

Δημοσ.

Με τι compiler τα κάνει compile το buildroot; Κάτι μου λέει ότι είναι gcc-4, o οποίος είναι πιο αυστηρός όσον αφορά τη σύνταξη.

 

Κοίτα, δεν ξέρω κατά πόσον είναι κατάλληλο το buildroot για το router σου. Αν έχει κάποιο proprietary part (βλ. broadcom chip) ενδεχομένως δε θα μπορείς να ελέγξεις το ράδιό του. Επίσης μπορεί να απαιτεί όντως Montavista Linux, το οποίο νομίζω ότι έχει κάποια real-time enhancements. Δες καλά το documentation τι λέει.

 

Όσο για serial console, χρειάζεσαι απλά ένα null-modem cable και το minicom :-)

Δημοσ.

Θα με κάψεις με το null modem:-D

Most OpenWrt compatible devices have one or two serial ports on the router's PCB (printed circuit board.) The problem is they operate on 3.3v' date=' which means [b']they will get fried if you connect them to your computer's serial port[/b], which operates at 12v. Luckily, this is more common a thing than you would think, and as such, Maxim (no, not the magazine) has made a few handy little ICs for us to use. The best (IMHO) is the MAX233, or more specifically, the MAX233a, which has a higher speed capacity and uses less power. This guide will tell you how to solder everything together to get a pc-compatible serial port on your OpenWrt router.

Και όντως τόσο είναι, το μέτρησα γύρω στα 3.28Volt

 

http://wiki.openwrt.org/OpenWrtDocs/Customizing#head-4c28a2c6c9a7bb30e81e2e13a9740542ae64cf8d

Δημοσ.
Θα με κάψεις με το null modem:-D

 

Και όντως τόσο είναι' date=' το μέτρησα γύρω στα 3.28Volt[/quote']

Ε, καλά, αυτός ο router δε θα είχε σειριακή έτοιμη για να βάλεις null-modem πάνω :-P.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...