Inhoudsopgave:

Orange PI HowTo: Sunxi Tool voor Windows compileren onder Windows: 14 stappen (met afbeeldingen)
Orange PI HowTo: Sunxi Tool voor Windows compileren onder Windows: 14 stappen (met afbeeldingen)

Video: Orange PI HowTo: Sunxi Tool voor Windows compileren onder Windows: 14 stappen (met afbeeldingen)

Video: Orange PI HowTo: Sunxi Tool voor Windows compileren onder Windows: 14 stappen (met afbeeldingen)
Video: Orange Pi: Running simple automation scripts and linux commands and other microcontrollers 2024, November
Anonim
Orange PI HowTo: Sunxi Tool voor Windows compileren onder Windows
Orange PI HowTo: Sunxi Tool voor Windows compileren onder Windows

VEREISTEN:

Je zal nodig hebben

  1. Een (desktop)computer met Windows.
  2. Een internetverbinding.
  3. Een oranje PI-bord.

De laatste is optioneel, maar ik ben er zeker van dat je die al hebt. Anders lees je dit instructable niet.

Wanneer u de Orange PI-computer met één bord koopt, blijft het slechts een stuk dood metaal totdat het correct is geconfigureerd. En het belangrijkste configuratiebestand: "script.bin" is de eerste sleutel om het tot leven te brengen. Dit bestand bevindt zich in de opstartpartitie van uw opstartbare SD-kaart. En gelukkig voor ons is deze partitie in de meeste Linux-distributies van de officiële site (https://www.orangepi.org/downloadresources/) FAT32 en kan deze gemakkelijk door elke Windows-computer worden bekeken. Het vereenvoudigt de zaken echt, omdat er nog steeds geen betrouwbare manier is om van onder Windows naar de Linux ext2-partities te schrijven.

Helaas voor ons heeft het script.bin-configuratiebestand een binair formaat dat volledig onvriendelijk is voor menselijke bewerking. Je hebt een soort softwaretool nodig om het te ontsleutelen en terug te versleutelen nadat de nodige wijzigingen zijn aangebracht. En zo'n toolset bestaat. Het is de beruchte SUNXI-TOOLS. De vlieg in de zalf is dat het bedoeld is om onder Linux te draaien en dat we ofwel een speciale Linux-machine moeten hebben om alleen de sunxi-tools te gebruiken, of een manier moeten vinden om ze voor Windows te compileren.

Ik zou het gewoon kunnen compileren en het uitvoerbare bestand delen, maar je weet nooit of ze een nieuwe release willen maken en je hebt zo snel mogelijk een nieuwe compilatie nodig. Dus besloot ik een handleiding te maken hoe de essentiële tool uit de bronnen te compileren. Laten we beginnen.

Stap 1: Download Sunxi-tools

Sunxi-tools downloaden
Sunxi-tools downloaden
Sunxi-tools downloaden
Sunxi-tools downloaden

Download de laatste (of noodzakelijke) versie van de sunxi-tools sourcecode. Ga naar de URL: https://github.com/linux-sunxi/sunxi-tools/releases en kies ervoor om te downloaden als zip-archief.

Stap 2: Pak de broncode uit

Pak de broncode uit
Pak de broncode uit

Zodra de download is voltooid, pakt u de broncode uit in de map van uw keuze. (verder ga ik ervan uit dat deze map c:\sunxitools\ is, dus vervang dit pad door het eigen pad).

Stap 3: Download Code::blocks

Downloadcode::blokken
Downloadcode::blokken

Als u een geïnstalleerde kopie van een operationele c++-compiler voor Windows hebt. en als u weet hoe u het moet gebruiken, kunt u direct doorgaan naar stap 3. Anderen zouden een goede c++-compiler en een shell (IDE) moeten hebben om het comfortabel te kunnen gebruiken. De keuze van mij is code::blocks voor Windows samen met de vooraf geïnstalleerde MinGW-toolchain. Je kunt het hier vandaan halen:https://sourceforge.net/…/codeblocks-16.01mingw-setup.exe/download

Download en installeer het.

Stap 4: Test uw IDE

Test uw IDE
Test uw IDE

Om te testen of alles goed gaat, start u codeblokken, klikt u op "een nieuw project maken", kiest u "consoletoepassing", kiest u c of c++, typt u de titel van het afrekenproject, laat u de standaardinstellingen ongewijzigd in het volgende venster en klikt u op "voltooien ".

Stap 5: Voltooi de test

Test voltooien
Test voltooien

Klik vervolgens op een groene driehoek op het bovenpaneel van de IDE of gebruik het menupunt Build->Run. Als het goed is gegaan, zou u een bericht moeten zien van uw automatisch gegenereerde "Hallo wereld"-toepassing in het zwarte "DOS"-venster.

Als dit niet het geval is, betekent dit dat de IDE en de compiler niet goed werken en dat u moet onderzoeken hoe u dit recht kunt zetten. Waarschijnlijk zult u een andere versie van de programmeertools moeten downloaden of hun toestemmingen in uw firewall/antivirussoftware moeten controleren.

Stap 6: Nieuw project maken

Nieuw project maken
Nieuw project maken
Nieuw project maken
Nieuw project maken
Nieuw project maken
Nieuw project maken
Nieuw project maken
Nieuw project maken

Nu zou u een operationele C/C++ programmeur toolkit en de uitgepakte sunxi-tools broncodes in de c:\sunxitools\ map op uw computer moeten hebben. Het is tijd om een project samen te stellen. Maak een nieuw project in uw IDE. Kies het gewone C (niet c++) project van het type "console-applicatie".

Zorg ervoor dat u een project aanmaakt in de map c:\sunxitools\ en niet op een andere plaats. (EG-codeblokken hebben de neiging om een submap te maken met dezelfde naam als het project. Dus als je je project een naam hebt gegeven, zeg dan "test", en probeer het in c:\sunxitools\ te plaatsen, kan het zijn dat het project weg is naar c:\sunxitools\test\ als je niet oplettend genoeg bent.) Sunxi-tools bevatten verschillende hulpprogramma's, maar voor ons doel hebben we er maar één nodig: het zogenaamde "fexc" hulpprogramma.

Stap 7: Bestanden toevoegen aan project

Bestanden toevoegen aan project
Bestanden toevoegen aan project

Exact "fexc" utility is verantwoordelijk voor de conversie van script.bin naar tekstformaat en voor de back-conversie naar binair. Het is essentieel dat het uitvoerbare bestand van dit hulpprogramma de naam "fexc.exe" heeft, dus het is goed als u uw project als "fexc" hebt genoemd. U kunt echter elke andere naam van het project gebruiken, aangezien u het uitvoerbare bestand altijd kunt hernoemen na de compilatie, of u kunt "Project->Eigenschappen" kiezen in het bovenste vervolgkeuzemenu en in het verschijnende venster op het tabblad "Doelen bouwen" klikken, en bewerk daar het veld "Uitvoerbestandsnaam" om de naam van het uitvoerbare bestand te overschrijven.

Aan uw automatisch gegenereerde project moet u slechts vijf bronbestanden toevoegen:

  • fexc.c
  • script.c
  • script_bin.c
  • script_fex.c
  • script_uboot.c

en zeven header-bestanden:

  • list.h (verplaats het van de map c:\sunxitools\include\ naar de map c:\sunxitools)
  • fexc.h
  • script.h
  • script_bin.h
  • script_fex.h
  • script_uboot.h
  • versie.h

Zorg ervoor dat u de automatisch gegenereerde main.c uitsluit van het project, omdat fexc.c al de functie "int main" bevat. (Weet je nog dat elk programma maar één hoofdfunctie zou moeten hebben?).

Alle benodigde broncodebestanden bevinden zich al in de submap, waar u de broncodes hebt uitgepakt. De header-bestanden verdienen een paar woorden, waar ze te krijgen. "list.h" - bevindt zich meestal in de submap "include" van de set uitgepakte broncodes. "version.h" - maak het gewoon zelf aan. Zet daar een string zoals:

#define VERSIE "Win32"

Sla het bestand vervolgens op en sluit het. (Je mag het decoreren met #define's en #ifdef's als je wilt.)

Als u nu het project probeert te compileren, zal het klagen over veel fouten en één ontbrekend bestand. De fouten zijn meestal te wijten aan een beetje buitensporige stijlvrijheid, de sunxi-tools-programmeurs die ze gebruikten, en het ontbrekende bestand is de afhankelijkheid die niet is opgenomen in het pakket van de broncode. Laten we dit stap voor stap behandelen.

Stap 8: Laat Gcc de ISO C-taalnorm uit 1999 volgen

Laat Gcc de ISO C-taalnorm uit 1999 volgen
Laat Gcc de ISO C-taalnorm uit 1999 volgen

Om ervoor te zorgen dat de compiler niet klaagt over de te vrije programmeerstijl, is de "с99" -standaard van de compilatie ingesteld. Ga in codeblokken naar het menu "Project -> Build-opties" en vink in het "Compilerinstellingen -> Compilervlaggen" het selectievakje "Laat gcc de 1999 ISO C-taalstandaard volgen" aan. Of je kunt gewoon "-std=c99" toevoegen aan de tekenreeks van je compileropties. Als je nu probeert het project te compileren, zouden die tonnen fouten moeten verdwijnen en ben je één op één met de ontbrekende afhankelijkheid.

Stap 9: Vind de ontbrekende afhankelijkheid

Vind de ontbrekende afhankelijkheid
Vind de ontbrekende afhankelijkheid

De ontbrekende afhankelijkheid is het bestand "mman.h" - de header van een soort linux-geheugenbeheerder. Windows C heeft van nature niet zo'n bestand, maar gelukkig is er een Windows-poort van. Ga naar https://github.com/witwall/mman-win32 voor Windows. Download de momentopname van de git-repository.

Stap 10: Pak de Mman. uit

Pak de Mman. uit
Pak de Mman. uit

Pak de bestanden mman.c en mman.h uit en plaats ze in de map c:\sunxitools\.

Stap 11: En voeg ze toe aan het project

En voeg ze toe aan het project
En voeg ze toe aan het project

Stap 12: Correct pad

Juiste pad
Juiste pad

En in bestand "fex.c" raplece regel:

#erbij betrekken

naar de

#include "mman.h"

Bij deze stap zou uw compiler niets moeten klagen en krijgt u het lange wachten fexc.exe als uitvoer. Wees niet te vroeg blij. Het hulpprogramma is nog steeds niet volledig functioneel. U kunt hiervoor zorgen door een geldig script.bin-bestand te decoderen in de tekstvorm - script.fex-bestand en vervolgens het script.fex-bestand terug te coderen in de script.bin. U zult merken dat de grootte van het resulterende script.bin enigszins afwijkt van de grootte van het oorspronkelijke script.bin. En als u het resultaat nogmaals probeert te decoderen, zal het mislukken. Noch de Orange PI zal werken met deze script.bin. Om het functionele hulpprogramma te krijgen, moeten we een codebom ontladen, die iemand in de broncode van sunxi-tools heeft geplaatst. Het wordt onze volgende stap.

Stap 13: exorcisme

exorcisme
exorcisme

Om de codebom te ontladen, opent u het fexc.c-codebestand en vindt u daar een tekstreeks met de volgende inhoud:

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

Vervang het gewoon door de volgende tekenreeks:

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

Als het niet de kwaadaardige cijfers "666" in de eerste reeks zijn, zou ik denken dat de codeur gewoon is vergeten de vlag O_BINARY te gebruiken. Maar het nummer van het beest verduidelijkt zijn bedoelingen wel transparant. Ga na, hoe ingenieus het is: door het subtiele verschil in hoe de bestanden worden verwerkt in Windows en Linux heeft de bom geen effect wanneer het hulpprogramma wordt gecompileerd en gebruikt onder Linux. Maar het verpest alles wanneer het hulpprogramma onder Windows wordt gebruikt.

Nadat de bom is ontwapend, kunt u eindelijk het fexc-hulpprogramma compileren en veilig gebruiken op uw Windows-desktopcomputer.

Stap 14: OPMERKINGEN

OPMERKINGEN
OPMERKINGEN

1) Om het fexc-hulpprogramma comfortabel te gebruiken, moet u twee batchbestanden krijgen:

bin2fex.bat - en - fex2bin.bat.

Je kunt ze krijgen van een of andere mislukte fexc.exe-build voor Windows die er is, of je kunt ze zelf typen:

  • bin2fex.bat moet "fexc -I bin -O fex script.bin script.fex" bevatten
  • fex2bin.bat moet "fexc -O bin -I fex script.fex script.bin" bevatten

2) Als het moeilijk is om de mman-manager voor Windows te vinden, kan men het gebruik ervan helemaal vermijden. Het vereist echter veel meer bewerking van het fexc.c-bestand en vereist op zijn minst enige kennis van c. Voor uw gemak deel ik de bewerkte broncode van de fexc van de sunxi-tools v1.4 vrij van de afhankelijkheid naar mman.h samen met het codeblocks-projectbestand en met voorbeeldscript.bin van een oranje pi. Je kunt fexc_nomman.zip downloaden

