Missa inte Amazon Primedays i Dagens fynd

Ett linux OS för ARM Cortex-A?

Permalänk

Ett linux OS för ARM Cortex-A?

Jag har byggt min egen ARM dator från grunden. Nu behöver jag ett linux OS för ARM Cortex-A.
Jag har försökt att bygga eget linux igenom att använda tillverkarens rekommendationer, men det verkar vara hopplöst. Det är manuell konfigurering hela tiden och hälften av deras kommandon verkar inte fungera.

Processorn är en STM32MP1.
Och deras manual hur man bygger eget linux finns här:
https://wiki.st.com/stm32mpu/wiki/STM32MPU_Developer_Package

Mitt mål är att bränna över Linux till något som heter Embedded Multi Media Card (eMMC) och sedan ska processorn bota upp från detta minne.

Men det borde väll finns något färdigt Linux OS för mitt mål?

Eller ska jag försöka ge mig på denna manual:
https://developer.arm.com/documentation/den0013/d/Building-Li...

Permalänk
Medlem
Visa signatur

Nerd is the new Cool

Permalänk
Skrivet av CyberNerd:

Med tanke på att det finns dom som har installerat Ubuntu på en STM32MP1 processor, så lär Arch Linux fungera också.

Men det verkar som att Arch har bara valt vissa processorer som dom stödjer dock.

Permalänk
Medlem
Skrivet av heretic16:

Men det borde väll finns något färdigt Linux OS för mitt mål?

”Starter kit” verkar väldokumenterat och verkar innehålla färdiga bilder att skriva till SD-kort.

Jag gissar att du missade en siffra i modellnummret eftersom jag inte hittade någon sådan.

Anledningen till att det finns fem olika starter kits för fem olika modeller är att i ARM-världen finns det (ännu) ingen standard för att detektera hårdvara. Och utvecklarkort innehåller ofta hårdvara som inte kan detekteras, man måste helt enkelt veta vad som sitter på kortet. På ett eller annat sätt måste man meckla in ett ”Device Tree” i Linux, antingen genom att bygga in det i kärnan eller skicka in det från bootloadern. DTS/DTB talar om vilken hårdvara kortet har. Processorfamiljen är den okomplicerade biten.

Om inte tillverkaren har skickat in sin DTS för kortet till Linus så får man skriva den själv eller gå till tillverkarens SDK och hämta den. Räkna inte med att en given DTS funkar med mainline Linux.

Så nej, det finns ofta inga bra alternativ till tillverkarnas Linux-byggen för viss hårdvara. Helt enkelt för att varje dist behöver anpassas mot exakt hårdvara.

Och sedan kommer förstås problemet med drivrutiner och hur mycket våld tillverkaren gjort på Linux för att få drivrutinerna att funka. Om man hackat för mycket får man inte merga drivrutinen i Linux main och då sitter man fast i gammal version och kommer sannolikt aldrig att ha resurser nog att uppgradera. Återigen blir det beroende på kort och vilken hårdvara som sitter på kortet.

Hela den soppan är ditt problem att reda ut, eftersom tillverkaren sannolikt inte kommer bry sig utöver de bilder och SDK de tillhandahåller. I bästa fall finns allt i upstream Linux och då går det mesta att lösa.

Permalänk
Skrivet av KAD:

”Starter kit” verkar väldokumenterat och verkar innehålla färdiga bilder att skriva till SD-kort.

Jag gissar att du missade en siffra i modellnummret eftersom jag inte hittade någon sådan.

Anledningen till att det finns fem olika starter kits för fem olika modeller är att i ARM-världen finns det (ännu) ingen standard för att detektera hårdvara. Och utvecklarkort innehåller ofta hårdvara som inte kan detekteras, man måste helt enkelt veta vad som sitter på kortet. På ett eller annat sätt måste man meckla in ett ”Device Tree” i Linux, antingen genom att bygga in det i kärnan eller skicka in det från bootloadern. DTS/DTB talar om vilken hårdvara kortet har. Processorfamiljen är den okomplicerade biten.

Om inte tillverkaren har skickat in sin DTS för kortet till Linus så får man skriva den själv eller gå till tillverkarens SDK och hämta den. Räkna inte med att en given DTS funkar med mainline Linux.

Så nej, det finns ofta inga bra alternativ till tillverkarnas Linux-byggen för viss hårdvara. Helt enkelt för att varje dist behöver anpassas mot exakt hårdvara.

Och sedan kommer förstås problemet med drivrutiner och hur mycket våld tillverkaren gjort på Linux för att få drivrutinerna att funka. Om man hackat för mycket får man inte merga drivrutinen i Linux main och då sitter man fast i gammal version och kommer sannolikt aldrig att ha resurser nog att uppgradera.

Hela den soppan är ditt problem att reda ut, eftersom tillverkaren sannolikt inte kommer bry sig utöver de bilder och SDK de tillhandahåller. I bästa fall finns allt i upstream Linux och då går det mesta att lösa.

Det är egentligen en STM32MP15XXAC processor (XX är alltså valmöjligheter). Tillverkaren har gett ut ett "starter pack" för STM32MP157, men tillverkaren själva säger att denna "starter pack" fungerar inte för STM32MP151.

Det som skiljer mellan en STM32MP151 och STM32MP157 är att STM32MP157 har möjlighet till DCMI - Digital Camera Media Interface, alltså vanlig kamera som Raspberry Pi har.

Antalet pinnar på processorn är dock det samma.

Så ditt förslag till mig är att använda tillverkarens SDK så mycket som det bara går?

Det finns något som heter Buildroot. Denna kan man bygga eget Linux på. Men det är över 100 konfigureringar.

Permalänk

Jag testar att bygga eget linux igenom Buildroot. Där jag använder samma konfiguration till STM32MP157A-DK1. Alltså.
https://www.st.com/en/evaluation-tools/stm32mp157a-dk1.html

