Tak jsem se inspirovala dokumentem od Zmije a stvořila jsem tohle:
Cčkový soubor struct.c:
kód:
#include <linux/sched.h>
#define offsetof(s, m) __builtin_offsetof (s, m)
typedef struct task_struct Ttask_struct;
int state_off = offsetof(Ttask_struct, state);
int mmu_pid_off = offsetof(Ttask_struct, mmu_pid);
int counter_off = offsetof(Ttask_struct, counter);
int priority_off = offsetof(Ttask_struct, priority);
int tstack_off = offsetof(Ttask_struct, tstack);
int timeout_off = offsetof(Ttask_struct, timeout);
který se zkompiluje sdcc.exe -mz80 -Iinclude -S struct.c do struct.asm:
kód:
;--------------------------------------------------------
; File Created by SDCC : free open source ANSI-C Compiler
; Version 3.6.0 #9615 (MINGW32)
;--------------------------------------------------------
.module struct
.optsdcc -mz80
a ten se následně přes grep -A1 __xinit__ struct.asm | tr --delete '\n' | sed -e 's/__xinit__/\n/g' -e 's/:/ = /g' -e 's/\t.dw #//g' > include/struct.inc profiltruje do struct.inc:
Tak se mi konečně podařilo dopsat poslední důležité volání jádra sys_execve a už můžu i spustit nový program. Ještě včera jsem mohla jen forkovat.
Pro začátek obligátní Hello world, init a shell ještě nemám, ale funguje to, *nix na Z80.
Ale ten SDCC je hrůza, někdo mi zase může vykládat, jak je C efektivní, skoro jako assembler. Možná na ARMu, ale ne na Z80. Se zavřenýma očima bych to v assembleru napsala poloviční, s otevřenýma třetinový. Sotva se mi to do těch 56KB vejde, zbývá jen asi 400B místa.
Budu muset něco do assembleru přepsat, ještě mi tam pár věcí chybí.
Do světa se s tím nějak nechystám, kvalitou to na rozdávání moc není, stále nacházím chyby a navíc k čemu by to někomu bylo, když je to šité na hardware, který mám jen já?
Portem GCC myslíš co, ono existuje GCC pro Z80?
Trošku jsem s tím *nixem pokročila. Dodělala jsem do kernelu pár driverů. Taky funkce pro job control, ale ještě musím dodělat job control do shellu. Execve jsem rozšířila o možnost spouštět interpretované skripty (viz ukázka skriptu ah ve výpisu). Aby na to bylo místo, musela jsem už docela velkou část kernelu přepsat do assembleru. Libc se taky rozrostla, naposledy o funkce pro konverzi času. Přibyla spousta utilit, největší fsck má skoro 10KB. Program count, spuštěný na pozadí v ukázce, jen počítá ovečky, slouží k testování multitasku a zatěžování procesoru. Dokonce mám už i celoobrazovkový editor ue. Akorát jsem musela ten původní z Public domain řádně překopat, aby byl použitelný na sériovém terminálu a nepřekresloval při každé klávese celou obrazovku. No, už se to začíná zaplňovat, za chvíli mi bude 128KB disk malý.
Založen: Jan 12, 2009 Příspěvky: 7100 Bydliště: Plzeňsko
Zaslal: ne leden 15 2017, 17:31 Předmět:
Kdybych 40 let denně cvičil, taky bych měl svaly jako Martin Maxa. _________________ Sháním hasičák s CO2 "sněhový", raději funkční.
(Nemusí mít platnou revizi.)
(Celkově budu raději, když se to obejde bez papírů.)
Ještě před rokem jsem se plácala úplně bez energie a nic mě nebavilo, pak mě chytlo tohle a úplně tím žiju. Čas si člověk udělá, když chce, stačí si upravit ty priority.
já bych nevěděl, kde začít
třeba jak sis nastudovala portaci, tak starého linuxu?
tvoje znalosti Céčka a ASM si nabrala zřejmě víceletou praxí, já si připadám, že poslední roky v čistým C dělám víceméně pořád dokola to samý...
No vidíš, tak v C jsi napřed, já v C začala programovat až teď, dřív jsem programovala jen v assembleru.
Nevím, co přesně máš na mysli tou portací a jejím studováním. Prostě jsem prolejzala zdrojáky starýho linuxu a snažila jsem se v tom vyznat. K tomu se mi nepovedlo najít žádnou dokumentaci, všechno je až k verzi 2.0 a výše, ale i to trochu pomůže s pochopením. A pak taky zdrojáky unixu V6, k těm existuje i nějaká dokumentace od Thompsona a Ritchieho a povídání od J. Lionse. Přečetla jsem knížku The Design of the Unix Operating System od Maurice Bacha, ta je taky k novější verzi unixu, ale tam se toho moc nezměnilo. Četla jsem i Tanenbaumovo Operating Systems Design and Implementation o minixu. A pár dalších knížek. No a pak jsem to začala postupně přepisovat pro ten můj hardware. Některé části se daly převzít jen s malýma úpravama, třeba scheduler nebo funkce kolem souborového systému z linuxu. Některé jsem musela překopat úplně od základu, protože se vázaly na hw, třeba přepínání procesů, správa paměti, obsluhy přerušení, signály, přenosy dat mezi kernelem a procesama... Unix V6 je mnohem jednodušší než linux, tak z unixu jsem se snažila brát "jednoduchost" a z linuxu funkce, které unix neměl a přijdou mi užitečné. Hlavně unix V6 běžel na procesoru s 64KB adresním prostorem jako má Z80, i když byl 16-bitovej a podobal se spíš ARMu, byl teda napsanej hodně úsporně. Takže z unixu mám převzatý hlavně datový struktury, protože ty jsou v linuxu dost paměťově rozežraný. Na ty struktury jsem se ale snažila naroubovat některé funkce z linuxu, protože byly třeba líp řešený než v unixu. Tohle kombinování si samozřejmě taky vyžádalo rozsáhlý úpravy kódu. Linux jako takový, ani ten úplně první, se do 64KB na osmibitu prostě nacpat nedá a unix V6 je zase takový moc omezený nebo jak to nazvat. (Prapůvodně jsem začala portovat minix 1.1, ale ten je ještě omezenější.) Prostě je to takový kompromisní slepenec z unixu a linuxu.
Časy uváděny v GMT + 1 hodina Jdi na stránku Předchozí1, 2, 3, 4Další
Strana 3 z 4
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.