3) Het is mogelijk dat ze in opeenvolgende versies van sunxi-tools wat meer afhankelijkheden toevoegen. Voel je vrij om ze op internet te vinden en toe te voegen aan je compilatieproject.

5) Eindelijk is hier de voorgecompileerde versie van fexc.exe voor Win32:

fexc_nomman.zip

Als je lui genoeg bent, voel je dan vrij om ver. Houd er echter rekening mee dat het niet wordt bijgewerkt als/wanneer de nieuwere versies van SunxiTools/Windows beschikbaar zijn. Dus het is beter om te leren hoe je ze moet compileren dan afhankelijk te zijn van een of andere vaste binaire build, neem ik aan.

4) De "Oranje PI", "Code::Blocks", "Windows", "Linux", "Sunxi-Tools", "Allwinner", enz… zijn de overeenkomstige handelsmerken van hun respectievelijke eigenaren.

5) Als je compiler klaagt over het niet vinden van mman-functies, zoals:

ongedefinieerde verwijzing naar '_imp_mmap'

Houd er rekening mee dat liefhebbers van definiëren van de mman-ontwikkelingsgemeenschap zijn vergeten dat de code niet alleen als dll-bibliotheek kan worden gecompileerd. Het kan ook een statische bibliotheek zijn of een op zichzelf staande code zoals we hier hebben. Om het probleem op te lossen, bewerkt u het "mman.h"-bestand als volgt:

a) zoek de tekenreeksen:

#if gedefinieerd(MMAN_LIBRARY)

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

b) voeg de string toe

#define MMANSHARED_EXPORT

net onder de tekenreeksen gevonden bij de vorige stap

Aanbevolen: