» »

OpenWRT cross-compile programa

OpenWRT cross-compile programa

PcPostar ::

Zivjo!

Iščem pomoč pri prevajanju programa za OpeWRT.
Ne rabim naredit package, ampak navaden binary program. Imam c_source_koda.c, ki bi jo rad skompjalal za router. To je en program, ki mi skrbi za enko komunikacijo preko serijskega porta na mojem routerju.

Na routerju imam nameščen ATTITUDE ADJUSTMENT (12.09-rc1, r34185).
http://downloads.openwrt.org/attitude_a...
Z zgornjega linka sem prenesel FW za router: openwrt-ar71xx-generic-tl-wr741nd-v1-jffs2-sysupgrade.bin
In pa Toolchain za prevajanje: OpenWrt-Toolchain-ar71xx-for-mips_r2-gcc-4.6-linaro_uClibc-0.9.33.2.tar.bz2


Ali je pomembno, kam dam moj source.c in kako to kompajlam...
A ni to tako, da samo
poženem mips-openwrt-linux-uclibc-gcc
, ki je pač znotraj toolchain-a?
______________
VKLOP!!!

techfreak :) ::

Sam sem se kar nekaj časa zafrkaval s tem in na koncu ugotovil da tole deluje brez težav:
1.) download trunk verzije OpenWRT (tudi toolchain bi verjetno moral zadostovati, ampak sem imel težave)
2.) nastavitev z makeconfig
3.) make V=99
4.) izdelava package-a (osebno ga ne potrebujem, OpenWRT pa ga ima rad)
Struktura datotek:
/trunk/package/your_package <- mapa paketa
/trunk/package/your_package/Makefile (zamenjaj heating_controller z your_package):
#
# Copyright (C) 2006-2010 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#

include $(TOPDIR)/rules.mk

PKG_NAME:=heating_controller
PKG_VERSION:=1
PKG_RELEASE:=1

PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)

PKG_FIXUP:=libtool
PKG_INSTALL:=1

include $(INCLUDE_DIR)/package.mk

define Package/heating_controller
  SECTION:=net
  CATEGORY:=Network
  TITLE:=heating_controller
  #DEPENDS:= +liblua
endef

define Package/heating_controller/description
  heating_controller hello world program
endef

#define Package/heating_controller/conffiles
#/etc/heating_controller.conf
#endef

##new from nvram example
define Build/Prepare
	mkdir -p $(PKG_BUILD_DIR)
	$(CP) ./src/* $(PKG_BUILD_DIR)/
endef

# uses GNU configure

define Package/heating_controller/install
	$(INSTALL_DIR) $(1)/usr/sbin
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/heating_controller $(1)/usr/sbin/
endef

$(eval $(call BuildPackage,heating_controller))

/trunk/package/your_package/src <-- mapa s kodo
/trunk/package/your_package/src/Makefile
LDLIBS =  -lpthread 

hello:
	#OPENWRT
	$(CXX) $(LDFLAGS) *.cpp $(LDLIBS) -o heating_controller


# remove object files and executable when user executes "make clean"
clean:
	rm *.o heating_controller

/trunk/package/your_package/src/whatever.cpp <- tvoja koda

5.) Ob klicu
make package/your_package/build V=99

bi se ti moral package prevesti in izvedljiva datoteka je na voljo v /trunk/build_dir/target-mips_r2_uClibc-0.9.33.2/your_package.

Načeloma pa ta postopek prevaja kodo na naslednji način:
mips-openwrt-linux-uclibc-g++ -L/home/dejan/openwrt/trunk/staging_dir/target-mips_r2_uClibc-0.9.33.2/usr/lib -L/home/dejan/openwrt/trunk/staging_dir/target-mips_r2_uClibc-0.9.33.2/lib -L/home/dejan/openwrt/trunk/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/usr/lib -L/home/dejan/openwrt/trunk/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/lib *.cpp -lpthread -o heating_controller

Zgodovina sprememb…

PcPostar ::

@techfreak :) Ful hvala za odgovor, tale simpel cross-compile me je res ubil, skor.
Zdaj sem po 2h dneh le naštudiral, kako se to najbl simpel naredi in bi rad z ostalimi delil:

Recimo, da bi radi prevedeli "koda.c" v "program".
Prenesete si lahko samo Toolchain od pripadajočega openwrt-ja. Ne potrebujete celotnega sourcekoda.

Potem v terminalu pozenete ukaz, ki pove, kam ste skopirali Toolchain:
export STAGING_DIR=/home/jordan/wr741nd/OpenWrt-Toolchain-ar71xx-for-mips_r2-gcc-4.6-linaro_uClibc-0.9.33.2


Za prevajanje (compile) potem poženete tole:
/home/jordan/wr741nd/OpenWrt-Toolchain-ar71xx-for-mips_r2-gcc-4.6-linaro_uClibc-0.9.33.2/bin/mips-openwrt-linux-gcc koda.c -o output_file_name

Kjer pac ustrezno spremenite poti in imena kode in ime output-a.

Ja, za compile uporabljam linux.
Ce pa vas zanimajo podorobnosti, pa vprašajte.
Sam sem si s tem cross-compile-om razbijal glavo kr neki časa.
Aja, pa še to - nikakor ne delajte nobenega compajla kot root.
______________
VKLOP!!!


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

problem innbox-router-udpxy?

Oddelek: Omrežja in internet
484760 (3962) Daniel
»

Resna ranljivost v GNU C knjižnici

Oddelek: Novice / Varnost
3313807 (10617) Verni
»

Crosscompiling Gnuradia za RPi

Oddelek: Operacijski sistemi
141571 (1417) poweroff
»

Linux za MIPS

Oddelek: Operacijski sistemi
81338 (1195) čuhalev
»

Šest velikanov ustanovilo Linaro za pomoč Linuxu

Oddelek: Novice / Nakupi / združitve / propadi
106132 (3946) Icematxyz

Več podobnih tem