Spisu treści:

Orange PI HowTo: Kompilacja narzędzia Sunxi dla systemu Windows w systemie Windows: 14 kroków (ze zdjęciami)
Orange PI HowTo: Kompilacja narzędzia Sunxi dla systemu Windows w systemie Windows: 14 kroków (ze zdjęciami)

Wideo: Orange PI HowTo: Kompilacja narzędzia Sunxi dla systemu Windows w systemie Windows: 14 kroków (ze zdjęciami)

Wideo: Orange PI HowTo: Kompilacja narzędzia Sunxi dla systemu Windows w systemie Windows: 14 kroków (ze zdjęciami)
Wideo: Orange Pi 5 - Kali Linux w domu w mikrokomputerze [PL] 2024, Lipiec
Anonim
Orange PI HowTo: Skompiluj narzędzie Sunxi dla systemu Windows w systemie Windows
Orange PI HowTo: Skompiluj narzędzie Sunxi dla systemu Windows w systemie Windows

WYMAGANIA WSTĘPNE:

Będziesz potrzebować

  1. Komputer (stacjonarny) z systemem Windows.
  2. Połączenie internetowe.
  3. Płyta Orange PI.

Ostatni jest opcjonalny, ale jestem pewien, że już go masz. W przeciwnym razie nie przeczytasz tej instrukcji.

