Apple představil (YouTube) telefony iPhone 17 Pro a iPhone 17 Pro Max, iPhone 17 a iPhone Air, sluchátka AirPods Pro 3 a hodinky Watch Series 11, Watch SE 3 a Watch Ultra 3.
Realtimová strategie Warzone 2100 (Wikipedie) byla vydána ve verzi 4.6.0. Podrobný přehled novinek, změn a oprav v ChangeLogu na GitHubu. Nejnovější verzi Warzone 2100 lze již instalovat také ze Snapcraftu a Flathubu.
Polské vývojářské studio CD Projekt Red publikovalo na Printables.com 3D modely z počítačové hry Cyberpunk 2077.
Organizátoři konference LinuxDays 2025 vydali program a zároveň otevřeli registrace. Akce se uskuteční 4. a 5. října na FIT ČVUT v pražských Dejvicích, kde vás čekají přednášky, workshopy, stánky a spousta šikovných lidí. Vstup na akci je zdarma.
Uživatelé komunikátoru Signal si mohou svá data přímo v Signalu bezpečně zálohovat a v případě rozbití nebo ztráty telefonu následně na novém telefonu obnovit. Zálohování posledních 45 dnů je zdarma. Nad 45 dnů je zpoplatněno částkou 1,99 dolaru měsíčně.
Server Groklaw, zaměřený na kauzy jako právní spory SCO týkající se Linuxu, skončil před 12 lety, resp. doména stále existuje, ale web obsahuje spam propagující hazardní hry. LWN.net proto v úvodníku připomíná důležitost zachovávání komunitních zdrojů a upozorňuje, že Internet Archive je také jen jeden.
Jakub Vrána vydal Adminer ve verzi 5.4.0: "Delší dobu se v Admineru neobjevila žádná závažná chyba, tak jsem nemusel vydávat novou verzi, až počet změn hodně nabobtnal."
V Německu slavnostně uvedli do provozu (en) nejrychlejší počítač v Evropě. Superpočítač Jupiter se nachází ve výzkumném ústavu v Jülichu na západě země, podle německého kancléře Friedricha Merze otevírá nové možnosti pro trénování modelů umělé inteligence (AI) i pro vědecké simulace. Superpočítač Jupiter je nejrychlejší v Evropě a čtvrtý nejrychlejší na světě (TOP500). „Chceme, aby se z Německa stal národ umělé inteligence,“ uvedl na
… více »V Berlíně probíhá konference vývojářů a uživatelů desktopového prostředí KDE Plasma Akademy 2025. Při té příležitosti byla oznámena alfa verze nové linuxové distribuce KDE Linux.
Byl vydán Debian 13.1, tj. první opravná verze Debianu 13 s kódovým názvem Trixie a Debian 12.12, tj. dvanáctá opravná verze Debianu 12 s kódovým názvem Bookworm. Řešeny jsou především bezpečnostní problémy, ale také několik vážných chyb. Instalační média Debianu 13 a Debianu 12 lze samozřejmě nadále k instalaci používat. Po instalaci stačí systém aktualizovat.
init
u.
Mám podezření, že zatímco pro sebe si jádro procesor přepne do big endian režimu, aplikace ho dostanou k dispozici v little endian módu, takže se mi nic nespustí. (A zkompilovat je jako little endian nepomůže, protože to je zase odmítne spouštět jádro – s chybou Exec format error
. Navíc tímhle směrem ani jít nechci.)
Dával jsem za init i tak jednoduchý program jako:
int main(void)
{
return 0;
}
(nebo třeba nekonečný cyklus), ale „návratová“ hodnota je vždycky 11 (Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
).
Nějaké tipy, nápady? :c) Předem díky!
Řešení dotazu:
Linux support The Allwinner A1X architecture is referred to as 'sunxi' in the Linux kernel source tree. The source code is available at GitHub. At the moment, stable and full hardware support is limited to 3.0.x and 3.4.x kernels. Recent Mainline Kernels run, but do not offer NAND Access an limited 3D-acceleration.zdroj Aka je konfigucia jadra pre preklad (posli subor s nastaveniami)? Ako prekladas ten program init?
make ARCH="arm" CROSS_COMPILE="armeb-linux-gnueabihf-" INSTALL_MOD_PATH="/usr/armeb-linux-gnueabihf"
Init kompiluji jednoduše:
armeb-linux-gnueabihf-gcc -static -o init init.c
Linux support The Allwinner A1X architecture is referred to as 'sunxi' in the Linux kernel source tree. The source code is available at GitHub.
Podpora The Allwinner A1X architecture Linuxom je oznacovana ako 'sunxi' (v zdrojovom strome Linuxoveho kodu jadra.A naco prekladat, preco nepouzit uz prelozene? Pouzi: linux-sunxi.org/Debian
A naco prekladat, preco nepouzit uz prelozene? Pouzi: linux-sunxi.org/DebianJsem asi slepý, ale která z těch distribucí tam je přeložena pro ARMEB?
Prekladas zle pre A10, vid: linux-sunxi.org/Linux_Kernel.V čem přesně špatně?
Jsem asi slepý, ale která z těch distribucí tam je přeložena pro ARMEB?linux-sunxi.org/Debian → wiki.debian.org/InstallingDebianOn/Allwinner
V čem přesně špatně?Zly zdroj bol tam pouzity, ak si chcel main-line kernel prekladat. Spravny> Mainline_Kernel_Howto Ak kompilujes s main-line Linux kernel, tak mas prekladat
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sunxi_defconfiga nie ako si Ty pouzival bez sunxi_defconfig. Resp. najprv si ho nastav, co potrebuje a potom si v moduloch ponastavuj co chces.
devtmpfs: error mounting -2Kód -2 znamená:
#define ENOENT 2 /* No such file or directory */Nechybí ti tam třeba /dev nebo něco takovýho? (mě se na domácím kompu asi 0.5s po tom devtmpfs spustí normálně udevd). Zhruba v tu dobu chce kernel soubor /dev/console. Pokud neexistuje (soubor nebo cesta), tak by mohl odmítnout boot. Toolchain (tedy i libc) sis nakompiloval sám? Init je standardně v /sbin/init (kernel myslím zkouší i /linuxrc a pár dalších). Vždycky můžeš zapnout debug (pokud byl ten kernel s pr_debug() zkompilován).
Nechybí ti tam třeba /dev nebo něco takovýho?Ano, to je dobrý postřeh, chybí. :c) Nicméně to není ten problém (jádro i tak různě reaguje na validní a nevalidní binárku initu) – po vytvoření adresáře (a přidání
rootfstype=ext2
do argumentů jádra):
…
[ 1.362144] ata1: SATA link down (SStatus 0 SControl 300)
[ 1.371609] VFS: Mounted root (ext2 filesystem) readonly on device 179:1.
[ 1.381027] devtmpfs: mounted
[ 1.384219] Freeing unused kernel memory: 200K (c0480000 - c04b2000)
[ 1.390577] This architecture does not have kernel memory protection.
[ 1.420708] Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
[ 1.420708]
[ 1.429884] Rebooting in 10 seconds..
Toolchain (tedy i libc) sis nakompiloval sám?Základ mi nakompiloval crossdev (gcc, glibc, binutils a možná ještě něco), zbytek jsem si tam doinstalovával normálně přes portage (emerge). Když pominu perl, tak tohle byla ta naprosto bezproblémová část – v Gentoo má člověk všechny tyhle věci bez práce. Jako init tam mám normálně openrc, ale to je přecijen docela velká věc, takže pro neúspěch testuji na mnohem jednodušších a staticky linkovaných programech (i bash jsem zkoušel). Ono jádro při svém spouštění jako první instrukci zavolá
setend be
(v arch/arm/kernel/head.S
), což procesor přepne do BE módu. Dokumentace říká:
Data accesses can be either little-endian or big-endian as controlled by the E bit in the Program Status Register.Což mě vede k tomu, že endianita je rozhodována per proces. Jinými slovy mám za to, že ty binárky mám zkompilované dobře (resp. jsem nezaznamenal nic, co by napovídalo opaku, ani známky, že by se to mohlo dát dělat nějak jinak) a že problém mám na straně jádra, které ten E bit nenastaví. To mi přijde divné, protože jistě nejsem první, kdo spouští Linux v big endianovém módu na bi-endianovém armu. Vyvozuji si z toho, že něco nedělám nebo dělám špatně. Koukal jsem několik dnů do jádra, ale neidentifikoval jsem bod, kdy jádro přestane držet procesor a začne běžet uživatelský proces (že bych si to zkusil hacknout a třeba zavolat setend nebo nahodit ten bit v PSR). A neumím programovat v assembleru, že bych si splácal jednoduchou binárku, která by si jako první zavolala
setend be
, a teprve pak začala něco dělat (ale stačilo by i skončit s nějakým identifikovatelným návratovým kódem). :c) (Což by bylo užitečné jako proof-of-concept, ne jako řešení.)
Nicméně to není ten problémTak aspoň se odstraní chybové hlášení. Já se teda setkal i s tím, že embedded jádra nevytvořily device nod v /dev a pak odmítly bootovat (a ty vyžaduješ pár nodů v kernel parametrech: "console=tty0 console=ttyS0").
Jinými slovy mám za to, že ty binárky mám zkompilované dobře (resp. jsem nezaznamenal nic, co by napovídalo opaku, ani známky, že by se to mohlo dát dělat nějak jinak) a že problém mám na straně jádra, které ten E bit nenastaví.Podle mě kernel v LE módu ten userspace nepouští, to by snad byl schopnej spustit i LE nakompilovanej init bez format erroru. Nejspíš by šlo udělat nějakej krátkej assert do kernelu, kterej by obsah toho flagu občas vypsal do konzole. Stejně tak pokud byl byl schopnej debugovat třeba přes JTAG, tak se můžeš rovnou kouknout přes GDB na obsah toho flagu. To by šlo udělat i v emulátoru, třeba v qemu. Přepnutí mezi userspace a kernelspace bývá v assemblerovejch souborech typu entry.S, ale těch zdrojů přechodu je mnoho (syscally, různá přerušení, MMU exception, opcode exception, FPU exception). Kdyžtak můžeš zkusit hledat makro ARM_BE8 (protože pokud existuje něco jako mixed mode, tak by se muselo přepínat).
A neumím programovat v assembleru, že bych si splácal jednoduchou binárkuV assembleru to je triviální, potřebuješ jen zavolat asm z céčkovýho kódu. Pro naučení syntaxe můžeš klidně vykrást kernel
asm volatile ("setend be" :::); while(1) { printf("hello world\n"); }Tak bude problem někde jinde. Jinak já bych tu binárku neukončoval, protože to pak bude znamenat že jí má kernel killnout ... A init nemůže být killnutej
setend
instrukci. Kompilátor začal prskat
/tmp/cc8hEYFq.s: Assembler messages:
/tmp/cc8hEYFq.s:37: Error: selected processor does not support ARM mode `setend be'
takže jsem trošku pohledal a poexperimentoval. Nakonec mám init jen o nekonečné smyčce (int main(void) { for (;;); return 0; }
), který mi běží. :c)
Nicméně důvod, proč jsem nevyzkoušel ten ASM kód dřív, je, že jsem chtěl, aby se tahle instrukce provedla pokud možno jako první/jedna z prvních. To běžný program nesplňuje – než se procesor dostane k první instrukci fce main, tak udělá spoustu věcí. Nicméně v průběhu řešení zmíněné chyby jsem si vzpomněl, že v Makefilu apexu (což je starší zavaděč) jsem viděl kompilaci bez stdlib, takže jsem zkonstruoval následující volání:
armeb-linux-gnueabihf-gcc -march=armv7-a -static -nostdlib cycle.c -o cycle
Přičemž potřeba jsou obě dodatečné volby. Bez -march
končím na Interrupted system call
. Ale odtud už to půjde snadno – akorát nechám všechno překompilovat, počínaje glibc.
Děkuji ti moc za pomoc, udělal jsi velkou radost. :c)
Nicméně důvod, proč jsem nevyzkoušel ten ASM kód dřív, je, že jsem chtěl, aby se tahle instrukce provedla pokud možno jako první/jedna z prvních.Jo to je fakt, ony tam jsou konstruktory a inicializace. I když nejspíš by šlo tu binárku modifikovat a přidat vlastní entry point.
Ale odtud už to půjde snadno – akorát nechám všechno překompilovat, počínaje glibc.Ony se dají optimalizace na procesor nastavit i v crosstoolu.
Děkuji ti moc za pomoc, udělal jsi velkou radost.Jo není zač, dej vědět zda to pomohlo.
Je jedno v com napises, procesor rozumie len binarnemu formatu specialnemu pre kazdy procesor - tj. instruktna sada procesora. (napr. pre x86).
Su dve typy prekladacov.
Priamy a nepriamy.
priamy: Source -> asambler -> BINARY
nepriamy: Source -> BINARY
Mozes i v ASM napisat init. Napriklad NASM (Hello world).
GCC asambler ma ATX syntax. Tj. zamene operandy ako zvyknu standardne asamblery. Lepsie sa ten asambler strojovo spracuva.
no ATX syntax: MOVE KAM, Z_KADIAL ATX SYNTAX: MOVE Z_KADIAL, KAM
gcc -S file.cti sice vygeneruje assembler z toho file.c, ale obsahuje jen main(). V linkeru se k tomu přidávají libc volání a věci jako inicializace polí a tak. Tazatel by musel opravit soubory typu crtbegin.o, crtend.o atd. Ty dodává gcc.
$ armeb-linux-gnueabihf-gcc -static trivial.c -o trivial
$ armeb-linux-gnueabihf-gcc -static -mbig-endian trivial.c -o trivial2
$ file trivial{,2}
trivial: ELF 32-bit MSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 3.2.0, not stripped
trivial2: ELF 32-bit MSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 3.2.0, not stripped
$ sha256sum trivial{,2}
18952e56d59dc00c0c15a9a384b2cf4febb07432a8e128c1d0ba0cd83867d85e trivial
18952e56d59dc00c0c15a9a384b2cf4febb07432a8e128c1d0ba0cd83867d85e trivial2
Bez komentáře. :-P (Prosím už nepiš žádné další rady podobného ražení. Děkuji za snahu, ale zjevně mě nikam nedovedeš…)
Tiskni
Sdílej: