Kompilowanie pakietów z użyciem SDK

Początek

Na początek wyjaśnijmy jedna kwestie. Opis przedstawiony poniżej to jedynie wstęp do obszernej wiedzy jaką jest kompilowanie własnych pakietów w środowisku OpenWrt, ale i nie tylko. Podobnie to wygląda w innych systemach Linux Embedded. Kompilowanie własnych paczek wymaga troche umiejetności programowania w C oraz ogólnej dobre znajmości Linuxa.

Zanim zaczniesz kompilować Swój Pierwszy Pakiet zainstaluj niezbędne paczki na swoim komputerze takie jak opisano na stronie o kompilowaniu z SVN.

Kompilowanie z użyciem SDK

W celu kompilowania pakietów na Kamikaze 7.09 pobieramy odpowiednie SDK dla docelowej architektury. Plik nazywa się OpenWrt-SDK-<architektura>-for-Linux-i686.tar.bz2 i znajduje się w folderach wspieranych architektur przez Kamikaze 7.09, link. Istnieje również wersja dla x86_64.

W przypadku Kamikaze 8.09.1 oraz Backfire, należy sobie samemu takie SDK stworzyć. W tym celu należy pobrać kod źródłowy z svn/git wg. opisu - kompilacja_svn i zaznaczyć w „menu makeconfig” opcję „Build the OpenWrt SDK”. Następnie wydać standardowe „make”.

CDN

Tworzymy makefile

#
# Copyright (C) 2009 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:=fbgetty
PKG_VERSION:=0.1.698
PKG_RELEASE:=1

PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://projects.meuh.org/fbgetty/downloads/
PKG_MD5SUM:= 5b2e98da2310c71c703d4617b88a173f

include $(INCLUDE_DIR)/package.mk

define Package/fbgetty
  SECTION:=utils
  CATEGORY:=Utilities
  TITLE:=fbgetty
  URL:=http://sourceforge.net/projects/fbgetty/
endef

define Package/fbgetty/description
 console getty like mingetty, which supports framebuffers
endef

define Build/Configure
	$(call Build/Configure/Default)
endef

$(eval $(call BuildPackage,fbgetty)) 

Wyjaśnienie:

Każdy plik Makefile zawiera pewne informacje o kompilowanej paczce, jak nazwa, wersja, mdsuma oraz link do zródeł

include $(TOPDIR)/rules.mk                                     # musi być, definiuje zasady kompilowania

PKG_NAME:=fbgetty                                              # nazwa kompilowanej paczki
PKG_VERSION:=0.1.698                                           # wersja kompilowanej paczki
PKG_RELEASE:=1                                                 # wydanie - numer porządkowy, niema znaczenia, przeważnie 1

PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz                  # czasami jest tar.bz2, .zip, .tar 
PKG_SOURCE_URL:=http://projects.meuh.org/fbgetty/downloads/    # url do zródeł
PKG_MD5SUM:= 5b2e98da2310c71c703d4617b88a173f                  # suma kontrolna, na czas testowania można zakomentować

Opis pakietu:

include $(INCLUDE_DIR)/package.mk                              # musi być

define Package/fbgetty                                         # początek definicji naszej paczki
  SECTION:=utils                                               # skrótowy zapis kategorii
  CATEGORY:=Utilities                                          # kategoria w "make menuconfig"
  TITLE:=fbgetty                                               # nazwa paczki
  URL:=http://sourceforge.net/projects/fbgetty/                # url do projektu
endef                                                          # koniec definicji

define Package/fbgetty/description                             # definjujemy opis pakietu (nie istotne)
 console getty like mingetty, which supports framebuffers      # co to za pakiet, do czego służy ?
endef                                                          # koniec

Konfigurujemy:

define Build/Configure                                         # definicja konfiguracji (opcjonalnie)
	$(call Build/Configure/Default)                        # standardowe ./configure
endef                                                          # koniec definicji

Jeżeli procedura konfiguracji jest standardowa (”./configure”) to można pominąć tą sekcje i dodać na początku PKG_INSTALL:=1 (przykład - pakiet ekg)

Kompilujemy:

define Build/Compile                                           # definicja kompilacji
	$(MAKE) -C $(PKG_BUILD_DIR) \                          # wykonywanie "make" w katalogu rozpakowanego pakietu 
		$(TARGET_CONFIGURE_OPTS) \                       ze specyficznymi ustawieniami dla architektury oraz
		CFLAGS="$(TARGET_CFLAGS)" \                      standardowymi parametrami OpenWrt(np brak NLS)
		all                                            # odpowiednik make all, czasami moze byc "install"
endef                                                          # koniec ;-)

Instalujemy:

define Package/fbgetty/install                                        # instalacja pakietu (tworzenie .ipk)
	$(INSTALL_DIR) $(1)/usr/sbin                                  # tworzymy katalog /usr/bin na routerze
	$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/fbgetty $(1)/usr/sbin/    # kopjujemy binarkę "fbgetty" do /usr/bin
endef                                                                 # koniec

$(eval $(call BuildPackage,fbgetty))                                  # ?

Kompilacja

Kompilacja odbywa się przez wydanie polecenia

make

lub jeżeli chcemy skompilować konkretny pakiet

make package/<nasz_pakiet>/{clean,compile,install}

Jednak zanim skompilujemy pakiet należy zaznaczyć go w „make menuconfig”

kompilowanie/sdk.txt · ostatnio zmienione: 2011/08/19 12:38 przez arteq
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki Recent changes RSS feed Valid XHTML 1.0
Profesjonalny Hosting