Permalänk
Medlem

Jag tror att bygga egen eller köra Debian är nog det lättaste. Har för mig att Debian brukar ha bra support för mängder av arkitekturer

Permalänk
Medlem
Skrivet av heretic16:

Jag har byggt min egen ARM dator från grunden. Nu behöver jag ett linux OS för ARM Cortex-A.
Jag har försökt att bygga eget linux igenom att använda tillverkarens rekommendationer, men det verkar vara hopplöst. Det är manuell konfigurering hela tiden och hälften av deras kommandon verkar inte fungera.

Processorn är en STM32MP1.
Och deras manual hur man bygger eget linux finns här:
https://wiki.st.com/stm32mpu/wiki/STM32MPU_Developer_Package

Mitt mål är att bränna över Linux till något som heter Embedded Multi Media Card (eMMC) och sedan ska processorn bota upp från detta minne.

Men det borde väll finns något färdigt Linux OS för mitt mål?

Eller ska jag försöka ge mig på denna manual:
https://developer.arm.com/documentation/den0013/d/Building-Li...

Hej

Jag jobbar professionellt med detta sedan många år och tyvärr är det inte så enkelt. I princip all ARM hårdvara behöver en eller två bootloaders.

I princip kan man sammanfatta det som:
1. BOOTLOADERS
2. KERNEL
3. ROOTFS
4. Services (t.ex. systemd)
5. User-space apps

Kort svar: Kör på en befintlig plattform som har de I/O du behöver. För raspberry pi finns pi-gen om du vill anpassa ditt linux.
Många platformar har färdiga images, nackdelen är ju dock att man inte har full-kontroll eller får med saker man inte vill ha.
Det går ju dock att ta bort och lägga till saker senare. För vissa platformar är det svårt att köra kernelmod eller hitta okompilerat devicetree. Går att deassemblera devicetree (dtb filer) också ifs.

Jag har jobbat många år med Yocto och device tree, bootloaders (främst uboot), drivers och kernel moduler. Många seriösa tillverkare gör layers för sina chip och platformar, man lägger till mjukvarupaket som layers också m.m. Har du en egen hårdvara så måste du fortfarande lägga till devicetree för din platform. Ofta includar man t.ex. MCUn i fråga men du måste definera upp alla interface och pin-konfigurationer. Just lager tänket och enkelheten att ändra i kernel och devicetree är yoctos styrka.

Många seriösa kretstillverkare lägger in stöd i kernel och devicetree som gör det enkelt att lägga till stöd för interfacen. .dti eller .dto (overlay)

I ännu sämre fall har inte tillverkaren layers för många grundläggande funktioner eller lagt till kernel och devicetree stöd, då väntar ett långt jobb för dig. Förhoppningsvis finns väldokumenterade datablad med I/O register, beskrivning av init reset m.m. Du behöver då också antagligen bli en klippa på systemd och sysvinit.

Visa signatur

Ryzen 9 5950X, 32GB 3600MHz CL16, SN850 500GB SN750 2TB, B550 ROG, 3090 24 GB
Har haft dessa GPUer: Tseng ET6000, Matrox M3D, 3DFX Voodoo 1-3, nVidia Riva 128, TNT, TNT2, Geforce 256 SDR+DDR, Geforce 2mx, 3, GT 8600m, GTX460 SLI, GTX580, GTX670 SLI, 1080 ti, 2080 ti, 3090 AMD Radeon 9200, 4850 CF, 6950@70, 6870 CF, 7850 CF, R9 390, R9 Nano, Vega 64, RX 6800 XT
Lista beg. priser GPUer ESD for dummies

Permalänk
Skrivet av Herr Kantarell:

Jag jobbar professionellt med detta sedan många år och tyvärr är det inte så enkelt. I princip all ARM hårdvara behöver en eller två bootloaders.

I princip kan man sammanfatta det som:
1. BOOTLOADERS
2. KERNEL
3. ROOTFS
4. Services (t.ex. systemd)
5. User-space apps

I detta fall så handlar det om STM32MP1 serien.
Tillverkaren har själva en manual hur man bygger eget linux. https://wiki.st.com/stm32mpu/wiki/STM32MPU_Developer_Package
Dock väldigt dålig manual med manuell konfigurering. Jag har försökt ge mig på denna manual. Jag sitter bara och kopierar och klistrar in massa kommandon i terminalen, utan att förstå varför. Ibland så krånglar det och då försvinner liksom en hel dag.

Jag har inte lyckats kompilera. Dels för att jag vet inte vad jag ska markera och välja.

Citat:

Kort svar: Kör på en befintlig plattform som har de I/O du behöver. För raspberry pi finns pi-gen om du vill anpassa ditt linux.
Många platformar har färdiga images, nackdelen är ju dock att man inte har full-kontroll eller får med saker man inte vill ha.
Det går ju dock att ta bort och lägga till saker senare. För vissa platformar är det svårt att köra kernelmod eller hitta okompilerat devicetree. Går att deassemblera devicetree (dtb filer) också ifs.

Ja. Jag tror det är bäst att jag kör på något färdigt. Jag har inte intresse att bygga eget linux heller. Men är inte Pi-gen bara anpassat för Raspberry Pi? Jag menar, jag använder en STM32MP1 Cortex-A.

Citat:

Jag har jobbat många år med Yocto och device tree, bootloaders (främst uboot), drivers och kernel moduler. Många seriösa tillverkare gör layers för sina chip och platformar, man lägger till mjukvarupaket som layers också m.m. Har du en egen hårdvara så måste du fortfarande lägga till devicetree för din platform. Ofta includar man t.ex. MCUn i fråga men du måste definera upp alla interface och pin-konfigurationer. Just lager tänket och enkelheten att ändra i kernel och devicetree är yoctos styrka.

Jag har försökt bränna in ett Linux OS på min STM32MP1 som är ihopkopplad med eMMC. Då har jag använt mig att OpenSTLinux (https://wiki.st.com/stm32mpu/wiki/OpenSTLinux_distribution) vilket har en SDK (https://visualgdb.com/tutorials/linux/stm32mp1/sdk/) eller färdiga kompilerade (https://www.st.com/en/embedded-software/stm32mp1starter.html).

Ett problem är att jag har försökt bränna in dessa (https://wiki.st.com/stm32mpu/wiki/Getting_started/STM32MP1_bo...) och det verkar som att filerna för STM32MP157 inte alls passar med min STM32MP151. Skillnaden mellan processorna är att 157 har CAN FD och DSI (Display Serial Interface), alltså LCD.

Citat:

Många seriösa kretstillverkare lägger in stöd i kernel och devicetree som gör det enkelt att lägga till stöd för interfacen. .dti eller .dto (overlay)

I ännu sämre fall har inte tillverkaren layers för många grundläggande funktioner eller lagt till kernel och devicetree stöd, då väntar ett långt jobb för dig. Förhoppningsvis finns väldokumenterade datablad med I/O register, beskrivning av init reset m.m. Du behöver då också antagligen bli en klippa på systemd och sysvinit.

Så om jag har en Cortex A STM32MP151. Kan jag inte använda något färdigt linux OS då?

Om svaret är Ja, vilket jag tror det är. Då är nästa fråga: Hur bränner jag in detta Linux OS? Jag har möjlighet att flasha via något som heter USB OTG (On The Go) eller via UART och ST-LINK. Enklast är USB OTG för det är bara en USB kabel som jag ansluter mot datorn. Anslutningen fungerar och min dator kan känna igen hårdvaran och läsa identiteten på processorn.

Uppdatering:
Det jag behöver är föjande:

  • Stöd för STM32MP1

  • Stöd för Ethernet

  • Stöd för USB

  • Stöd för PMIC

  • Stöd för DDR3

  • Stöd för HDMI

Sedan behöver jag inget mer. Jag har inga GPIOs som Raspberry Pi har.

Permalänk
Skrivet av orp:

Jag tror att bygga egen eller köra Debian är nog det lättaste. Har för mig att Debian brukar ha bra support för mängder av arkitekturer

Jag tror också på att använda något färdigt istället för att uppfinna hjulet på nytt.

Debian, Archlinux, Ubuntu...ja vad ska man välja.
Jag VET att Ubuntu har prövats på en STM32MP157 och en STM32MP151 jämfört med STM32MP157 skiljer bara DSI (Display Serial Interface, LCD) och CAN FD (CAN-bus Flexible Data-Rate). Annars så är det samma innehåll.

Så vem jag väljer spelar mindre roll här. Jag blir nöjd om jag bara får något att fungera.
Så jag väljer den som är mest lämpad.

Men problemet är att jag måste få in det på eMMC. Jag har inte SD-kord.

Permalänk
Medlem
Skrivet av heretic16:

I detta fall så handlar det om STM32MP1 serien.

Så om jag har en Cortex A STM32MP151. Kan jag inte använda något färdigt linux OS då?

Om svaret är Ja, vilket jag tror det är. Då är nästa fråga: Hur bränner jag in detta Linux OS? Jag har möjlighet att flasha via något som heter USB OTG (On The Go) eller via UART och ST-LINK. Enklast är USB OTG för det är bara en USB kabel som jag ansluter mot datorn. Anslutningen fungerar och min dator kan känna igen hårdvaran och läsa identiteten på processorn.

Uppdatering:
Det jag behöver är föjande:

  • Stöd för STM32MP1

  • Stöd för Ethernet

  • Stöd för USB

  • Stöd för PMIC

  • Stöd för DDR3

  • Stöd för HDMI

Sedan behöver jag inget mer. Jag har inga GPIOs som Raspberry Pi har.

Varför måste du använda STM32MP1 (förutom att du råkar ha tillgång till den)
Jag har jobbat med tre projekt där man designat hårdvara från scratch och ett där man kört en Raspberry pi compute module. Förutom att de uppdaterar lite friskt i pi-gen repot så har detta varit en betydligt enklare och snabbare utvecklingsväg.
Nu vet jag inte vad PMIC syftas på här, men det finns en uppsjö plattformar som stödjer det du beskriver. Sen USB är väldigt brett. Vad för något via USB vill du ansluta?

Jag har kikat in i en av dina länkar nu och STM tillhandahåller ett SDK för yocto.
I princip ska det bara vara att tuta att köra då.
1. Kör en linux dist och version som SDK stödjer.
2. Installera alla paket som behövs för yocto och SDK (ett bra SDK innehåller redan detta i sitt setup/install script)
3. Kör kommando för att sätta upp SDK i ditt shell (görs ibland av ovanstående)
4. Bör stå alla kommandon som behövs ./bitbake IMAGE TARGET ibland kan de ha ett alias så man bara kör ./build
Ibland ska man sätta ett kommando i SDKt för att välja platform och/eller chip.

Image config ska säga vilken hårdvara och vilka layers med recepies som ska ingå. Att bygga en minimal image eller liknande ska inte vara något svårt med ett hyffsat bra SDK.

Jag har jobbat med flera STM chip men aldrig kört linux på dem utan RTOS/barebone. De var tidiga med ARM och fyller upp ett mellanbehov mellan potatis MCU och kraftfullare med linux. Behöver du filsystem, stöd för usb-enheter, nätverk och internet funktionalitet -> välj linux och idag 64-bitars om möjligt

Tillbaka till din fråga: För att flasha eMMC med din image måste det antingen göras via u-boot. Där uboot flashar över image från SD-kort. Eller att first stage boot loader stödjer flash av eMMC över seriell/USB från datorn direkt. Detta bör framgå någonstans i dokumentationen.

Visa signatur

Ryzen 9 5950X, 32GB 3600MHz CL16, SN850 500GB SN750 2TB, B550 ROG, 3090 24 GB
Har haft dessa GPUer: Tseng ET6000, Matrox M3D, 3DFX Voodoo 1-3, nVidia Riva 128, TNT, TNT2, Geforce 256 SDR+DDR, Geforce 2mx, 3, GT 8600m, GTX460 SLI, GTX580, GTX670 SLI, 1080 ti, 2080 ti, 3090 AMD Radeon 9200, 4850 CF, 6950@70, 6870 CF, 7850 CF, R9 390, R9 Nano, Vega 64, RX 6800 XT
Lista beg. priser GPUer ESD for dummies

Permalänk
Skrivet av Herr Kantarell:

Varför måste du använda STM32MP1 (förutom att du råkar ha tillgång till den)

Jag har ett kretskort med STM32MP151 monterat på. STM32MP1 är vad man ska säga, inte bästa processorn, men det är billigaste mikroprocessorn från STM.

Citat:

Jag har jobbat med tre projekt där man designat hårdvara från scratch och ett där man kört en Raspberry pi compute module. Förutom att de uppdaterar lite friskt i pi-gen repot så har detta varit en betydligt enklare och snabbare utvecklingsväg.

Så fungerar pi-gen att bygga ett OS åt STM32MP151?

Citat:

Nu vet jag inte vad PMIC syftas på här, men det finns en uppsjö plattformar som stödjer det du beskriver.

PMIC står för Power management integrated circuit. Vad denna gör är att den distribuerar ström till olika enheter så som DDR, CPU, USB PHY, Ethernet PHY osv. Som ett nätaggregat.

Citat:

Sen USB är väldigt brett. Vad för något via USB vill du ansluta?

Jag vill ansluta datorn med min STM32MP151. Detta kan jag göra med USB OTG. Det är ett micro-USB uttag där som jag kan ansluta processorn mot min USB på datorn.

Citat:

Jag har kikat in i en av dina länkar nu och STM tillhandahåller ett SDK för yocto.
I princip ska det bara vara att tuta att köra då.
1. Kör en linux dist och version som SDK stödjer.
2. Installera alla paket som behövs för yocto och SDK (ett bra SDK innehåller redan detta i sitt setup/install script)
3. Kör kommando för att sätta upp SDK i ditt shell (görs ibland av ovanstående)
4. Bör stå alla kommandon som behövs ./bitbake IMAGE TARGET ibland kan de ha ett alias så man bara kör ./build
Ibland ska man sätta ett kommando i SDKt för att välja platform och/eller chip.

Det jag har gjort nu är följande:

  • Installera Lubuntu Linux 20.04 över VirtualBox

  • Laddat ned SDK:n och installerat den. Jag valde en.sdk-x86_64-stm32mp1-openstlinux-6.1-yocto-mickledore-mpu-v24.06.26.tar.gz

  • Har laddat ned källfilerna en.sources-stm32mp1-openstlinux-6.1-yocto-mickledore-mpu-v24.06.26.tar.gz och packat upp dom. Men nu vet jag inte hur jag ska göra

Jag är nu här:

linux-stm32mp-6.1.82-stm32mp-r2-r0 Linux kernel installation directory ├── [*].patch ST patches to apply during the Linux kernel preparation (see next chapter) ├── fragment-[*].config ST configuration fragments to apply during the Linux kernel configuration (see next chapter) ├── optional-fragment-[*].config Optional ST configuration fragments to apply during the Linux kernel configuration depending on your needs (SMP or not, signature or not, ...) ├── linux-6.1.82.tar.xz Tarball file of the Linux kernel source code ├── README.HOW_TO.txt Helper file for Linux kernel management: reference for Linux kernel build └── series List of all ST patches to apply

Jag vet att det är väll uppenbart att jag ska läsa README.HOW_TO.txt, men det var faktiskt där jag stöp på. Vissa kommandon verkar inte alls fungera. Men jag undrar verkligen om jag ska behöva ens vara där och hålla på. Det kanske är bara i konfigurationsfilerna som jag ska röra?

Uppdatering 1:
Nu kom jag förbi. Jag trodde att jag hade några framgmenter när jag kompilerade Linux-kärnan. Men jag fick dock inga. Jag hade använt mig av rekommenderade kommandon om jag skulle få fragmenter efter "make".
Jag återkommer med uppdateringar.

Citat:

Image config ska säga vilken hårdvara och vilka layers med recepies som ska ingå. Att bygga en minimal image eller liknande ska inte vara något svårt med ett hyffsat bra SDK.

Problemet är att jag vet inte vilka recept, lager eller hårdvara jag ska kompilera till. Cortex A7 är det enda jag kan tänka mig.

Citat:

Tillbaka till din fråga: För att flasha eMMC med din image måste det antingen göras via u-boot. Där uboot flashar över image från SD-kort. Eller att first stage boot loader stödjer flash av eMMC över seriell/USB från datorn direkt. Detta bör framgå någonstans i dokumentationen.

Troligvis är det referensmanalen:
https://www.st.com/resource/en/reference_manual/rm0441-stm32m...

Permalänk
Medlem
Skrivet av heretic16:

Jag har byggt min egen ARM dator från grunden. Nu behöver jag ett linux OS för ARM Cortex-A.
Jag har försökt att bygga eget linux igenom att använda tillverkarens rekommendationer, men det verkar vara hopplöst. Det är manuell konfigurering hela tiden och hälften av deras kommandon verkar inte fungera.

Processorn är en STM32MP1.
Och deras manual hur man bygger eget linux finns här:
https://wiki.st.com/stm32mpu/wiki/STM32MPU_Developer_Package

Mitt mål är att bränna över Linux till något som heter Embedded Multi Media Card (eMMC) och sedan ska processorn bota upp från detta minne.

Men det borde väll finns något färdigt Linux OS för mitt mål?

Eller ska jag försöka ge mig på denna manual:
https://developer.arm.com/documentation/den0013/d/Building-Li...

Alltså, förlåt om jag är hårt och låter elak, men om du inte vet vad emmc är, kan denna uppgift vara lite väl magstark...
Du behöver alltså hjälp med sk board-bringup. Detta kan vara ganska meckigt, även för vana utvecklare. Det brukar ta ett par veckor till en månad arbetstid för mig. En gång tog det 4 månader för 5 personer...
Är man ovan är det alltid bättre att använda tillverkarens utvecklingskort rakt av, för att ha någonting att stå på, och sedan ändra det man behöver för sitt kort/system.
Det finns egentligen inget "Linux OS för Cortex-A", utan det som finns är "använd tillverkarens image" och "bygg egen med [tillverkarens verktyg, oftast Yocto nu för tiden]".
Med detta sagt bör tillverkarens image fungera för dig, om du inte behöver dcmi..

Permalänk
Skrivet av andelf:

Alltså, förlåt om jag är hårt och låter elak, men om du inte vet vad emmc är, kan denna uppgift vara lite väl magstark...
Du behöver alltså hjälp med sk board-bringup. Detta kan vara ganska meckigt, även för vana utvecklare. Det brukar ta ett par veckor till en månad arbetstid för mig. En gång tog det 4 månader för 5 personer...
Är man ovan är det alltid bättre att använda tillverkarens utvecklingskort rakt av, för att ha någonting att stå på, och sedan ändra det man behöver för sitt kort/system.
Det finns egentligen inget "Linux OS för Cortex-A", utan det som finns är "använd tillverkarens image" och "bygg egen med [tillverkarens verktyg, oftast Yocto nu för tiden]".
Med detta sagt bör tillverkarens image fungera för dig, om du inte behöver dcmi..

eMMC står för Embedded Multi Media Card.

Jag behöver inte DSI (antar du menar DSI och inte DCMI), som STM32MP157 stödjer.
Problemet är att jag får det inte att fungera när jag flashar min eMMC när jag bränner över färdiga OpenSTLinux till STM32MP151.

Enligt ST själva så "kanske" man måste bygga eget linux. Detta låter sjukt dåligt av dom att de har inget stöd för deras egna hårdvaror....tror jag.

Just nu är jag på detta steg:
https://github.com/STMicroelectronics/meta-st-stm32mp/blob/1f...

Så det kompilerar på.

Permalänk
Datavetare
Skrivet av heretic16:

Med tanke på att det finns dom som har installerat Ubuntu på en STM32MP1 processor, så lär Arch Linux fungera också.

Men det verkar som att Arch har bara valt vissa processorer som dom stödjer dock.

Här är det viktigt att hålla isär saker.

32-bit Arm, specifikt ARMv7-A, stöds ju "out-of-the-box" av rätt många distros. T.ex. Ubuntu. Men det refererar enbart till user-land.

Buildroot är ett verktyg för att bygga allt från bootloader, kernel och user-land. Yocto är rätt vanligt, vilket verkar vara det som stöds här.

Nu vet jag inte om det redan finns en boot-monitor på ditt kort. Om så är fallet är det möjligt att "klippa-och-klistra" ihop saker så man kan boota t.ex. Ubuntu.

I det läget behöver man bygga sin egen kärna, där alla drivare som behövs är med.

I fallet STM32MP151 verkar det ju finnas stöd direkt i kernel.org kärnan. Kan inte testa, men detta få i alla fall upp den plattformen

1. Ladda ner önskad linux-kärna från kernel.org
2. Installera cross-compile verktyg för 32-bit Arm (på Ubuntu sudo apt install gcc-arm-none-eabi)
3. Packa upp kärnan och gå in i katalogen

$ export CROSS_COMPILE=arm-none-eabi- $ export ARCH=arm $ make multi_v7_defconfig $ make menuconfig # lägg till / ta bort det som behövs $ make -j$(nproc) $ make dtbs

När menyn är uppe ligger STM32MP157 här:

-> System Type -> STMicroelectronics STM32 family (ARCH_STM32 [=y]) -> STMicroelectronics STM32MP157 (MACH_STM32MP157 [=y])

Är ett gäng år sedan jag pillade med Linux på den här nivån. Det är fullt görbart och hyfsat enkelt när man fått något som fungerar första gången. Men kräver rätt mycket detaljkunskap både om att bygga Linux samt om kortet man vill få igång.

Som redan frågats i tråden: måste du köra STM32MP157?

Det lär vara långt enklare att få igång en SBC som RPi, OrangePi, whatever-Pi om det också fungerar.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Skrivet av Yoshman:

Här är det viktigt att hålla isär saker.

32-bit Arm, specifikt ARMv7-A, stöds ju "out-of-the-box" av rätt många distros. T.ex. Ubuntu. Men det refererar enbart till user-land.

Ubuntu går tydligen att installera på en STM32MP157, fast med minneskort.

Citat:

Buildroot är ett verktyg för att bygga allt från bootloader, kernel och user-land. Yocto är rätt vanligt, vilket verkar vara det som stöds här.

Jag lyckades kompilera eget linux via Buildroot. Men jag fick bara en .img fil. Jag vet inte hur jag ska kunna bränna över den till eMMC och låta processorn bota upp från eMMC.

Citat:

Nu vet jag inte om det redan finns en boot-monitor på ditt kort. Om så är fallet är det möjligt att "klippa-och-klistra" ihop saker så man kan boota t.ex. Ubuntu.

Det finns inte. Här används U-Boot.

Citat:

I det läget behöver man bygga sin egen kärna, där alla drivare som behövs är med.

Just nu bygger jag egen kärna, men jag har inte valt några speciella konfigureringar. Mest bara köra make.

Citat:

I fallet STM32MP151 verkar det ju finnas stöd direkt i kernel.org kärnan. Kan inte testa, men detta få i alla fall upp den plattformen

1. Ladda ner önskad linux-kärna från kernel.org
2. Installera cross-compile verktyg för 32-bit Arm (på Ubuntu sudo apt install gcc-arm-none-eabi)
3. Packa upp kärnan och gå in i katalogen

$ export CROSS_COMPILE=arm-none-eabi- $ export ARCH=arm $ make multi_v7_defconfig $ make menuconfig # lägg till / ta bort det som behövs $ make -j$(nproc) $ make dtbs

När menyn är uppe ligger STM32MP157 här:

-> System Type -> STMicroelectronics STM32 family (ARCH_STM32 [=y]) -> STMicroelectronics STM32MP157 (MACH_STM32MP157 [=y])

Ja, det har jag sett. Men sedan då? Efter man har kompilerat...hur får man över linuxkärnan och bootmjukvaran till eMMC?

Citat:

Är ett gäng år sedan jag pillade med Linux på den här nivån. Det är fullt görbart och hyfsat enkelt när man fått något som fungerar första gången. Men kräver rätt mycket detaljkunskap både om att bygga Linux samt om kortet man vill få igång.

Bästa om man använde något färdigt

Citat:

Som redan frågats i tråden: måste du köra STM32MP157?

Med take på att jag utvecklade kortet själv så måste jag använda det. Notera att det är 151, inte 157. Det skiljer bara CAN FD och DSI mellan dom.

Citat:

Det lär vara långt enklare att få igång en SBC som RPi, OrangePi, whatever-Pi om det också fungerar.

Kan man försöka använda en något annan Linux OS istället för att bygga eget?

Permalänk
Datavetare
Skrivet av heretic16:

Ubuntu går tydligen att installera på en STM32MP157, fast med minneskort.

Varför laddar du inte ner det då? När man väl har en "image" ska det väl gå att trockla ned på något sätt?

Skrivet av heretic16:

Jag lyckades kompilera eget linux via Buildroot. Men jag fick bara en .img fil. Jag vet inte hur jag ska kunna bränna över den till eMMC och låta processorn bota upp från eMMC.

Right, det är vad du måste lura ut. Kommer krävas oavsett metod!

Skrivet av heretic16:

Det finns inte. Här används U-Boot.

Eller då finns det. U-Boot är den vanligast boot-monitorn för små Arm-system.

Skrivet av heretic16:

Kan man försöka använda en något annan Linux OS istället för att bygga eget?

Om det finns en färdig Ubuntu skulle jag använda den. Då behöver du bara lura ut hur man kan skriva ned en image på eMMC.

Har en Orange Pi 5 Plus med eMMC. På den gick det att boota från SD-kort, när man väl gjort det fanns ett gäng sätt att lägga in installationen på dess eMMC. Kör Ubuntu 24.04 på den nu.

Går det att boota på något sätt alls här förutom eMMC?
Nätverks-boot?
SD-kort?
något annat?

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Skrivet av Yoshman:

Varför laddar du inte ner det då? När man väl har en "image" ska det väl gå att trockla ned på något sätt?

https://www.youtube.com/watch?v=JRTBYNBscyI

Problemet är att jag har inget minneskort.

Citat:

Right, det är vad du måste lura ut. Kommer krävas oavsett metod!

Det måste gå på något sätt?
Jag menar, jag har USB OTG och enligt ST själva säger dom att det går att flasha eMMC med USB OTG.

Citat:

Eller då finns det. U-Boot är den vanligast boot-monitorn för små Arm-system.

Det finns något som heter STM32CubeProgrammer. Detta är en mjukvara som man kan bränner över via USB OTG. Men jag har dock inte lyckats då jag använder mjukvaran för STM32MP157.

Citat:

Om det finns en färdig Ubuntu skulle jag använda den. Då behöver du bara lura ut hur man kan skriva ned en image på eMMC.

Har en Orange Pi 5 Plus med eMMC. På den gick det att boota från SD-kort, när man väl gjort det fanns ett gäng sätt att lägga in installationen på dess eMMC. Kör Ubuntu 24.04 på den nu.

Det är väll detta som jag måste göra.

Citat:

Går det att boota på något sätt alls här förutom eMMC?
Nätverks-boot?
SD-kort?
något annat?

UART, ST-LINK, Ethernet, USB OTG har jag stöd för.

Permalänk
Datavetare

Antar att du inte har exakt samma kort? För det där kortet hade ju stöd för SD-card och på hans hemsida finns ju färdiga images som kan lägga in med t.ex. BalenaEtcher.

Skrivet av heretic16:

Problemet är att jag har inget minneskort.

Som i "jag har inget minneskort hemma" eller "min SBC har inte stöd för SD-card"?

Skrivet av heretic16:

Det måste gå på något sätt?
Jag menar, jag har USB OTG och enligt ST själva säger dom att det går att flasha eMMC med USB OTG.

Om den har USB OTG: är det inte möjligt att exponera eMMC-kretsen som ett USB-minne?
Om ja, då är det bara att "bränna" ned image:en den vägen via BalenaEtcher.

Skrivet av heretic16:

Det finns något som heter STM32CubeProgrammer. Detta är en mjukvara som man kan bränner över via USB OTG. Men jag har dock inte lyckats då jag använder mjukvaran för STM32MP157.

Det låter icke-standard. Kan ju fungera, men då måste man helt förlita sig på deras programvara.

Skrivet av heretic16:

UART, ST-LINK, Ethernet, USB OTG har jag stöd för.

Nu är det lite trixigt. Men om U-boot redan finns på kortet är det ju möjligt att lägga allt på en bootp-server + NFS-server. Först laddar man ned kärnan med bootp/tftp, sedan säger åt den att köra NFS-root och peka ut den servern.

Dock långt mer komplicerat än att bara "bränna ned en image" om det är möjligt. Använt ovan i fall där det av någon anledning helt saknats vettig persistent lagring på kortet eller att den av olika skäl inte var enkelt att använda.

Så skulle undvika detta. Är verkligen en sista utväg!

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Skrivet av Yoshman:

Antar att du inte har exakt samma kort? För det där kortet hade ju stöd för SD-card och på hans hemsida finns ju färdiga images som kan lägga in med t.ex. BalenaEtcher.

Det är inte samma kort. Mitt är hemmabyggt.

Citat:

Som i "jag har inget minneskort hemma" eller "min SBC har inte stöd för SD-card"?

Jag har inte stöd för SD-kort. Finns ingen hållare.

Citat:

Om den har USB OTG: är det inte möjligt att exponera eMMC-kretsen som ett USB-minne?
Om ja, då är det bara att "bränna" ned image:en den vägen via BalenaEtcher.

Ja, tanken är att eMMC ska vara som ett botbart USB minne.
Jag tror inte det är så enkelt som det låter. För tanken med USB OTG är att en mjukvara så föra in data till eMMC. Sedan så ska processorn bota upp från eMMC.

Citat:

Nu är det lite trixigt. Men om U-boot redan finns på kortet är det ju möjligt att lägga allt på en bootp-server + NFS-server. Först laddar man ned kärnan med bootp/tftp, sedan säger åt den att köra NFS-root och peka ut den servern.

Jag tror att mitt eMMC är helt tomt. Den har nog inget. Däremot kan jag ansluta CPU:n med STM32CubeProgrammer och hämta information om processorn. Så inget verkar vara trasigt i alla fall.

Citat:

Dock långt mer komplicerat än att bara "bränna ned en image" om det är möjligt. Använt ovan i fall där det av någon anledning helt saknats vettig persistent lagring på kortet eller att den av olika skäl inte var enkelt att använda.

Så skulle undvika detta. Är verkligen en sista utväg!

Det var ST själva som sa att detta är möjligt. Jag ville inte ha någon flyttbar för det skulle bara bli massa problem med fukt osv. Jag tänkte att eMMC måste väll vara mycket bättre.

Permalänk
Datavetare
Skrivet av heretic16:

Ja, tanken är att eMMC ska vara som ett botbart USB minne.
Jag tror inte det är så enkelt som det låter. För tanken med USB OTG är att en mjukvara så föra in data till eMMC. Sedan så ska processorn bota upp från eMMC.

Så är nog detta du ska läsa på om så mycket det går.

Inte så att det finns något "magisk handgrepp" som sätter den i ett speciellt läge så det i praktiken blir ett USB-minne?

Som exempel, på en RPi Pico dyker den upp som ett USB-minne om man håller ned knappen på kortet samtidigt som man kopplar in det via USB. Som jag förstår USB OTG är det saker det kan möjliggöra.

Alt. kolla om STMs programvara har något som motsvarar det BalenaEtcher gör mot eMMC. I fallet Orange Pi 5 Plus:en är ett sätt man kan göra en "installation" på eMMC i stort sätt att köra "dd if=/dev/<sd-card> of=/dev/<eMMC>" (krävs lite handpåläggning i efterhand).

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Skrivet av Yoshman:

Så är nog detta du ska läsa på om så mycket det går.

Inte så att det finns något "magisk handgrepp" som sätter den i ett speciellt läge så det i praktiken blir ett USB-minne?

Som exempel, på en RPi Pico dyker den upp som ett USB-minne om man håller ned knappen på kortet samtidigt som man kopplar in det via USB. Som jag förstår USB OTG är det saker det kan möjliggöra.

Alt. kolla om STMs programvara har något som motsvarar det BalenaEtcher gör mot eMMC. I fallet Orange Pi 5 Plus:en är ett sätt man kan göra en "installation" på eMMC i stort sätt att köra "dd if=/dev/<sd-card> of=/dev/<eMMC>" (krävs lite handpåläggning i efterhand).

Som jag uppfattar det som, så är det så att jag måste få U-boot först på eMMC eller? U-boot är någon slags Grub som kan styra och läsa USB, CD, Diskett med mera? Alltså ett "linux OS", fast brutalt nedbantat.

Eller ska man kolla om man kan få över U Boot över RJ45?

Permalänk

Det är lite så här jag har tänkt:

https://www.youtube.com/watch?v=xvHOf3Y1gLw

Denna film visar en situation där användaren bränner in Ubuntu på eMMC med hjälp av U-Boot.

Men då måste man först ha U-boot installerat?

Permalänk

Jag har hittat problemet här.
Jag behöver installera: https://github.com/ARM-software/arm-trusted-firmware

Orsaken har med att jag har ingen ARM Firmware installerat.

Permalänk
Datavetare
Skrivet av heretic16:

Jag har hittat problemet här.
Jag behöver installera: https://github.com/ARM-software/arm-trusted-firmware

Orsaken har med att jag har ingen ARM Firmware installerat.

Du lär behöva någon form av monitor/firmware för att kunna programmera via USB utan extra probe.

Om det inte finns något alls på kortet från start lär du behöva någon form av probe/programmerare för att få ned det initiala programmet.

Vad jag såg är att STM32-baserade mikrokontrollers verkar komma med en förinstallerad programvara som fungerar ihop med STM32CubeProgrammer. Så verkar vara där du ska starta.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Skrivet av Yoshman:

Du lär behöva någon form av monitor/firmware för att kunna programmera via USB utan extra probe.

Om det inte finns något alls på kortet från start lär du behöva någon form av probe/programmerare för att få ned det initiala programmet.

Vad jag såg är att STM32-baserade mikrokontrollers verkar komma med en förinstallerad programvara som fungerar ihop med STM32CubeProgrammer. Så verkar vara där du ska starta.

Det jag har tillgång till är .dts och .dtsi filer.
När jag FÖRST får ARM Trusted Firmware att fungera, då kan jag flasha över detta till min CPU och där efter kan jag bränna över U-boot till eMMC.

ARM Trusted Firmware ser till så processorn har en grundläggande kod som den kan köra för att t.ex. starta upp PMIC eller DDR minnet och ha kommunikation med eMMC.

Jag ar försökt kompilera ARM Trusted Firmware, utan att lyckas. Så här skulle jag behöva lite hjälp. Det finns dock en fin liten genväg. Jag ska visa dig. Om du har Linux installerat, så kan du utföra dessa instruktioner.

Steg 1:
Börja med att ladda ned SDK:n här.
https://www.st.com/en/embedded-software/stm32mp1dev.html#get-...
Denna ska installeras. Det är en vanlig .sh fil som man kör. Inget speciellt.

Steg 2:
Börja med att gå på samma länk igen https://www.st.com/en/embedded-software/stm32mp1dev.html#get-...
Nu så ska du ladda ned källfilerna, alltså "sources". Så gör det och packa upp dessa.

Steg 3:
I linux så kan man välja att krosskompilera. Detta görs enkelt med att välja SDK:n som kompilator.

source <SDK installation directory>/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi

Om man kör dessa och får detta så ar man gjort rätt

echo $ARCH Output: arm echo $CROSS_COMPILE Output: arm-ostl-linux-gnueabi- $CC --version Output: arm-ostl-linux-gnueabi-gcc (GCC) <GCC version> [...] echo $OECORE_SDK_VERSION Output: <expected SDK version>

https://wiki.st.com/stm32mpu/wiki/STM32MPU_Developer_Package#...

Så ja. Då var detta klart!

Steg 4:
Nu är det dags att kompilera ARM Trusted Firmware.
Detta är vad jag styper i. Jag kan kompilera ARM Trusted Firmware med dom befintliga .dtb filerna som finns. Men jag har inga .dtb filer. Bara .dts och .dtsi filer. Dessa ska man kunna kompilera till .dtb filer. Men jag vet inte hur.

Hur som helst! För att kompilera med nuvarande konfigrationsfiler så följer man denna manual:
https://github.com/STMicroelectronics/meta-st-stm32mp/blob/mi...

Det första man ska göra är att gå till mappen som heter "sources", den man laddade ned alltså.
I denna mapp så finns det en mapp som börjar på "tf-a.." och detta är ARM Trusted Firmware. Gå in i denna mapp.
Där efter så så .tar.xz filen packas upp.

$> tar xf ##BP##-##PR##.tar.xz $> cd ##BP## $> for p in `ls -1 ../*.patch`; do patch -p1 < $p; done

Steg 5:
För att börja kompilera så ska man först välja vart FIP filerna ska ligga. Dessa filer är alltså filerna som man vill bränna in på processorn. Bara stå i ARM Trusted Firmware mappen, alltså där källkoden finns.

export FIP_DEPLOYDIR_ROOT=$PWD/../../FIP_artifacts

Steg 6:
Om du har .dts och .dsi filer, så länka <external DT location> till dessa. Alltså <external DT location> ska ersättas med t.ex. /home/<username>/dokument/filer/deviceTree/

To use the external device tree feature, EXTDT_DIR variable must be set to the root location of external DT as specified in the README.HOW_TO.txt of external-dt $> export EXTDT_DIR=<external DT location> To use the STM32MP DDR firmware, FWDDR_DIR variable must be set to the root location of STM32MP DDR firmware as specified in the README.HOW_TO.txt of stm32mp-ddr-phy $> export FWDDR_DIR=<stm32mp ddr firmware location>

Då är frågan. Hur får du tag på dessa .dts och dtsi filer? Jo, via STM32CubeIDE som är gratis att ladda ned. Du behöver bara göra ett enkelt STM32MP1 projekt och sedan finns filerna i STM32MP1 projektet i katalogen CA7.

Steg 7:
För att kompilera så gör man något av dessa.

To list TF-A source code compilation configurations: $ make -f $PWD/../Makefile.sdk help To compile TF-A source code: $ make -f $PWD/../Makefile.sdk all To compile TF-A source code for a specific config: $ make -f $PWD/../Makefile.sdk TF_A_DEVICETREE=stm32mp157f-ev1 TF_A_CONFIG=optee-sdcard ELF_DEBUG_ENABLE='1' all NB: TF_A_DEVICETREE flag must be set to switch to correct board configuration. To compile TF-A source code and overwrite the default FIP artifacts with built artifacts: $> rm -rf $FIP_DEPLOYDIR_ROOT/arm-trusted-firmware/* $> make -f $PWD/../Makefile.sdk DEPLOYDIR=$FIP_DEPLOYDIR_ROOT/arm-trusted-firmware all

Om man har ett projekt i STM32CubeIDE som heter CPU-Projektet så kommer man få filer som heter "CPU-Projektet-mx.dts" och "CPU-Projektet.dtsi". Så "TF_A_DEVICETREE=stm32mp157f-ev1" blir då "TF_A_DEVICETREE=CPU-Projektet-mx"

Om du vill, så kan jag lära dig hur du använder STs produkter. Detta är superenkelt! ST32CubeIDE är allt man behöver.