Aceasta este comanda srec_examples care poate fi rulată în furnizorul de găzduire gratuit OnWorks folosind una dintre multiplele noastre stații de lucru online gratuite, cum ar fi Ubuntu Online, Fedora Online, emulator online Windows sau emulator online MAC OS
PROGRAM:
NUME
srec_examples - exemple de utilizare a SRecord
DESCRIERE
srec_cat comanda este foarte puternică, datorită capacității de a combina filtrele de intrare
în moduri aproape nelimitate. Această pagină de manual descrie câteva dintre ele.
Această pagină de manual descrie modul de utilizare a diferitelor fișiere de intrare, filtre de intrare și de intrare
generatoare. Dar acestea sunt doar exemple, pentru detalii mai complete, vezi srec_input(1)
pagina de manual.
Comenzi Linii Sunt De asemenea Lung
Dacă sunteți părăsit de un sistem de operare cu limite absurd de scurte pentru lungimea liniei de comandă,
unele dintre comenzile care urmează pot fi prea lungi. Puteți ocoli acest handicap prin
plasarea liniei de comandă într-un fișier, să zicem fred.txt, și apoi spune srec_cat(1) pentru a citi aceasta
fișier pentru restul liniei de comandă, ca acesta
srec_cat @fred.txt
Acest lucru are, de asemenea, avantajul de a permite comentarii, permițându-vă să scrieți linia de comandă
opțiuni pe mai multe rânduri și chiar indentare pentru a face comanda mai clară. Comentarii
începe de la un „#” și se extind până la capătul liniei. Liniile goale sunt ignorate.
Bineînțeles, puteți face întotdeauna upgrade la Linux, care de peste 27 de ani a fost mai rar
ani acum.
Ta Exemple Dorit
Dacă aveți o modalitate inteligentă de a folosi SRecord sau ați rezolvat o problemă dificilă cu
SRecord, puteți contribui la această pagină de manual, făcând-o mai utilă pentru toată lumea.
Trimiteți exemplul dvs. într-un e-mail la adresa de e-mail de la sfârșitul acestei pagini de manual.
CONVERSIUNEA FILE FORMATE
Cel mai simplu dintre lucruri srec_cat(1) poate face este să convertească dintr-un format de fișier EPROM în
o alta. Vă rugăm să rețineți, în timp ce citiți această secțiune, că puteți face multe dintre acestea
lucruri simultan într-o singură comandă. Sunt sparte doar separat pentru a le face
mai ușor de înțeles.
Intel la Motorola
Unul dintre cele mai simple exemple este conversia fișierelor din formatul Intel hex în Motorola S-
Format de înregistrare:
srec_cat fișierul intel -intel -o srec‐file
Rețineți că specificatorul de format urmează imediat numele fișierului pe care îl descrie.
Alegeți oricare două formate pe care SRecord le înțelege și se poate converti între toate.
(Cu excepția ieșirilor pentru asamblare, BASIC, C și FPGA, care sunt numai în scriere.)
Motorola la Intel
Conversia inversă este la fel de simplă:
srec_cat srec‐file -o fișierul intel -intel
Formatul implicit este formatul Motorola S-Record, deci nu trebuie specificat ulterior
numele fișierului.
Diferit Forme of il Acelaşi Format
Este, din păcate, obișnuit ca unii programatori EPROM complet implementați doar o parte
a specificației utilizate pentru a reprezenta fișierele lor hexadecimale. De exemplu, unele compilatoare
produce date Motorola „s19” (adică înregistrări de date S1 cu înregistrări de pornire S9, 16 biți
câmpuri de adresă) care ar fi în regulă, cu excepția faptului că unii programatori EPROM de tip blockhead insistă
Date Motorola „s37” (adică înregistrări de date S3 cu înregistrări de pornire S7, adresă pe 32 de biți
câmpuri).
Este posibilă conversia de la o formă Motorola la alta folosind - Lungimea adresei
opţiune:
srec_cat short.srec -o long.srec -address‐length=4
Această comandă spune să folosiți adrese de patru octeți (32 de biți) la ieșire.
Această secțiune se aplică și fișierelor Intel hex, deoarece și ele au capacitatea de a selecta
dintr-o varietate de lățimi de adrese. Pentru a converti de la o formă Intel la alta folosind
acelaşi - Lungimea adresei opţiune:
srec_cat i32.hex -o i16.hex -address‐length=3
Această comandă spune să folosiți adrese segmentate pe 16 de biți „i20hex” la ieșire. Lungimea unei adrese
de 4 este valoarea implicită („i32hex” adresare liniară pe 32 de biți), iar o lungime a adresei de 2 ar
solicitați adresarea pe 8 biți „i16hex”.
Linie Lungime
Din când în când veți întâlni un programator EPROM slab la minte care nu poate face față
cu linii de text lungi, ei presupun că vor exista doar 46 de caractere pe linie și
barf când văd lungimile implicite ale liniei care srec_cat(1) scrie (sau mai rău, obține o stivă
mâzgălire și prăbușire).
Definiția formatului Motorola S-record permite până la 255 de octeți de încărcare utilă sau linii de
514 caractere, plus terminarea liniei. Toți programatorii EPROM să au suficient
linie tampon mari pentru a face față înregistrărilor atât de mari. Puțini o fac.
Opțiunea -line-length poate fi utilizată pentru a specifica lungimea maximă a liniei (fără includere
newline) pentru a fi utilizat la ieșire. De exemplu, încărcături utile de 16 octeți pentru Motorola hex
srec_cat lung.srec -o scurt.s19 -line‐length=46
Opțiunea de lungime a liniei interacționează cu opțiunea de lungime a adresei, așa că unele modificări
optimizați pentru situația dvs. particulară multe sunt necesare.
producție Bloca Mărimea
Din când în când veți întâlni un programator EPROM străvechi care nu poate
să facă față înregistrărilor lungi de date, ei presupun că vor exista întotdeauna cel mult 16 octeți de
date per înregistrare și barf atunci când văd încărcăturile utile implicite de 32 de octeți srec_cat(1)
scrie (sau mai rău, depășirea tamponului provoacă o plimbare cu iarbă înaltă care mâzgălește pe dvs
EPROM).
Definiția formatului Intel hex permite până la 255 de octeți de date utile pentru fiecare înregistrare. Toate
Programatori EPROM să au tampon de date suficient de mari pentru a face față acestor înregistrări
mare. Mult noroc cu asta.
Opțiunea -Output-Block-Size poate fi utilizată pentru a specifica dimensiunea datelor de înregistrare care va fi utilizată
ieșire. De exemplu, Intel hex cu încărcături utile de 16 octeți:
srec_cat long.srec -o short.hex -intel -obs=16
Aveți grijă să nu puneți -obs opțiunea între numele fișierului de ieșire și format
specificatorul.
Doar il Date, Te rugăm să ne contactezi
Există niște programatori bonehead EPROM care pot face față doar înregistrărilor de date și sunt
incapabil să facă față înregistrărilor antet sau înregistrărilor cu adresele de început ale execuției. Dacă ai asta
problema, -numai date opțiunea poate fi folosită pentru a suprima aproape orice, cu excepția
date. Efectul real depinde de format, desigur, pentru că unele nu au acestea
caracteristici oricum.
-numai date opțiunea este mâna scurtă. Există patru proprietăți care pot fi -dezactivat or
-activat separat. Vezi srec_cat(1) pagina de manual pentru o descriere a -dezactivat și
-activat opțiuni.
De exemplu, programatorul dumneavoastră EPROM de neanderthal necesită Motorola hex cu înregistrări antet
(S0), dar fără înregistrări de numărare a datelor (S5). Nefolosind -numai date opțiunea are barf on
înregistrarea numărului de date, dar folosind -numai date opțiunea o are barf pe antetul lipsă
record. Folosind -disable=număr de date opțiunea ar lăsa înregistrarea antetului intactă în timp ce
suprimarea înregistrării numărului de date.
Date Anteturi
srec_cat(1) Comanda încearcă întotdeauna să treacă prin înregistrările antet neschimbate, oricând
sunt prezenti. Încearcă chiar să le păstreze în timpul modificărilor formatului de fișier, până la limită
formatele de fișiere sunt capabile.
Dacă nu există nicio înregistrare a antetului fișierului și doriți să adăugați una sau doriți să o înlocuiți
o înregistrare antet de fișier existentă, utilizați -antet=şir opțiune. Va trebui să citați
șir (pentru a-l izola de shell) dacă conține spații sau metacaractere shell.
Execuție acasă Adresele
srec_cat(1) comanda încearcă întotdeauna să treacă prin adresele de început ale execuției (de obicei
care apar la sfârşitul dosarului), ori de câte ori sunt prezente. Ele sunt ajustate de-a lungul
cu înregistrările de date de către -decalaj filtru. Încearcă chiar să le păstreze peste fișiere
se modifică formatul, până la limita de care sunt capabile formatele de fișiere.
Dacă nu există nicio înregistrare a adresei de începere a execuției și doriți să adăugați una sau doriți
pentru a suprascrie o înregistrare existentă a adresei de început a execuției, utilizați -execuție-început-
adresa=număr opțiune.
Vă rugăm să rețineți: adresa de început a execuției este un concept diferit de prima adresă din
memoria datelor dvs. Gândiți-vă la ea ca la o adresă „goto” la care trebuie sărită monitorul când
sarcina hexagonală este completă. Dacă doriți să schimbați locul în care încep datele dvs. în memorie, utilizați
-decalaj filtru.
De stabilire Sume de control
Unii dezvoltatori de firmware încorporat sunt plini de instrumente care produc
sume de control incorecte, pe care modelele mai vigilente ale programatorului EPROM nu le vor accepta.
Pentru a remedia sumele de verificare pe un fișier, utilizați -ignora-sumele de control opțiune. De exemplu:
srec_cat broken.srec -ignore‐checksums -o fixed.srec
Sumele de control în spart.srec sunt analizate (este încă și eroare dacă sunt absente) dar sunt
nu a verificat. Rezultați fix.srec fișierul are sumele de verificare corecte. The -ignora-sumele de control
opțiunea se aplică numai pentru intrare.
Această opțiune poate fi utilizată pe orice format de fișier care are sume de control, inclusiv Intel hex.
descoperirea Mister Formate
A se vedea Ce Format Is Acest? secțiunea de mai jos, pentru cum să descoperiți și să convertiți EPROM-ul misterios
încărcați formate de fișiere.
BINAR DOSARE
Este posibil să se convertească în și din fișiere binare. Puteți chiar să amestecați fișiere binare și
alte formate împreună în același srec_cat(1) comanda.
Scris Binar Fişiere
Cel mai simplu mod de a citi un fișier hex și de a-l converti într-un fișier binar arată astfel:
srec_cat fred.hex -o fred.bin -binary
Acesta citește fișierul hex Motorola fred.srec și îl scrie către fred.bin ca crud
binar.
Rețineți că datele sunt plasate în fișierul binar la offset-ul de octeți specificat de
adresele din fișierul hex. Dacă există găuri în date, acestea sunt umplute cu zero.
Acest lucru este, desigur, comun cu ieșirea linkerului în care codul este plasat începând cu a
loc anume în memorie. De exemplu, când aveți o imagine care începe cu 0x100000,
primul 1MB din fișierul binar de ieșire va fi zero.
Puteți anula automat această compensare folosind o comandă ca
srec_cat fred.hex -offset − -minimum‐adr fred.hex -o fred.bin
Comanda de mai sus funcționează prin compensarea fred.hex fișier mai mic în memorie
adresa în fred.hex datele fișierului.
Consultați și srec_binary(5) pagina de manual pentru detalii suplimentare.
Citind Binar Fişiere
Cel mai simplu mod de a citi un fișier binar și de a-l converti arată astfel
srec_cat fred.bin -binary -o fred.srec
Acesta citește fișierul binar fred.bin și își scrie din nou toate datele ca a
Fișier Motorola S-Record.
Adesea, acest binar nu este exact unde doriți în spațiul de adrese, pentru că este
se presupune că locuiește la adresa zero. Dacă trebuie să-l mutați, utilizați -decalaj filtru.
srec_cat fred.bin -binary -offset 0x10000 -o fred.srec
De asemenea, trebuie să evitați „găurile” ale fișierelor care sunt umplute cu zero. Puteți folosi -a decupa
filtrul, ai putea folosi - neumplere filtrați dacă nu știți exact unde sunt datele.
srec_cat fred.bin -binary -unfill 0x00 512 -o fred.srec
Comanda de mai sus elimină rulări de zero octeți care au o lungime de 512 octeți sau mai mult. Dacă ale tale
fișierul conține 1 GB de zero octeți de început, acest lucru va fi lent, poate fi mai bine de utilizat
il dd(1) comanda de a tăia mai întâi zaruri.
ALĂTURAREA DOSARE ÎMPREUNĂ
srec_cat comanda își ia numele de la UNIX pisică(1) comandă, care este prescurtarea pentru
„catena” sau „a se alătura”. The srec_cat comanda unește fișierele de încărcare EPROM împreună.
TOATE In O
Unirea fișierelor de încărcare EPROM într-un singur fișier este simplă, numiți cât mai multe fișiere
linia de comandă după cum aveți nevoie:
srec_cat infile1 infile2 -o outfile
Acest exemplu sunt toate fișierele Motorola S-Record, deoarece acesta este formatul implicit. Poti
au mai multe formate într-o singură comandă și srec_cat(1) va funcționa în continuare. Nici măcar nu
trebuie să scoată același format:
srec_cat infile1 -spectru infile2 - Needham
-o outfile -semnetice
Toate acestea sunt formate antice, dar nu este neobișnuit să fie nevoie să amestecați și să potriviți Intel
și formatele Motorola într-un singur proiect.
Filtrare Dupa Aderarea
Există momente când doriți să uniți două seturi de date împreună și apoi să aplicați un filtru
la rezultatul alăturat. Pentru a face acest lucru folosiți paranteze.
srec_cat
'('
infile -excludeți 0xFFF0 0x10000
-generare 0xFFF0 0xFFF8 -repeat-string „Banane”
')'
-b‐e‐lungime 0xFFF8 4
-b-e-checksum-neg 0xFFFC 4 4
-o outfile
Exemplul de comandă de mai sus catenează un fișier de intrare (cu zona de date generată exclusă)
cu un şir constant. Această intrare catenată este apoi filtrată pentru a adăuga o lungime de 4 octeți și
o sumă de control de 4 octeți.
Aderarea Un capăt la altul
Prea des, intervalele de adrese din fișierele de încărcare EPROM se vor suprapune. Vei primi un
eroare dacă o fac. Dacă ambele fișiere încep de la adresa zero, pentru că fiecare intră în a
EPROM separată, poate fi necesar să utilizați filtrul de offset:
srec_cat infile1
infile2 -offset 0x80000
-o outfile
Uneori vrei ca cele două fișiere să se succedă exact, dar nu știi
compensare în avans:
srec_cat infile1
infile2 -offset -maximum‐adr infile1
-o outfile
Observați că acolo unde înainte era un număr (0x80000), acum există un calcul (-maximum-
adresă infile1). Acest lucru este posibil în majoritatea locurilor în care poate fi folosit un număr (de asemenea -minimum‐adr și
-gamă).
CULTURA THE DATE
Este posibil să copiați un fișier de încărcare EPROM, selectând adresele de păstrat și adresele către care
arunca.
Ce La A pastra
O activitate comună este decuparea datelor pentru a se potrivi cu locația EPROM. Linker-ul dvs. poate adăuga
alte gunoaie care nu te interesează, de exemplu la locația RAM. În acest exemplu,
există o EPROM de 1 MB la limita de 2 MB:
srec_cat infile -decupare 0x200000 0x300000
-o outfile
Limita inferioară pentru toate intervalele de adrese este inclusivă, limita superioară este exclusivă. daca tu
scădeți-le, obțineți numărul de octeți.
Adresă Compensa
Doar posibil, ai un programator EPROM imbecil, iar imaginea EPROM se încurcă
nu incepe de la zero. Pentru a afla exact unde este face începe în memorie, folosește
srec_info(1) comanda:
$ srec_info exemplu.srec
Format: Motorola S-Record
Antet: dispozitiv de legătură pentru lanț de scule extra-whizz
Adresa de început a execuției: 0x00200000
Date: 0x200000 - 0x32AAEF
$
În loc să măcelăriți fișierul de comandă a linkerului, compensați doar adresele:
srec_cat infile -decupare 0x200000 0x300000 -offset −0x200000
-o outfile
Rețineți că offset-ul dat este negativ, are ca efect scăderea acelei valori din
toate adresele din înregistrările de intrare, pentru a forma adresele înregistrărilor de ieșire. În acest caz,
mutând imaginea înapoi la zero.
Acest exemplu demonstrează, de asemenea, modul în care filtrele de intrare pot fi înlănțuite: mai întâi
crop și apoi offset, totul într-o singură comandă, fără a fi nevoie de fișiere temporare.
Dacă tot ceea ce doriți să faceți este să compensați datele pentru a începe de la adresa zero, aceasta poate fi
automatizat, astfel încât nu trebuie să cunoașteți în prealabil adresa minimă, prin utilizarea srec_cat's
capacitatea de a calcula unele lucruri pe linia de comandă:
srec_cat infile -offset − -minimum‐adr infile
-o outfile
Observați spațiile de fiecare parte a semnului minus, acestea sunt obligatorii.
Ce La Arunca Departe
Există momente când trebuie să excludeți un interval mic de adrese dintr-un fișier de încărcare EPROM,
mai degrabă decât să dorești să păstrezi un interval mic de adrese. The -exclude filtrul poate fi folosit pentru
acest scop.
De exemplu, dacă doriți să excludeți domeniul de adrese în care numărul de serie al unui
dispozitivul încorporat este păstrat, să spunem 0x20 octeți la 0x100, ați folosi o comandă ca aceasta:
srec_cat input.srec -exclude 0x100 0x120 -o output.srec
ieșire.srec fișierul va avea o gaură în date în locațiile necesare.
Rețineți că le puteți avea pe ambele -a decupa și -exclude pe aceeași linie de comandă, oricare funcționează
mai natural pentru situația dvs.
Discontinuu Adresă Ranges
Intervalele de adrese nu trebuie să fie un singur interval, puteți construi un interval de adrese folosind
mai mult de o singură pereche.
srec_cat infile -decupați 0x100 0x200 0x1000 0x1200
-o outfile
Acest filtru are ca rezultat date de la 0x100..0x1FF și date de la 0x1000..0x1200 pentru a trece
prin, restul este aruncat. Acesta este mai eficient decât înlănțuirea a -a decupa si un
-exclude se filtrează împreună.
IN MISCARE LUCRURI ÎN JURUL
De asemenea, este posibilă schimbarea adresei înregistrărilor de date, atât înainte, cât și înapoi.
De asemenea, este posibil să rearanjați locul în care înregistrările de date sunt plasate în memorie.
Compensa Filtru
-offset=număr filtrul operează pe adresele înregistrărilor. Dacă numărul este pozitiv
adresele se deplasează cu atâția octeți mai sus în memorie, valorile negative se deplasează mai jos.
srec_cat infile -decupare 0x200000 0x300000 -offset −0x200000
-o outfile
Exemplul de mai sus mută blocul de date de 1 MB la 0x200000 la zero (decalajul este
negativ) și elimină restul datelor.
Byte pompare
Există momente când octeții din date trebuie să fie schimbați, conversia între
date endian și little‐endian de obicei.
srec_cat infile -byte‐swap 4 -o outfile
Aceasta inversează octeții în valori de 32 de biți (4 octeți). Valoarea implicită, dacă nu furnizați o lățime,
este de a inversa octeții în valori de 16 biți (2 octeți). De fapt, poți folosi orice valoare ciudată
ca, nici măcar nu trebuie să fie o putere de 2. Poate că 64 de biți (8 octeți) pot fi folositori
intr-o zi.
Binar producție
Trebuie să fiți atenți la fișierele binare la ieșire, deoarece găurile sunt umplute cu zerouri.
Programul dvs. de 100 kB din partea de sus a memoriei adresate pe 32 de biți va crea un fișier de 4 GB. Vedea
srec_binary(5) pentru a înțelege și a evita această problemă, de obicei cu -decalaj filtru.
Despicare an Imagine
Dacă aveți o magistrală de date pe 16 biți, dar utilizați două EPROM-uri pe 8 biți pentru a vă păstra firmware-ul,
puteți genera imaginile pare și impare utilizând -Despică filtru. Presupunând că dvs
firmware-ul este în firmware.hex fișier, utilizați următoarele:
srec_cat firmware.hex -split 2 0 -o firmware.even.hex
srec_cat firmware.hex -split 2 1 -o firmware.odd.hex
Acest lucru va avea ca rezultat cele două imagini EPROM necesare. Rețineți că adresele de ieșire sunt
împărțit la multiplu divizat, deci dacă imaginile EPROM sunt la un anumit decalaj (să zicem
0x10000, în exemplul următor), trebuie să eliminați offset-ul și apoi să îl înlocuiți...
srec_cat firmware.hex
-offset −0x10000 -split 2 0
-offset 0x10000 -o firmware.even.hex
srec_cat firmware.hex
-offset −0x10000 -split 2 1
-offset 0x10000 -o firmware.odd.hex
Observați cum abilitatea de a aplica mai multe filtre simplifică ceea ce altfel ar fi mult
scenariu mai lung.
striping
O a doua utilizare pentru -Despică filtrul este striping de memorie.
Nu trebuie să vă împărțiți în părți late de octeți, puteți alege alte dimensiuni. Este comun să
doriți să convertiți date de 32 de biți în două seturi de date de 16 biți.
srec_cat firmware.hex -split 4 0 2 -o firmware.01.hex
srec_cat firmware.hex -split 4 2 2 -o firmware.23.hex
Acest lucru este relativ simplu de înțeles, dar puteți folosi dungi și mai largi.
În acest exemplu următor, hardware-ul necesită ca blocurile de 512 de octeți să alterneze între 4
EPROM-uri. Generarea celor 4 imagini se va face după cum urmează:
srec_cat firmware.hex -split 0x800 0x000 0x200 -o firmware.0.hex
srec_cat firmware.hex -split 0x800 0x200 0x200 -o firmware.1.hex
srec_cat firmware.hex -split 0x800 0x400 0x200 -o firmware.2.hex
srec_cat firmware.hex -split 0x800 0x600 0x200 -o firmware.3.hex
Asimetric striping
Un exemplu mai ciudat de striping este microcontrolerul Microchip dsPIC33F, care are un
model ciudat de stocare a memoriei și sunt capabili să stocheze 3 octeți într-o adresă care ar trebui
conțin doar 2 octeți. Rezultatul este un fișier hex care a umplut cu zero octetul superior (micul
endian), și toate adresele sunt dublate față de ceea ce sunt în cip. Aici este un
exemplu:
S1130000000102000405060008090A000C0D0E0098
S1130010101112001415160018191A001C1D1E00C8
S1130020202122002425260028292A002C2D2E00F8
S1130030303132003435360038393A003C3D3E0028
Pentru a scăpa de cei 00 de octeți de umplutură, lăsând doar cei 3/4 de octeți semnificativi, utilizați și
filtrul split, cu suplimentar lățime argument, cam asa:
srec_cat example.srec -split 4 0 3 -o no_dross.srec
Rezultă un fișier cu cei 00 octeți de completare eliminați. Arata cam asa:
S113000000010204050608090A0C0D0E1011121451
S1130010151618191A1C1D1E2021222425262829EC
S11300202A2C2D2E30313234353638393A3C3D3E87
Observați cum adresele sunt, de asemenea, 3/4 din dimensiune. Puteți inversa acest lucru folosind
-nedespărțit și -umplere=0 Filtre.
Nedespărțire imagini
Filtrul nedivizat poate fi folosit pentru a inversa efectele filtrului divizat. Rețineți că
intervalul de adrese este extins lăsând găuri între dungi. Folosind toate dungile,
intrarea completă este reasamblată, fără găuri.
srec_cat -o firmware.hex
firmware.even.hex -unsplit 2 0
firmware.odd.hex -unsplit 2 1
Exemplul de mai sus inversează exemplul anterior al magistralei de date pe 16 biți. În general, te-ai despărțit
cu aceiași parametri cu care v-ați împărțit.
UMPLERE THE PALATE
Adesea, fișierele de încărcare EPROM vor avea „găuri” în ele, locuri în care compilatorul și linkerul au făcut-o
nu pune nimic. Pentru unele scopuri, acest lucru este în regulă, iar pentru alte scopuri trebuie să facă ceva
se face cu găurile.
Umple Filtru
Este posibil să completați spațiile libere acolo unde datele dvs. nu se află. Cel mai simplu exemplu de
aceasta umple întreaga EPROM:
srec_cat infile -umpleți 0x00 0x200000 0x300000 -o outfile
Acest exemplu umple găurile, dacă există, cu zerouri. Trebuie să specificați un interval - cu a
Spațiu de adrese pe 32 de biți, umplând totul generează mare încărcați fișiere.
Dacă doriți doar să completați golurile din datele dvs. și nu doriți să umpleți întregul EPROM,
încerca:
srec_cat infile -umpleți 0x00 -peste infile -o outfile
Acest exemplu demonstrează faptul că oriunde poate fi specificat un interval de adrese,
-peste și -în pot fi utilizate opțiuni.
Neumplutură il Blanks
Este obișnuit să fie nevoie să „dezcompleți” o imagine EPROM după ce o citiți de pe un cip. Obișnuit,
va fi avut toate găurile umplute cu 0xFF (zonele din EPROM pe care nu le programați arată
ca 0xFF când le citiți înapoi).
Pentru a scăpa de toți octeții 0xFF din date, utilizați acest filtru:
srec_cat infile -unfill 0xFF -o outfile
Acest lucru va scăpa toate octeții 0xFF, inclusiv cei pe care i-ați dorit de fapt acolo.
Există două moduri de a face față acestui lucru. În primul rând, puteți specifica o lungime minimă de rulare pentru
anulați umplerea:
srec_cat infile -descărcați 0xFF 5 -o outfile
Aceasta spune că rulările de 1 până la 4 octeți ai 0xFF sunt OK și că o gaură ar trebui creată numai
pentru rulări de 5 sau mai mulți octeți 0xFF la rând. A doua metodă este de a reumple peste
goluri intermediare:
srec_cat outfile -umpleți 0xFF -peste outfile
-o outfile2
Metoda pe care o alegeți depinde de nevoile dvs. și de forma datelor din EPROM.
Poate fi necesar să combinați ambele tehnici.
Adresă Gamă umplutură
Unele formate de date au o lățime de 16 biți și se completează automat cu octeți 0xFF dacă este
necesar pentru a completa cealaltă jumătate a unui cuvânt care nu se află în date. Dacă ai nevoie să
completați cu o valoare diferită, puteți utiliza o comandă ca aceasta:
srec_cat infile -umple 0x0A
-în infile - umplutură de gamă 2
-o outfile
Acest lucru oferă filtrului de umplere un interval de adrese calculat din detaliile fișierului de intrare.
Intervalul de adrese reprezintă toate intervalele de adrese acoperite de datele din infile, extins
în jos (dacă este necesar) la începutul fiecărui sub-gamă la un multiplu de 2 octeți și extins
în sus (dacă este necesar) la sfârșitul fiecărui sub-gamă până la un multiplu de 2 octeți. Funcționează și asta
pentru multipli mai mari, cum ar fi limitele paginilor de 1 kB ale cipurilor flash. Această umplutură de interval de adrese
funcționează oriunde este necesar un interval de adrese.
Umple implementate cu Drepturi de autor
Este posibil să completați porțiuni neutilizate ale EPROM-ului dvs. cu un mesaj de drepturi de autor repetat.
Oricine încearcă să facă inginerie inversă a EPROM-urilor dvs. va vedea notificarea privind drepturile de autor în
editorul lor hex.
Acest lucru se realizează cu două surse de intrare, una dintr-un fișier de date și una care este
generate din mers.
srec_cat infile
-generați '(' 0 0x100000 -minus -înăuntru infile ')'
-repeat‐string 'Copyright (C) 1812 Ceaikovski. '
-o outfile
Observați intervalul de adrese pentru generarea datelor: ia intervalul de adrese al dvs
EPROM, în acest caz 1MB începând de la 0, și scade din acesta intervalele de adrese utilizate de
fișierul de intrare.
Dacă doriți să scrieți acest lucru cu anul curent (pentru că 1812 este puțin depășit), utilizați
capacitatea de înlocuire a ieșirii shell-ului (ticurile înapoi):
srec_cat infile
-generați '(' 0 0x100000 -minus -înăuntru infile ')'
-repeat‐string "Drepturi de autor (C) `data +%Y` Ceaikovski."
-o outfile
Șirul specificat se repetă iar și iar, până când a umplut toate găurile.
ofuscator implementate cu Zgomot
Uneori doriți să vă umpleți imaginile EPROM cu zgomot, pentru a ascunde unde sunt datele reale
se oprește și pornește. Puteți face acest lucru cu -umplere aleatorie filtru.
srec_cat infile -random‐fill 0x200000 0x300000
-o outfile
Funcționează la fel ca -completati filtru, dar folosește numere aleatorii în loc de un octet constant
valoare.
Umple cu pe 16 biți Cuvinte
Când umplerea imaginii cu o valoare constantă de octet nu funcționează și aveți nevoie de o constantă
În schimb, valoarea cuvântului pe 16 biți, utilizați -repetare-date generator, care durează în mod arbitrar
secvență de octeți de utilizat ca model de umplere:
srec_cat infile
-generator '(' 0x200000 0x300000 -minus -în infile ')'
-repetare-date 0x1B 0x08
-o outfile
Observați cum intervalul de adrese al generatorului evită din nou intervalele de adrese ocupate de
il infiledatele lui. Trebuie să înțelegi îndian-ness corect.
INSERARE CONSTANT DATE
Din când în când veți dori să introduceți date constante sau date care nu sunt produse de dvs
compilator sau asamblator, în imaginile dvs. de încărcare EPROM.
Binar Mijloace literal
O modalitate simplă este să aveți informațiile dorite într-un fișier. Pentru a introduce fișierul
conținutul literal, fără interpretare a formatului, utilizați binar formatul de intrare:
srec_cat infile -binar -o outfile
Probabil va fi necesar să folosiți un compensa filtru pentru a muta datele acolo unde dvs
chiar îl vreau în imagine:
srec_cat infile -binar -offset 0x1234 -o outfile
De asemenea, este posibil să utilizați intrarea standard ca sursă de date, ceea ce se pretează
fiind scenaristă. De exemplu, pentru a introduce data și ora curente într-un fișier de încărcare EPROM,
ai putea folosi o teava:
data | srec_cat - -bin -offset 0xFFE3 -o outfile
Numele de fișier special „-” înseamnă a citi din intrarea standard. Ieșirea lui data
comanda are întotdeauna 29 de caractere, iar offset-ul afișat o va plasa în partea de sus a a
Imagine EPROM de 64 KB.
Repetând Odată
Umple implementate cu Drepturi de autor secțiunea, de mai sus, arată cum să repetați un șir din nou și din nou. Noi
poate folosi o singură repetare pentru a introduce un șir o singură dată.
srec_cat -generate 0xFFE3 0x10000 -repeat‐string „`date`”
-o outfile
Observați cum intervalul de adrese pentru generarea datelor se potrivește exact cu lungimea
data(1) dimensiunea de ieșire. Puteți, desigur, să adăugați fișierul de intrare la cele de mai sus srec_cat(1)
comandă pentru a conecta imaginea EPROM împreună cu data și ora.
Se introduce A Lung
O altă posibilitate este să adăugați numărul de comitere Subversion la imaginea dumneavoastră EPROM. In acest
de exemplu, o inserăm o valoare little-endian de 4 octeți la adresa 0x0008. The
Numărul de comitere al subversiei este în $versiune variabila shell în acest exemplu:
srec_cat -generate 0x0008 0x000C -l‐e‐constant $versiunea 4
infile -excludeți 0x0008 0x000C
-o outfile
Rețineți că folosim un filtru pentru a ne asigura că există o gaură în intrare unde numărul versiunii
merge, doar în cazul în care linkerul a pus ceva acolo.
DATE DESPRE NOI THE DATE
Este posibil să adăugați o varietate de date despre date la ieșire.
Sume de control
-big‐endian‐checksum‐negativ filtrul poate fi folosit pentru a însuma datele și apoi introduceți
negativ al sumei în date. Acest lucru are ca efect însumarea la zero atunci când
Suma de control în sine este însumată, cu condiția ca lățimea sumei să se potrivească cu lățimea valorii introduse.
srec_cat infile
-decupează 0 0xFFFFFC
-random‐fill 0 0xFFFFFC
-b-e-checksum-neg 0xFFFFFC 4 4
-o outfile
În acest exemplu, avem o EPROM în cel mai mic megaoctet de memorie. Filtrul -crop
asigură că însumăm doar datele din EPROM și nu oriunde altundeva. The
-filtrul de umplere aleatorie umple toate golurile rămase în date cu valori aleatorii. În cele din urmă, -b-
filtrul e‐checksum‐neg inserează o sumă de control de 32 de biți (4 octeți) în format big‐endian în ultimul
4 octeți ai imaginii EPROM. Desigur, există o versiune little endian a acestui filtru ca
bine.
Codul dvs. încorporat poate verifica EPROM-ul folosind cod C similar cu următorul:
nesemnat lung *begin = (nesemnat lung *)0;
nesemnat lung *end = (nesemnat lung *)0x100000;
sumă lungă nesemnată = 0;
în timp ce (început < sfârșit)
suma += *begin++;
dacă (suma != 0)
{
oops
}
-big-endian-checksum-bitnot filtrul este similar, cu excepția faptului că însumarea peste suma de control
ar trebui să producă o valoare de toți-un-biți (-1). De exemplu, folosind pantaloni scurți mai degrabă decât lungi:
srec_cat infile
-decupare 0 0xFFFFFE
-umpleți 0xCC 0x00000 0xFFFFFE
-b-e-checksum-neg 0xFFFFFE 2 2
-o outfile
Presupunând că ați ales filtrul de endian-ness corect, codul dvs. încorporat poate verifica EPROM-ul
folosind cod C similar cu următorul:
nesemnat scurt *begin = (nesemnat scurt *)0;
unsigned short *end = (unsigned short *)0x100000;
sumă scurtă nesemnată = 0;
în timp ce (început < sfârșit)
suma += *begin++;
dacă (suma != 0xFFFF)
{
oops
}
Există, de asemenea, o -b-e-checksum-pozitiv filtru și un filtru little-endian potrivit, care
inserează suma simplă și care ar fi verificată în C folosind un test de egalitate.
srec_cat infile
-decupează 0 0xFFFFFF
-umpleți 0x00 0x00000 0xFFFFFF
-b-e-checksum-neg 0xFFFFFF 1 1
-o outfile
Presupunând că ați ales filtrul de endian-ness corect, codul dvs. încorporat poate verifica EPROM-ul
folosind cod C similar cu următorul:
caracter nesemnat *begin = (caracter nesemnat *)0;
unsigned char *end = (unsigned char *)0xFFFFF;
suma de caractere nesemnată = 0;
în timp ce (început < sfârșit)
suma += *begin++;
dacă (suma != *sfârșit)
{
oops
}
În cazul pe 8 biți, nu contează dacă utilizați big‐endian sau little‐endian
filtru.
Rapid Hex-Dump
Puteți să vă uitați la suma de verificare a datelor dumneavoastră, utilizând formatul de ieșire „hex-dump”. Aceasta este
util pentru a analiza valorile calculate sau pentru depanarea unui srec_cat(1) comanda înainte
imortalizându-l într-un scenariu.
srec_cat infile
-decupare 0 0x10000
-umpleți 0xFF 0x0000 0x10000
-b-e-checksum-neg 0x10000 4
-decupare 0x10000 0x10004
-o - -hex‐dump
Această comandă citește în fișier, verifică datele și plasează suma de control la 0x10000,
decupează rezultatul pentru a conține doar suma de control, apoi tipărește suma de control pe
ieșire standard într-un format clasic de dump hexazecimal. Numele de fișier special „-” înseamnă
„ieșirea standard” în acest context.
ciclic Redundanţă Verificări
Sumele simple de verificare aditive au o serie de limitări teoretice, legate de erori
pot și nu pot detecta. Metodele CRC au mai puține probleme.
srec_cat infile
-decupează 0 0xFFFFFC
-umpleți 0x00 0x00000 0xFFFFFC
-b‐e‐crc32 0xFFFFFC
-o outfile
În exemplul de mai sus, avem o EPROM în cel mai mic megaoctet de memorie. The -a decupa filtru
asigură că însumăm doar datele din EPROM și nu oriunde altundeva. The -completati
filtrul umple toate golurile rămase în date. În cele din urmă, cel -b-e-checksum-neg inserții filtrante a
Sumă de control de 32 de biți (4 octeți) în format big-endian în ultimii 4 octeți ai imaginii EPROM.
Desigur, există și o versiune little endian a acestui filtru.
Suma de control este calculată utilizând standardul industrial CRC pe 32 de biți. Pentru că SRecord este
open source, puteți citi oricând codul sursă pentru a vedea cum funcționează. Sunt multe non-
Versiuni GPL ale acestui cod disponibile pe Internet și potrivite pentru încorporare
firmware proprietar.
Există, de asemenea, un CRC pe 16 biți disponibil.
srec_cat infile
-decupare 0 0xFFFFFE
-umpleți 0x00 0x00000 0xFFFFFE
-b‐e‐crc16 0xFFFFFE
-o outfile
Suma de control este calculată folosind formula CCITT. Pentru că SRecord este open source, tu
poate citi întotdeauna codul sursă pentru a vedea cum funcționează. Există multe versiuni non-GPL ale
acest cod disponibil pe Internet și potrivit pentru încorporarea în firmware-ul proprietar.
Puteți să vă uitați la CRC-ul datelor dvs., utilizând formatul de ieșire „hex-dump”.
srec_cat infile
-decupare 0 0x10000
-umpleți 0xFF 0x0000 0x10000
-b-e-crc16 0x10000
-decupare 0x10000 0x10002
-o - -hex‐dump
Această comandă citește în fișier, calculează CRC-ul datelor și plasează CRC la
0x10000, decupează rezultatul pentru a conține numai CRC, apoi tipărește suma de control pe
ieșire standard într-un format clasic de dump hexazecimal.
Unde Is My Date?
Există mai multe proprietăți ale imaginii dumneavoastră EPROM pe care ați putea dori să le introduceți în
de date.
srec_cat infile -b‐e‐minimum 0xFFFE 2 -o outfile
Exemplul de mai sus inserează adresa minimă a datelor (scăzut de apă) în date, ca
doi octeți în ordinea big-endian la adresa 0xFFFE. Aceasta include minimul în sine. Dacă
datele conțin deja octeți la adresa dată, trebuie să utilizați un filtru de excludere.
Numărul de octeți este implicit 4.
Există, de asemenea, o -l‐e‐minim filtru pentru introducerea valorilor little-endian și încă două
filtrele numite -b-e-exclusiv-minimum și -l-e-exclusiv-minimum care nu includ
minim în sine în calculul adresei minime de date.
srec_cat infile -b‐e‐maximum 0xFFFFFC 4 -o outfile
Exemplul de mai sus inserează adresa maximă a datelor (înalt de apă + 1, la fel ca
intervale de adrese) în date, ca patru octeți în ordinea big-endian la adresa 0xFFFFFC.
Aceasta include maximul în sine. Dacă datele conțin deja octeți la data
adresa, trebuie să utilizați un -exclude filtru. Numărul de octeți este implicit 4.
Există, de asemenea, o -l‐e‐maximum filtru pentru introducerea valorilor little-endian și încă două
filtrele numite -b-e-exclusiv-maximum și -l-e-exclusiv-maxim care nu includ
maxim în sine în calculul adresei maxime de date.
srec_cat infile -b‐e‐lungime 0xFFFFFC 4 -o outfile
Exemplul de mai sus inserează lungimea datelor (înalt de apă + 1 − scăzut de apă) în
date, ca patru octeți în ordinea big-endian la adresa 0xFFFFFC. Aceasta include lungimea
în sine. Dacă datele conțin deja octeți la locația de lungime, trebuie să utilizați un
-exclude filtru. Numărul de octeți este implicit 4.
Există, de asemenea, o -l‐e‐lungime filtrul pentru introducerea unei lungimi little‐endian, iar -fi-
lungime-exclusiv și -l-e-lungime-exclusiv filtre care nu includ lungimea în sine
în calcul.
Ce Format Is Acest?
Puteți obține o varietate de informații despre un fișier de încărcare EPROM utilizând srec_info(1)
comanda. De exemplu:
$ srec_info exemplu.srec
Format: Motorola S-Record
Antet: "http://srecord.sourceforge.net/"
Adresa de început a execuției: 00000000
Date: 0000 - 0122
0456 - 0FFF
$
Acest exemplu arată că fișierul este un Motorola S-Record. Textul din antetul fișierului este
tipărită, împreună cu adresa de început a execuției. Secțiunea finală arată adresa
intervale care conțin date (limita superioară a fiecărui subdomeniu este inconcluziv, mai degrabă decât cel
exforma concluzivă utilizată pe linia de comandă.
$ srec_info oarecare-fișier-ciudat.hex -ghici
Format: Signetics
Date: 0000 - 0122
0456 - 0FFF
$
Exemplul de mai sus ghicește formatul fișierului de încărcare EPROM. Nu este infailibil, dar de obicei
înțelege bine. Poți să folosești -ghici oriunde ai da un format explicit, dar acesta
tinde să fie mai lent și din acest motiv nu este recomandat. De asemenea, pentru construirea automată
sisteme, doriți erori grele cât mai curând posibil; dacă un fișier nu este în așteptarea
format, vrei să se debaraseze.
MANGLING THE DATE
Este posibilă modificarea valorilor octeților de date în mai multe moduri.
srec_cat infile -și 0xF0 -o outfile
Exemplul de mai sus realizează un AND pe biți a octeților de date cu masca 0xF0. The
adresele înregistrărilor sunt neschimbate. De fapt, nu mă pot gândi la o utilizare pentru acest filtru.
srec_cat infile -sau 0x0F -o outfile
Exemplul de mai sus realizează un SAU pe biți a octeților de date cu biții 0x0F. The
adresele înregistrărilor sunt neschimbate. De fapt, nu mă pot gândi la o utilizare pentru acest filtru.
srec_cat infile -xor 0xA5 -o outfile
Exemplul de mai sus realizează un OR exclusiv pe biți a octeților de date cu biții 0xA5.
Adresele înregistrărilor sunt neschimbate. Puteți folosi acest lucru pentru a ofusca conținutul
EPROM-ul dvs.
srec_cat infile -nu -o outfile
Exemplul de mai sus realizează NU pe biți dintre octeții de date. Adresele înregistrărilor sunt
neschimbat. Securitate prin obscuritate?
DREPTURI DE AUTOR
srec_cat Versiunea 1.58
Drepturi de autor (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
2010, 2011 Peter Miller
srec_cat programul vine cu ABSOLUT NU GARANȚIE; pentru detalii folosiți „srec_cat
-Versiune Licență'comandă. Acesta este software gratuit și sunteți binevenit să îl redistribuiți
sub anumite conditii; pentru detalii folosiți „srec_cat -Versiune Licență'comandă.
Utilizați srec_examples online folosind serviciile onworks.net