Kiedy kupujesz komputer jednopłytkowy Orange PI, pozostaje on tylko kawałkiem martwego metalu, dopóki nie zostanie poprawnie skonfigurowany. A jego główny plik konfiguracyjny: „script.bin” jest pierwszym kluczem, który go ożywia. Ten plik znajduje się na partycji rozruchowej Twojej rozruchowej karty SD. I na szczęście dla nas, w większości dystrybucji Linuksa z oficjalnej strony (https://www.orangepi.org/downloadresources/) ta partycja jest w systemie FAT32 i może być łatwo widoczna na dowolnym komputerze z systemem Windows. To naprawdę upraszcza rzeczy, ponieważ nadal nie ma niezawodnego sposobu na zapisywanie na partycjach Linux ext2 z poziomu Windows.

Na nasze nieszczęście plik konfiguracyjny script.bin ma format binarny całkowicie nieprzyjazny do edycji przez człowieka. Potrzebne jest jakieś narzędzie programowe, aby je odszyfrować i odszyfrować po dokonaniu niezbędnych modyfikacji. I taki zestaw narzędzi istnieje. To niesławne SUNXI-TOOLS. Mucha w tej maści polega na tym, że ma działać pod Linuksem i albo musimy mieć dedykowaną maszynę Linuksową tylko do korzystania z narzędzi sunxi, albo znaleźć sposób, jak skompilować je dla systemu Windows.

Mógłbym go po prostu skompilować i udostępnić plik wykonywalny, ale nigdy nie wiadomo, czy chcieliby wydać nowe wydanie, a nowa kompilacja będzie potrzebna JAK NAJSZYBCIEJ. Postanowiłem więc zrobić przewodnik, jak skompilować podstawowe narzędzie ze źródeł. Zacznijmy.

Krok 1: Pobierz narzędzia Sunxi

Pobierz narzędzia Sunxi
Pobierz narzędzia Sunxi
Pobierz narzędzia Sunxi
Pobierz narzędzia Sunxi

Pobierz najnowszą (lub niezbędną) wersję kodu źródłowego sunxi-tools. Przejdź do adresu URL: https://github.com/linux-sunxi/sunxi-tools/releases i wybierz pobranie jako archiwum zip.

Krok 2: Rozpakuj kod źródłowy

Rozpakuj kod źródłowy
Rozpakuj kod źródłowy

Po zakończeniu pobierania rozpakuj kod źródłowy do wybranego folderu. (Ponadto zakładam, że ten folder to c:\sunxitools\, więc zastąp tę ścieżkę własną ścieżką).

Krok 3: Pobierz kod::bloki

Pobierz kod::bloki
Pobierz kod::bloki

Jeśli masz zainstalowaną kopię jakiegoś operacyjnego kompilatora c++ dla systemu Windows. a jeśli wiesz, jak go używać, możesz przejść bezpośrednio do kroku 3. Inni powinni mieć odpowiedni kompilator c++ i powłokę (IDE), aby wygodnie z niego korzystać. Mój wybór to code::blocks dla Windows wraz z preinstalowanym toolchainem MinGW. Możesz go pobrać stąd:

Pobierz i zainstaluj.

Krok 4: Przetestuj swoje IDE

Przetestuj swoje IDE
Przetestuj swoje IDE

Aby sprawdzić, czy wszystko idzie dobrze, uruchom bloki kodu, kliknij „utwórz nowy projekt”, wybierz „aplikację konsolową”, wybierz c lub c++, wpisz tytuł projektu kasy, zachowaj ustawienia domyślne nietknięte w następnym oknie i kliknij „zakończ”.

Krok 5: Wypełnij test

Kompletny test
Kompletny test

Następnie kliknij zielony trójkąt na górnym panelu IDE lub użyj punktu menu Zbuduj->Uruchom. Jeśli wszystko poszło dobrze, powinieneś zobaczyć wiadomość z Twojej automatycznie wygenerowanej aplikacji "Hello world" w czarnym oknie "DOS".

Jeśli nie, oznacza to, że IDE i kompilator nie działają poprawnie i będziesz musiał zbadać, jak to naprawić. Prawdopodobnie będziesz musiał pobrać inną wersję narzędzi programistycznych lub sprawdzić ich uprawnienia w swoim oprogramowaniu firewall/antywirusowym.

Krok 6: Utwórz nowy projekt

Utwórz nowy projekt
Utwórz nowy projekt
Utwórz nowy projekt
Utwórz nowy projekt
Utwórz nowy projekt
Utwórz nowy projekt
Utwórz nowy projekt
Utwórz nowy projekt

Teraz powinieneś mieć działający zestaw narzędzi programistycznych C/C++ i rozpakowane kody źródłowe sunxi-tools w folderze c:\sunxitools\ na Twoim komputerze. Czas złożyć projekt. Stwórz nowy projekt w swoim IDE. Wybierz zwykły projekt C (nie c++) typu „aplikacja konsolowa”.

Upewnij się, że tworzysz projekt w folderze c:\sunxitools\, a nie w innym miejscu. (Bloki kodu EG mają tendencję do tworzenia podfolderu o tej samej nazwie, co projekt. Więc jeśli nazwałeś swój projekt, powiedz "test" i spróbuj umieścić go w c:\sunxitools\, możesz skończyć z tym, że projekt zniknie do c:\sunxitools\test\, jeśli nie jesteś wystarczająco uważny.) Sunxi-tools zawierają kilka narzędzi, ale do naszego celu będziemy potrzebować tylko jednego: tak zwanego narzędzia "fexc".

Krok 7: Dodaj pliki do projektu

Dodaj pliki do projektu
Dodaj pliki do projektu

To właśnie narzędzie "fexc" jest odpowiedzialne za konwersję pliku script.bin do formatu tekstowego oraz za konwersję wsteczną do formatu binarnego. Bardzo ważne jest, aby plik wykonywalny tego narzędzia miał nazwę „fexc.exe”, więc dobrze jest, jeśli nazwałeś swój projekt „fexc”. Możesz jednak użyć dowolnej innej nazwy projektu, ponieważ zawsze możesz zmienić nazwę pliku wykonywalnego po kompilacji, lub możesz wybrać "Projekt->Właściwości" z górnego menu rozwijanego i w pojawiającym się oknie kliknąć zakładkę "Cel kompilacji", i edytuj tam pole "Nazwa pliku wyjściowego", aby zastąpić nazwę pliku wykonywalnego.

Do Twojego automatycznie wygenerowanego projektu powinieneś dodać tylko pięć plików źródłowych:

  • fexc.c
  • skrypt.c
  • skrypt_bin.c
  • skrypt_fex.c
  • skrypt_uboot.c

oraz siedem plików nagłówkowych:

  • list.h (przenieś go z folderu c:\sunxitools\include\ do folderu c:\sunxitools)
  • fexc.h
  • skrypt.h
  • skrypt_bin.h
  • skrypt_fex.h
  • skrypt_uboot.h
  • wersja.h

Pamiętaj, aby wykluczyć z projektu automatycznie wygenerowany plik main.c, ponieważ fexc.c ma już w sobie funkcję „int main”. (Pamiętasz, że każdy program powinien mieć tylko jedną główną funkcję?).

Wszystkie potrzebne pliki z kodem źródłowym znajdują się już w podfolderze, do którego rozpakowałeś kody źródłowe. Pliki nagłówkowe zasługują na parę słów, skąd je wziąć. "list.h" - zwykle znajduje się w podfolderze "include" zestawu rozpakowanych kodów źródłowych. "version.h" - po prostu stwórz to sam. Umieść tam ciąg taki jak:

#define WERSJA "Win32"

Następnie zapisz i zamknij plik. (Możesz ozdobić go #define's i #ifdef's jeśli chcesz.)

Jeśli teraz spróbujesz skompilować projekt, będzie on narzekał na wiele błędów i jeden brakujący plik. Błędy wynikają głównie z nadmiernej swobody stylistycznej, którą programiści sunxi-tools stosowali, a brakujący plik to zależność nie zawarta w pakiecie kodu źródłowego. Zajmijmy się tym krok po kroku.

Krok 8: Niech Gcc postępuje zgodnie ze standardem językowym ISO C z 1999 r

Niech Gcc postępuje zgodnie ze standardem językowym ISO C z 1999 r
Niech Gcc postępuje zgodnie ze standardem językowym ISO C z 1999 r

Aby kompilator nie narzekał na zbyt swobodny styl programowania ustaw standard kompilacji "с99". W codeblocks przejdź do menu "Project -> Build Options" i w "Compiler Settings -> Compiler Flags" zaznacz pole wyboru "Have gcc follow the 1999 ISO C language standard". Lub możesz po prostu dodać "-std=c99" do ciągu opcji kompilatora. Teraz, jeśli spróbujesz skompilować projekt, te tony błędów powinny zniknąć i jesteś jeden do jednego z brakującą zależnością.

Krok 9: Znajdź brakującą zależność

Znajdź brakującą zależność
Znajdź brakującą zależność

Brakującą zależnością jest plik "mman.h" - nagłówek jakiegoś menedżera pamięci linux. Windows C natywnie nie ma takiego pliku, ale na szczęście istnieje jego port Windows. Przejdź do https://github.com/witwall/mman-win32 dla systemu Windows. Pobierz migawkę repozytorium git.

Krok 10: Rozpakuj Mman

Rozpakuj Mman
Rozpakuj Mman

Rozpakuj pliki mman.ci mman.h, umieść je w folderze c:\sunxitools\.

Krok 11: I dodaj je do projektu

I dodaj je do projektu
I dodaj je do projektu

Krok 12: Prawidłowa ścieżka

Prawidłowa ścieżka
Prawidłowa ścieżka

A w pliku "fex.c" raplece linia:

#włączać

do

#dołącz "mman.h"

Na tym etapie Twój kompilator nie powinien nic narzekać, a jako wyjście otrzymasz plik long wait fexc.exe. Nie bądź szczęśliwy za wcześnie. Narzędzie nadal nie jest w pełni funkcjonalne. Możesz to zapewnić poprzez odszyfrowanie prawidłowego pliku script.bin do postaci tekstowej - plik script.fex, a następnie zaszyfrowanie pliku script.fex z powrotem do pliku script.bin. Możesz zauważyć, że rozmiar wynikowego script.bin różni się nieco od rozmiaru oryginalnego script.bin. A jeśli spróbujesz ponownie odszyfrować wynik, nie powiedzie się. Ani Orange PI nie będzie działać z tym script.bin. Aby uzyskać funkcjonalne narzędzie, musimy rozładować bombę kodową, którą ktoś umieścił w kodzie źródłowym sunxi-tools. To będzie nasz kolejny krok.

Krok 13: Egzorcyzm

Egzorcyzm
Egzorcyzm

Aby rozładować bombę kodową, otwórz plik z kodem fexc.c i znajdź tam ciąg tekstowy kolejnej treści:

else if ((out = open(nazwa pliku, O_WRONLY|O_CREAT|O_TRUNC, 0666)) < 0) {

Po prostu zastąp go następnym ciągiem:

else if ((out = open(nazwa pliku, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 512))<0){

Gdyby nie złe cyfry „666” w pierwszym ciągu, pomyślałbym, że koder właśnie zapomniał użyć flagi O_BINARY. Ale Liczba Bestii jasno wyjaśnia jego intencje. Wyobraź sobie, jakie to pomysłowe: ze względu na subtelną różnicę w sposobie przetwarzania plików w systemach Windows i Linux bomba nie ma żadnego efektu, gdy narzędzie jest kompilowane i używane pod systemem Linux. Ale to wszystko rujnuje, gdy narzędzie jest używane w systemie Windows.

Po rozbrojeniu bomby możesz wreszcie skompilować i bezpiecznie używać narzędzia fekso na swoim komputerze z systemem Windows.

Krok 14: UWAGI

UWAGI
UWAGI

1) Aby wygodnie korzystać z narzędzia fexc, powinieneś pobrać dwa pliki wsadowe:

bin2fex.bat - i - feks2bin.bat.

Możesz je pobrać z jakiejś nieudanej kompilacji fexc.exe dla systemu Windows lub możesz wpisać je samodzielnie:

  • bin2fex.bat powinien zawierać „fexc -I bin -O fex script.bin script.fex”
  • fex2bin.bat powinien zawierać „fexc -O bin -I fex script.fex script.bin”

2) Jeśli trudno jest znaleźć menedżera mmana dla Windows, można w ogóle uniknąć jego używania. Jednak wymaga znacznie więcej edycji pliku fexc.c i wymaga przynajmniej pewnej wiedzy na temat c. Dla Twojej wygody udostępniam edytowany kod źródłowy fexc z sunxi-tools v1.4 wolny od zależności do mman.h wraz z plikiem projektu codeblocks oraz przykładowym script.bin z jakiegoś orange pi. Możesz pobrać plik exec_nomman.zip

3) Możliwe, że w kolejnych wersjach sunxi-tools dodadzą jeszcze kilka zależności. Zapraszam do odnalezienia ich w Internecie i dodania ich do swojego projektu kompilacyjnego.

5) Na koniec oto prekompilowana wersja fekso.exe dla Win32:

fexc_nomman.zip

Jeśli jesteś wystarczająco leniwy, możesz skorzystać z ver. Należy jednak pamiętać, że nie zostanie on zaktualizowany, jeśli/kiedy będą dostępne nowsze wersje SunxiTools/Windows. Przypuszczam, że lepiej jest nauczyć się je kompilować, niż polegać na jakimś stałym binarnym buildzie.

4) „Orange PI”, „Code::Blocks”, „Windows”, „Linux”, „Sunxi-Tools”, „Allwinner” itp. są odpowiednimi znakami towarowymi ich odpowiednich właścicieli.

5) Jeśli kompilator narzeka na brak funkcji mmana, takich jak:

niezdefiniowane odniesienie do '_imp_mmap'

należy pamiętać, że miłośnicy definicji ze społeczności programistów mmana zapomnieli, że kod można skompilować nie tylko jako bibliotekę dll. Może to być również biblioteka statyczna lub samodzielny kod, taki jak tutaj. Aby rozwiązać problem, edytuj plik „mman.h” w następujący sposób:

a) znajdź struny:

#jeśli zdefiniowano(MMAN_LIBRARY)

#define MMANSHARED_EXPORT _declspec(dllexport) #else #define MMANSHARED_EXPORT _declspec(dllimport) #endif

b) dodaj ciąg

#define MMANSHARED_EXPORT

tuż pod ciągami znalezionymi w poprzednim kroku

Zalecana: