Wāhanga 3: Tata ki te uta Linux mai i te kaari SD ki RocketChip

Wāhanga 3: Tata ki te uta Linux mai i te kaari SD ki RocketChip В wahanga o mua he nui ake, iti iho ranei te kaiwhakahaere mahara mahi i whakatinanahia, he takai i runga i te IP Core mai i Quartus, he urutau mo TileLink. I tenei ra, i roto i te waahanga "Kei te kawe matou i te RocketChip ki tetahi poari Hainamana iti-mohiotia me Cyclone" ka kite koe i tetahi papatohu mahi. He iti ake te roa o te mahi: I whakaaro ahau ka tere tonu taku whakarewa i a Linux ka haere tonu, engari ehara i te mea koinei te take. I roto i tenei waahanga, ka whakaaro ahau ki te titiro ki te tukanga o te whakarewa i te U-Boot, BBL, me nga ngana whakama o te kernel Linux ki te arawhiti. Engari he papatohu - U-Boot, me te tino matatau, he maha nga mea e tumanakohia ana e koe mai i te papatohu tino.

Ka whakauruhia e te taputapu he kaari SD e hono ana ma te atanga SPI, me te UART. I te wahanga rorohiko, ka whakakapia a BootROM ki xip i runga i sdboot a, ko te tikanga, kua taapirihia nga waahanga uta e whai ake nei (i runga i te kaari SD).

Te whakaoti i te taputapu

Na, ko te mahi: me huri koe ki te "nui" matua me te hono i tetahi UART (mai i te Raspberry) me te urutau SD (i whakamahia e matou he kaari mai i Catalex me nga titi e ono: GND, VCC, MISO, MOSI, SCK, CS) .

Ko te tikanga, he tino ngawari nga mea katoa. Engari i mua i te mohio ki tenei, ka makahia ahau mai i tetahi taha ki tetahi taha: i muri i te wa o mua, ka whakatau ahau me uru ano ahau ki roto. System tetahi mea penei HasPeripheryUART (me te whakatinanatanga e tika ana), he pera ano mo te kaari SD - ka rite nga mea katoa. Na ka whakatau ahau ki te kite me pehea te whakatinana i roto i te hoahoa "tino". Na, he aha te mea nui mo tenei? Ko Arty, te ahua, kaore e pai - kei te noho tonu te taniwha unleahshed.DevKitConfigs. Na ohorere ka puta ko etahi whakakikorua i nga waahi katoa, i taapirihia ma nga tawhā ma nga taviri. Ki taku whakaaro he tino ngawari tenei me te whirihora, engari ka hiahia ahau ki te whakahaere i tetahi mea i te tuatahi ... Kaore koe i te mea ano, he maamaa noa ake he hoha?.. No reira ahau i tutaki ai vera.iofpga.FPGAChip mo Microsemi FPGAs ka tangohia tonutia mo nga korukī me te ngana ki te hanga i taku ake whakatinanatanga ma te whakataurite, Waimarie he nui ake, iti iho ranei te katoa o te "papapapa papa" kei roto i te konae kotahi.

I puta mai me taapiri noa koe System.scala raina

class System(implicit p: Parameters) extends RocketSubsystem
...
  with HasPeripherySPI
  with HasPeripheryUART
...
{
  val tlclock = new FixedClockResource("tlclk", p(DevKitFPGAFrequencyKey))
  ...
}

class SystemModule[+L <: System](_outer: L)
  extends RocketSubsystemModuleImp(_outer)
...
    with HasPeripheryUARTModuleImp
    with HasPeripheryGPIOModuleImp
...

Raina i roto i te tinana o te akomanga System he taapiri korero mo te auau e mahi ai tenei wahanga o to tatou SoC ki te konae dts. Ki taku mohio, ko te DTS/DTB he tairitenga tuuturu o te hangarau mono-a-takaro mo nga taputapu whakauru: ka whakahiatohia te rakau whakaahuatanga dts ki roto i te konae dtb rua ka whakawhitia e te bootloader ki te kernel kia tika ai te whirihora i te taputapu. He mea whakamiharo, kaore he raina me tlclock he pai te whakakotahitanga o nga mea katoa, engari ko te whakahiato i a BootROM (me whakamahara ahau ki a koe, inaianei kua oti tenei sdboot) karekau e mahi - i te wa o te mahi whakahiato ka poroporoaki i te konae dts me te hanga pane me te tonotono TL_CLK, he mihi ka taea e ia te whirihora tika i nga kaiwehewehe auau mo nga atanga o waho.

Ka hiahia hoki koe ki te whakatika paku i te "waea":

Platform.scala:

class PlatformIO(implicit val p: Parameters) extends Bundle {

...

  // UART
  io.uart_tx := sys.uart(0).txd
  sys.uart(0).rxd := RegNext(RegNext(io.uart_rx))

  // SD card
  io.sd_cs := sys.spi(0).cs(0)
  io.sd_sck := sys.spi(0).sck
  io.sd_mosi := sys.spi(0).dq(0).o
  sys.spi(0).dq(0).i := false.B
  sys.spi(0).dq(1).i := RegNext(RegNext(io.sd_miso))
  sys.spi(0).dq(2).i := false.B
  sys.spi(0).dq(3).i := false.B
}

Ko nga mekameka rehita, he pono, i taapiri noa ma te whakataurite me etahi atu waahi o te waehere taketake. Te nuinga pea, me tiaki ratou ki te taumautanga. I roto pea некоторых Ko nga poraka kei a raatau ake te whakamarumaru, engari ko te tuatahi ka hiahia ahau ki te whakarewa i te iti rawa "i te taumata kounga teitei." Ko tetahi patai pai ake mo au ko te aha te MISO me te MOSI e iri ana ki runga dq? Kaore ano i kitea e au te whakautu, engari ko te ahua kei te whakawhirinaki te toenga o te waehere ki runga i taua hononga.

Ko te taha tinana, i tautapa noa e ahau nga titi hoahoa ki nga hoapaki kore utu i runga i te poraka, ka nekehia te peke whiriwhiri ngaohiko ki te 3.3V.

urutau SD

Tirohanga mai i runga:

Wāhanga 3: Tata ki te uta Linux mai i te kaari SD ki RocketChip

Tirohanga Raro:

Wāhanga 3: Tata ki te uta Linux mai i te kaari SD ki RocketChip

Patuiro Pūmanawa: Utauta

Tuatahi, me korero tatou mo nga taputapu patuiro e waatea ana me o raatau here.

Minicom

Tuatahi, me panui e tatou he aha te bootloader me te kernel putanga. Ki te mahi i tenei i runga i te Linux (i tenei keehi, kei runga i te RaspberryPi), me hiahia te kaupapa Minicom. Ko te tikanga, ko nga kaupapa katoa e mahi ana me te tauranga rangatū ka mahi.

Kia mahara ko te wa e timata ana, me tohu te ingoa taputapu tauranga hei -D /dev/ttyS0 - i muri i te kōwhiringa -D. Ana, nga korero matua: ki te puta, whakamahia Ctrl-A, X. He keehi ano taku kaore i mahi tenei huinga - katahi ka taea e koe te kii mai i tetahi huihuinga SSH tata killall -KILL minicom.

He ahua ano tetahi. Inaa, e rua nga UART o te RaspberryPi, a ka taea kee nga tauranga e rua ki te urutau mo tetahi mea: tetahi mo Nihokikorangi, ko tetahi ma te taunoa ka whakaputa i te papatohu kernel. Waimarie, ka taea te whakakore i tenei whanonga e ai ki tenei pukapuka.

Te tuhi ano i te mahara

I te wa e patuiro ana, ki te whakamatautau i tetahi whakapae, i etahi wa me mahi ahau utaina bootloader (pouri) ki RAM tika mai i te kaihautu. Ka taea pea tenei mai i te GDB, engari i te mutunga ka whai ahau i tetahi huarahi ngawari: I kapehia e ahau te konae e tika ana ki te Raspberry, ka tukuna ano te tauranga 4444 ma te SSH (telnet mai i OpenOCD) ka whakamahi i te whakahau. load_image. Ka mahia ana e koe, te ahua nei kua maroke nga mea katoa, engari ko te mea pono "Kare e moe, ka kimo noa": Ka tangohia e ia te konae, ka mahia i te tere o te rua kiropaita ia hekona.

Nga ahuatanga o te whakauru i nga waahi pakaru

He maha nga tangata kaore pea i whai whakaaro ki tenei i te wa e tarai ana i nga papatono auau, engari kaore i te wa katoa nga waahi pakaru i roto i nga taputapu. I etahi wa ko te whakatakoto i te waahi pakaru ka uru ki te tuhi i nga tohutohu motuhake ki te waahi tika tika ki te waehere miihini. Hei tauira, koinei te mahi o taku whakahau paerewa b i roto i te GDB. Anei nga mea e whai ake nei:

  • e kore e taea e koe te tuku ira ki roto BootROM na te mea ko ROM
  • Ka taea e koe te tautuhi i te waahi pakaru ki te waehere kua utaina ki te RAM mai i te kaari SD, engari me tatari koe kia utaina. Ki te kore, e kore matou e tuhi ano i tetahi wahi o te waehere, engari ka tuhia ano e te kaitautai to maatau waahi pakaru

E mohio ana ahau ka taea e koe te tono ki te whakamahi i nga waahi pakaru taputapu, engari he iti noa te maha.

Whakakapinga BootROM Tere

I te waahi tuatahi o te patuiro, he maha tonu te hiahia ki te whakatika i te BootROM ka ngana ano. Engari he raruraru: Ko te BootROM tetahi waahanga o te hoahoa i utaina ki roto i te FPGA, a ko tana whakahiato he mea mo etahi meneti (a ko tenei i muri tata tonu i te kohinga o te ahua BootROM ake mai i a C me Assembler ...). Waimarie, i roto i te mooni nga mea katoa tino tere: ko te raupapa o nga mahi e whai ake nei:

  • regenerate bootrom.mif (I huri ahau ki te MIF hei utu mo te HEX, na te mea he raru tonu taku ki te HEX, a ko MIF te whakatakotoranga taketake a Alter)
  • i roto i te Quartus mea Processing -> Update Memory Initialization File
  • i runga i te mea Assembler (kei te taha maui o nga Mahi) whakahau Tīmata ano

Nga mea katoa mo nga mea katoa - he rua tekau hēkona.

Te whakarite i te kaari SD

He ngawari noa nga mea katoa, engari me manawanui koe me te 14Gb mokowā kōpae:

git clone https://github.com/sifive/freedom-u-sdk
git submodule update --recursive --init
make

Whai muri ka hiahia koe ki te whakauru i tetahi ma, he pai ake ranei, tetahi kaore he mea e tika ana, he kaari SD, ka mahia.

sudo make DISK=/dev/sdX format-boot-loader

… Kei hea sdX — te taputapu kua tohua ki te kaari. WHAKATOKANGA: ko nga raraunga kei runga i te kaari ka mukua, ka tuhiruatia me te whanui! He iti rawa te utu ki te mahi i te huihuinga katoa mai i raro sudono te mea ka riro katoa nga taonga hanga root, a ko te huihuinga me mahi i raro sudo tonu.

Ko te hua he kaari kua tohua ki te GPT me nga waahanga e wha, ko tetahi he FAT me uEnv.txt me te ahua bootable i roto i te whakatakotoranga FIT (kei roto he maha nga whakaahua-iti, kei ia tangata me tana ake wahitau tangohanga), kei te waatea te tahi atu wehewehenga, me whakahōputu ki te Ext4 mo Linux. E rua ano nga waahanga - mea ngaro: Ko te U-Boot e noho ana i runga i tetahi (ko tana wehenga, ki taku mohio, he pakeke ki te BootROM), i tetahi atu, te ahua nei, kei te ora tonu ona taurangi taiao, engari kare ano au e whakamahi.

Taumata tuatahi, BootROM

Te na ô ra te paari auhia e: “Mai te peu e i roto i te porotarama te orihia ra e te tambourine, i roto i te roro uira te vai atoa ra te ori ma te tapo‘i auahi.” Ehara i te mea mo te mea kua tata tahuna e ahau te poari, me te whakatau "Ae, he rite te taumata iti o te GND." (te ahua nei, kaore te parenga e mamae i muri i nga mea katoa ...) He korero ake mo te mea mena kaore o ringaringa e tipu mai i reira, karekau e mutu te hikoi ki te kawe ohorere: i te wa e whakapirihia ai te hononga ki runga i te papa, kaore ano i taea e au te hono tika i nga hoapaki - e whakaatu ana te ataata me pehea te horapa o te konohiko. i runga i te hononga katoa, me tono noa he rino whakapiringa, Mo au, ka "papakia" noa ia. Kaati, kare pea i pai te konuhono mo te mahana o te rino whakapiringa, he mea ke atu pea... I te nuinga o te wa, i taku kitenga kua tekau ma rua nga hoapaki, ka mutu ka tiimata ahau ki te patuiro. Na ka timata mea ngaro: I hono ahau i te RX / TX mai i te UART, ka utaina e ahau te firmware - e kii ana

INIT
CMD0
ERROR

Ana, he arorau nga mea katoa - kaore au i hono i te waahanga kaari SD. Ka whakatikahia e matou te ahuatanga, ka utaina te firmware ... Me te wahangu ... He aha ahau i kore ai e huri i taku whakaaro, engari ka tuwhera te pouaka iti: me hono tetahi o nga titi kōwae ki te VCC. I roto i taku keehi, i tautokohia e te kōwae te 5V mo te tuku hiko, na me te kore e whakaaro rua, ka whakauruhia e ahau te waea mai i te waahanga ki tera taha o te poari. Ko te mutunga mai, ka whiria te hononga honohono kua whiria, a I ngaro noa te whakapā UART. facepalm.jpg I te nuinga o te waa, "ko te mahunga kino e kore e okioki nga waewae," me nga ringa kopikopiko e kore e okioki ki te upoko...

Ko te hua, i kite ahau i te mea kua roa e tatari ana

INIT
CMD0
CMD8
ACMD41
CMD58
CMD16
CMD18
LOADING /

Ano, ka neke, ka huri te tohu uta. Ka maumahara tonu ahau ki aku ra kura me te uta marie o MinuetOS mai i te kōpae pīngore. Ki te kore te puku e huri.

Ko te raruraru ko muri i te karere BOOT kaore he mea e tupu. Ko te tikanga tenei ko te wa ki te hono ma OpenOCD ki te Raspberry, ki te GDB i runga i te kaihautu, ka kite he aha tena.

Tuatahi, ko te hono ma te whakamahi i te GDB i whakaatu tonu mai tera $pc (te porohita papatono, te wahitau o te tohutohu o naianei) ka rere ki 0x0 - ka tupu pea tenei i muri i nga hapa maha. Na reira, i muri tonu i te tukunga o te karere BOOT Kia taapirihia he kopae mutunga kore. Ma tenei ka whakaroa ia mo tetahi wa ...

diff --git a/bootrom/sdboot/sd.c b/bootrom/sdboot/sd.c
index c6b5ede..bca1b7f 100644
--- a/bootrom/sdboot/sd.c
+++ b/bootrom/sdboot/sd.c
@@ -224,6 +224,8 @@ int main(void)

        kputs("BOOT");

+    while(*(volatile char *)0x10000){}
+
        __asm__ __volatile__ ("fence.i" : : : "memory");
        return 0;
 }

Ka whakamahia taua waehere tinihanga "mo te pono": I rongo ahau i tetahi waahi ko te kopikopiko mutunga kore he Whanonga Kore, engari kare pea te kaikoipi e whakaaro (Ka maumahara ahau ki a koe e ai ki te 0x10000 kei te BootROM).

Wāhanga 3: Tata ki te uta Linux mai i te kaari SD ki RocketChip

Ko te ahua nei, he aha atu te tumanako - he kino te whakauru, he aha nga momo waehere puna kei reira? Engari i roto taua tuhinga kei te patuiro te kaituhi i te waehere C... Kreks-fex-pex:

(gdb) file builds/zeowaa-e115/sdboot.elf
A program is being debugged already.
Are you sure you want to change the file? (y or n) y
Reading symbols from builds/zeowaa-e115/sdboot.elf...done.

Wāhanga 3: Tata ki te uta Linux mai i te kaari SD ki RocketChip

Me tango noa e koe ehara i te konae MIF, ipupihi ranei, engari ko te putanga taketake kei te whakatakotoranga ELF.

Inaianei ka taea e koe te whakaaro me te nganatanga nth te wahitau ka haere tonu te mahi (koinei tetahi take i kore ai te kaitoi i whakaaro he mutunga kore te kapiti). Kapa

set variable $pc=0xADDR

ka taea e koe te huri i te uara rehita i runga i te rere (i tenei keehi, te wahitau o te ako o naianei). Ma tana awhina, ka taea e koe te whakarereke i nga uara kua tuhia ki te mahara (me nga rehita-mapi mahara).

I te mutunga, ka tae ahau ki te whakatau (kaore e tino mohio ko tehea te mea tika) kei a matou "he ahua kaari SD o te punaha he", a me haere kaua ki te timatanga o nga raraunga kua tangohia, engari ki te 0x89800 paita atu:

diff --git a/bootrom/sdboot/head.S b/bootrom/sdboot/head.S
index 14fa740..2a6c944 100644
--- a/bootrom/sdboot/head.S
+++ b/bootrom/sdboot/head.S
@@ -13,7 +13,7 @@ _prog_start:
   smp_resume(s1, s2)
   csrr a0, mhartid
   la a1, dtb
-  li s1, PAYLOAD_DEST
+  li s1, (PAYLOAD_DEST + 0x89800)
   jr s1

   .section .rodata

Akene i pa ano tenei na te kore he kaari 4Gb koretake i te ringaringa, ka mau ahau i te 2Gb ka whakakapia i roto i te Makefile ohorere. DEMO_END=11718750 i runga i DEMO_END=3078900 (kaua e rapu tikanga i roto i tetahi tikanga motuhake - kaore he mea, ko te mea kua tuu te ahua ki runga i te kaari).

Taumata tuarua, U-Boot

Inaianei kei te "hinga" tonu tatou, engari kua tae ke tatou ki te waahi tika 0x0000000080089a84. I konei me whakaae ahau: inaa, kaore te whakaaturanga e haere "me nga waahi katoa", engari kua tuhia he waahanga "i muri", na konei kua taea e au te whakauru i te konae dtb tika mai i ta maatau SoC, whakatika i nga tautuhinga. HiFive_U-Boot taurangi CONFIG_SYS_TEXT_BASE=0x80089800 (hei utu o 0x08000000) kia rite ai te wahitau tango ki te wahi tuturu. Inaianei ka utaina e matou te mapi o te taumata e whai ake nei, tetahi atu ahua:

(gdb) file ../freedom-u-sdk/work/HiFive_U-Boot/u-boot
(gdb) tui en

Na ka kite tatou:

   │304     /*                                               │
   │305      * trap entry                                    │
   │306      */                                              │
   │307     trap_entry:                                      │
   │308         addi sp, sp, -32*REGBYTES                    │
  >│309         SREG x1, 1*REGBYTES(sp)                      │
   │310         SREG x2, 2*REGBYTES(sp)                      │
   │311         SREG x3, 3*REGBYTES(sp)                      │

I tua atu, ka peke matou i waenga i nga rarangi 308 me 309. A ehara i te mea miharo, na te mea kei roto $sp takoto te tikanga 0xfffffffe31cdc0a0. Aue, ka "rere" tonu na te rarangi 307. Na reira, me ngana ki te whakatakoto i te waahi wehenga ki trap_entry, ka hoki ki 0x80089800 (U-Boot's entry point), me te tumanako karekau e tika te whakatakoto i nga rehita i mua i te peke... Te ahua nei ka pai:

(gdb) b trap_entry
Breakpoint 1 at 0x80089a80: file /hdd/trosinenko/fpga/freedom-u-sdk/HiFive_U-Boot/arch/riscv/cpu/HiFive/start.S, line 308.
(gdb) set variable $pc=0x80089800
(gdb) c
Continuing.

Breakpoint 1, trap_entry () at /hdd/trosinenko/fpga/freedom-u-sdk/HiFive_U-Boot/arch/riscv/cpu/HiFive/start.S:308
(gdb) p/x $sp
$4 = 0x81cf950

He tino tika te tohu tohu, he korero pono: e tohu ana ki te karo i te RAM (mehemea karekau he whakamaoritanga korero, engari me tumanako tatou ki tetahi whiringa ngawari).

Me ngana ki te whakakapi i te atatohu ki 0x881cf950. Ko te mutunga, ka tae ki te whakatau handle_trap ka karanga, ka karanga, katahi ano ka tomo ki roto _exit_trap me te tautohetohe epc=2148315240 (i roto i te ira):

(gdb) x/10i 2148315240
   0x800cb068 <strnlen+12>:     lbu     a4,0(a5)
   0x800cb06c <strnlen+16>:     bnez    a4,0x800cb078 <strnlen+28>
   0x800cb070 <strnlen+20>:     sub     a0,a5,a0
   0x800cb074 <strnlen+24>:     ret
   0x800cb078 <strnlen+28>:     addi    a5,a5,1
   0x800cb07c <strnlen+32>:     j       0x800cb064 <strnlen+8>
   0x800cb080 <strdup>: addi    sp,sp,-32
   0x800cb084 <strdup+4>:       sd      s0,16(sp)
   0x800cb088 <strdup+8>:       sd      ra,24(sp)
   0x800cb08c <strdup+12>:      li      s0,0

Tautuhia te waahi wehenga ki strnlen, ka haere tonu tatou ka kite:

(gdb) bt
#0  strnlen (s=s@entry=0x10060000 "", count=18446744073709551615) at lib/string.c:283
#1  0x00000000800cc14c in string (buf=buf@entry=0x881cbd4c "", end=end@entry=0x881cc15c "", s=0x10060000 "", field_width=<optimized out>, precision=<optimized out>, flags=<optimized out>) at lib/vsprintf.c:265
#2  0x00000000800cc63c in vsnprintf_internal (buf=buf@entry=0x881cbd38 "exception code: 5 , ", size=size@entry=1060, fmt=0x800d446e "s , epc %08x , ra %08lxn", fmt@entry=0x800d4458 "exception code: %d , %s , epc %08x , ra %08lxn", args=0x881cc1a0,
    args@entry=0x881cc188) at lib/vsprintf.c:619
#3  0x00000000800cca54 in vsnprintf (buf=buf@entry=0x881cbd38 "exception code: 5 , ", size=size@entry=1060, fmt=fmt@entry=0x800d4458 "exception code: %d , %s , epc %08x , ra %08lxn", args=args@entry=0x881cc188) at lib/vsprintf.c:710
#4  0x00000000800cca68 in vscnprintf (buf=buf@entry=0x881cbd38 "exception code: 5 , ", size=size@entry=1060, fmt=fmt@entry=0x800d4458 "exception code: %d , %s , epc %08x , ra %08lxn", args=args@entry=0x881cc188) at lib/vsprintf.c:717
#5  0x00000000800ccb50 in printf (fmt=fmt@entry=0x800d4458 "exception code: %d , %s , epc %08x , ra %08lxn") at lib/vsprintf.c:792
#6  0x000000008008a9f0 in _exit_trap (regs=<optimized out>, epc=2148315240, code=<optimized out>) at arch/riscv/lib/interrupts.c:92
#7  handle_trap (mcause=<optimized out>, epc=<optimized out>, regs=<optimized out>) at arch/riscv/lib/interrupts.c:55
#8  0x0000000080089b10 in trap_entry () at /hdd/trosinenko/fpga/freedom-u-sdk/HiFive_U-Boot/arch/riscv/cpu/HiFive/start.S:343
Backtrace stopped: frame did not save the PC

Te ahua, _exit_trap e hiahia ana ki te tuku korero patuiro mo te tuunga i puta, engari e kore e taea e ia. Na, me pehea e kore e whakaatuhia ano o maatau puna. set directories ../freedom-u-sdk/HiFive_U-Boot/ MŌ! Kua whakaatuhia inaianei!

Kaati, me oma ano, ka kite mai i te puranga ka whaiwhai i te take o te raru tuatahi i puta ai te hapa tuatahi (mcause == 5). Mena i tika taku mohio ki nga mea kua tuhia konei kei te wharangi 37, ko te tikanga o tenei tuunga Load access fault. Ko te ahua kei konei te take

arch/riscv/cpu/HiFive/start.S:

call_board_init_f:
    li  t0, -16
    li  t1, CONFIG_SYS_INIT_SP_ADDR
    and sp, t1, t0  /* force 16 byte alignment */

#ifdef CONFIG_DEBUG_UART
    jal debug_uart_init
#endif

call_board_init_f_0:
    mv  a0, sp
    jal board_init_f_alloc_reserve
    mv  sp, a0
    jal board_init_f_init_reserve

    mv  a0, zero    /* a0 <-- boot_flags = 0 */
    la t5, board_init_f
    jr t5       /* jump to board_init_f() */

$sp he rite tonu te tikanga he, me roto board_init_f_init_reserve ka puta he hapa. Te ahua nei ko te tangata hara: he taurangi me te ingoa maramara CONFIG_SYS_INIT_SP_ADDR. Kua tautuhia i roto i te konae HiFive_U-Boot/include/configs/HiFive-U540.h. I etahi wa ka whakaaro ahau, tera pea, ka pai, me taapiri e ahau he kaitautai whawhai mo te tukatuka - tera pea he ngawari ake te whakatika i te tukatuka iti? Engari ka kite ahau he rite tonu te ahua o te taonga mai i te mea kaore i tino oti#if 0-tautuhinga motuhake mo te whirihoranga mahara rereke, a ka taea e koe te mahi i tenei:

diff --git a/include/configs/HiFive-U540.h b/include/configs/HiFive-U540.h
index ca89383..245542c 100644
--- a/include/configs/HiFive-U540.h
+++ b/include/configs/HiFive-U540.h
@@ -65,12 +65,9 @@
 #define CONFIG_SYS_SDRAM_BASE  PHYS_SDRAM_0
 #endif
 #if 1
-/*#define CONFIG_NR_DRAM_BANKS 1*/
+#define CONFIG_NR_DRAM_BANKS   1
 #define PHYS_SDRAM_0   0x80000000              /* SDRAM Bank #1 */
-#define PHYS_SDRAM_1   
-       (PHYS_SDRAM_0 + PHYS_SDRAM_0_SIZE)      /* SDRAM Bank #2 */
-#define PHYS_SDRAM_0_SIZE      0x80000000      /* 2 GB */
-#define PHYS_SDRAM_1_SIZE      0x10000000      /* 256 MB */
+#define PHYS_SDRAM_0_SIZE      0x40000000      /* 1 GB */
 #define CONFIG_SYS_SDRAM_BASE  PHYS_SDRAM_0
 #endif
 /*
@@ -81,7 +78,7 @@
 #define CONSOLE_ARG                            "console=ttyS0,115200 "

 /* Init Stack Pointer */
-#define CONFIG_SYS_INIT_SP_ADDR                (0x08000000 + 0x001D0000 - 
+#define CONFIG_SYS_INIT_SP_ADDR                (0x80000000 + 0x001D0000 - 
                                        GENERATED_GBL_DATA_SIZE)

 #define CONFIG_SYS_LOAD_ADDR           0xa0000000      /* partway up SDRAM */

I etahi wa ko te maha o nga tootoo toromoka hangarau kua tae ki te waahi whakahirahira. I muri i te tohe iti, ka tae ahau ki te hiahia ki te hanga i te tauranga tika mo taku papa. Ki te mahi i tenei, me kape me te whakatika i te maha o nga konae kia rite ki ta maatau whirihoranga.

Ana, tata, tenei te tepu iti

trosinenko@trosinenko-pc:/hdd/trosinenko/fpga/freedom-u-sdk/HiFive_U-Boot$ git show --name-status
commit 39cd67d59c16ac87b46b51ac1fb58f16f1eb1048 (HEAD -> zeowaa-1gb)
Author: Anatoly Trosinenko <[email protected]>
Date:   Tue Jul 2 17:13:16 2019 +0300

    Initial support for Zeowaa A-E115FB board

M       arch/riscv/Kconfig
A       arch/riscv/cpu/zeowaa-1gb/Makefile
A       arch/riscv/cpu/zeowaa-1gb/cpu.c
A       arch/riscv/cpu/zeowaa-1gb/start.S
A       arch/riscv/cpu/zeowaa-1gb/timer.c
A       arch/riscv/cpu/zeowaa-1gb/u-boot.lds
M       arch/riscv/dts/Makefile
A       arch/riscv/dts/zeowaa-1gb.dts
A       board/Zeowaa/zeowaa-1gb/Kconfig
A       board/Zeowaa/zeowaa-1gb/MAINTAINERS
A       board/Zeowaa/zeowaa-1gb/Makefile
A       board/Zeowaa/zeowaa-1gb/Zeowaa-A-E115FB.c
A       configs/zeowaa-1gb_defconfig
A       include/configs/zeowaa-1gb.h

Ka kitea nga korero i roto whare putunga.

I puta mai, i runga i tenei poari SiFive nga rehita o etahi taputapu he rereke nga waahi noho. I puta mai ano kua whirihorahia a U-Boot ma te whakamahi i te tikanga Kconfig, kua maarama mai i te kernel Linux - hei tauira, ka taea e koe te whakahau make menuconfig, ka puta mai he atanga kuputuhi watea ki mua i a koe e whakaatu ana i nga whakaahuatanga o nga tawhā na ? etc. I te nuinga o te waa, ka kohia e koe he whakaahuatanga o te tuatoru mai i nga whakaahuatanga o nga papa e rua, ka maka atu i nga momo whirihoranga PLL katoa mai i reira (te ahua nei, he hononga tenei ki te mana whakahaere mai i te rorohiko manaaki ma te PCIe, engari kaore tenei i te tino mohio) , I whiwhi ahau i etahi firmware, na, i te wa tika i runga i Mars i korero mai ki a au ma te UART e pa ana ki te commit hash i whakahiatohia mai, me te nui o te DRAM kei a au (engari i tuhia e au enei korero ki te pane).

Ko te mea pouri i muri i tenei ka mutu te whakautu a te poari ma te JTAG tukatuka, ka utaina mai i te kaari SD, aue, kaore i te tere i taku whirihoranga. I tetahi atu taha, i etahi wa ka tukuna e BootROM tetahi korero ERROR, i rahua ki te whawhai, ka puta tonu a U-Boot. I reira ka marama mai ki ahau: te ahua, i muri i te whakaara ano i te awaawa ki roto i te FPGA, kaore i te murua te mahara, kaore he wa ki te "whakangungu", aha atu. I roto i te poto, ka taea e koe ina puta he karere LOADING / hono ki te patuiro me te whakahau set variable $pc=0x80089800, na reira ka takahi i tenei uta roa (ko te tikanga, i runga i te whakaaro ko te wa whakamutunga ka pakaru wawe kaore he wa ki te uta i tetahi mea ki runga ake o te waehere taketake).

Ko te tikanga, he mea noa ka tino whakatio te kaitukatuka ka kore e taea e te kaiwhakairo JTAG te hono atu me nga karere?

Error: unable to halt hart 0
Error:   dmcontrol=0x80000001
Error:   dmstatus =0x00030c82

Na, tatari! Kua kite kē au i tēnei! Ka puta ano tetahi mea i te wa e kati ana a TileLink, a kaore au i te whakawhirinaki ki te kaituhi o te kaiwhakahaere mahara - naku ano i tuhi... Na, i muri i te hanganga angitu tuatahi o te tukatuka i muri i te whakatika i te kaiwhakahaere, i kite ahau:

INIT
CMD0
CMD8
ACMD41
CMD58
CMD16
CMD18
LOADING
BOOT

U-Boot 2018.09-g39cd67d-dirty (Jul 03 2019 - 13:50:33 +0300)

DRAM:  1 GiB
MMC:
BEFORE LOAD ENVBEFORE FDTCONTROLADDRBEFORE LOADADDRIn:    serial
Out:   serial
Err:   serial
Hit any key to stop autoboot:  3

Ki tenei raina ke i mua In: serial kaua e aro - I ngana ahau ki te mohio ki runga i te tukatuka iri mena ka tika te mahi me te taiao. He aha te tikanga, "Kua iri penei mo te tekau meneti"? I te iti rawa i taea e ia ki te hūnuku me te haere ki te tahua whawhai! He rerekee iti: ahakoa ka utaina a U-Boot ki te 2^24 paita tuatahi mai i te kaari SD, ka tiimata ana, ka kape i a ia ano ki tetahi waahi tawhiti atu, ka tuhia ki te pane whirihoranga, ki nga wahitau teitei ake ranei o RAM. , me te mahi ELF relocation -characters, me te whakawhiti mana ki reira. Na: ko te ahua kua paahitia e matou tenei taumata me te whiwhi i te bonus kaore i piri tonu te tukatuka i muri i tera.

Na he aha te kore e mahi ana te taima? Te ahua nei kaore te karaka e mahi mo etahi take...

(gdb) x/x 0x0200bff8
0x200bff8:      0x00000000

He aha mena ka huri a ringa koe i nga pere?

(gdb) set variable *0x0200bff8=310000000
(gdb) c

Na:

Hit any key to stop autoboot:  0
MMC_SPI: 0 at 0:1 hz 20000000 mode 0

Whakamutunga: karekau te karaka e pa ana. Koinei pea te take i kore ai e mahi te whakauru papapātuhi:

HiFive_U-Boot/cmd/bootmenu.c:

static void bootmenu_loop(struct bootmenu_data *menu,
        enum bootmenu_key *key, int *esc)
{
    int c;

    while (!tstc()) {
        WATCHDOG_RESET();
        mdelay(10);
    }

    c = getc();

    switch (*esc) {
    case 0:
        /* First char of ANSI escape sequence 'e' */
        if (c == 'e') {
            *esc = 1;
            *key = KEY_NONE;
        }
        break;
    case 1:
        /* Second char of ANSI '[' */
        if (c == '[') {
...

Ko te raruraru i puta ko te mea he iti rawa toku mohio: I tapiritia e ahau te ki ki te whirihora tukatuka:

  case DTSTimebase => BigInt(0)

... i runga i te meka i kii te korero "ki te kore koe e mohio, waiho 0." I muri i nga mea katoa WithNBigCores I whakaturia noa e ahau ki te 1MHz (i te mea, na te ara, i tohuhia i roto i te whirihora U-Boot). Engari, he maamaa ahau, he maamaa: kaore au i te mohio ki reira, kei konei ko 25MHz! I te mutunga, kaore he mahi. I tangohia e ahau aku "whakapai" me te...

Hit any key to stop autoboot:  0
MMC_SPI: 0 at 0:1 hz 20000000 mode 0
## Unknown partition table type 0
libfdt fdt_path_offset() returned FDT_ERR_NOTFOUND
** No partition table - mmc 0 **
## Info: input data size = 34 = 0x22
Running uEnv.txt boot2...
## Error: "boot2" not defined
HiFive-Unleashed #

Ka taea e koe te whakauru i nga whakahau! Hei tauira, i muri i te paheketanga iti, ka taea e koe te whakaaro ki te whakauru mmc_spi 1 10000000 0; mmc part, te whakaiti i te auau SPI mai i te 20MHz ki te 10MHz. He aha? Ana, ko te nuinga o te auau o 20MHz i tuhia ki roto i te whirihora, kei te tuhia tonu ki reira. Engari, ki taku mohio, ko nga hononga, he iti rawa i konei, ka mahi penei: ka wehewehe te waehere i te auau o te waahanga taputapu (ko taku ko 25MHz i nga waahi katoa) ma te whaainga, ka whakatau i te uara ka puta hei wehewehe i roto i te mana whakahaere. rehita. Ko te raruraru ko te mea mo te 115200Hz UART kei te ahua o nga mea e hiahiatia ana, katahi ka wehewehea e koe te 25000000 ki te 20000000 ka whiwhi koe i te 1, ara. ka mahi i te 25MHz. He mea noa tenei, engari ki te whakatauhia nga here, ko te tikanga kei te hiahia tetahi (engari kaore tenei i te tino mohio)... I te nuinga o te waa, he maamaa ake te whakatakoto me te neke haere - tawhiti, aue, mo te wa roa. Ko te 25MHz ehara i te Core i9.

Putanga papatohu

HiFive-Unleashed # env edit mmcsetup
edit: mmc_spi 1 10000000 0; mmc part
HiFive-Unleashed # boot
MMC_SPI: 1 at 0:1 hz 10000000 mode 0

Partition Map for MMC device 0  --   Partition Type: EFI

Part    Start LBA       End LBA         Name
        Attributes
        Type GUID
        Partition GUID
  1     0x00000800      0x0000ffde      "Vfat Boot"
        attrs:  0x0000000000000000
        type:   ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
        type:   data
        guid:   76bd71fd-1694-4ff3-8197-bfa81699c2fb
  2     0x00040800      0x002efaf4      "root"
        attrs:  0x0000000000000000
        type:   0fc63daf-8483-4772-8e79-3d69d8477de4
        type:   linux
        guid:   9f3adcc5-440c-4772-b7b7-283124f38bf3
  3     0x0000044c      0x000007e4      "uboot"
        attrs:  0x0000000000000000
        type:   5b193300-fc78-40cd-8002-e86c45580b47
        guid:   bb349257-0694-4e0f-9932-c801b4d76fa3
  4     0x00000400      0x0000044b      "uboot-env"
        attrs:  0x0000000000000000
        type:   a09354ac-cd63-11e8-9aff-70b3d592f0fa
        guid:   4db442d0-2109-435f-b858-be69629e7dbf
libfdt fdt_path_offset() returned FDT_ERR_NOTFOUND
2376 bytes read in 0 ms
Running uEnv.txt boot2...
15332118 bytes read in 0 ms
## Loading kernel from FIT Image at 90000000 ...
   Using 'config-1' configuration
   Trying 'bbl' kernel subimage
     Description:  BBL/SBI/riscv-pk
     Type:         Kernel Image
     Compression:  uncompressed
     Data Start:   0x900000d4
     Data Size:    74266 Bytes = 72.5 KiB
     Architecture: RISC-V
     OS:           Linux
     Load Address: 0x80000000
     Entry Point:  0x80000000
     Hash algo:    sha256
     Hash value:   28972571467c4ad0cf08a81d9cf92b9dffc5a7cb2e0cd12fdbb3216cf1f19cbd
   Verifying Hash Integrity ... sha256+ OK
## Loading fdt from FIT Image at 90000000 ...
   Using 'config-1' configuration
   Trying 'fdt' fdt subimage
     Description:  unavailable
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x90e9d31c
     Data Size:    6911 Bytes = 6.7 KiB
     Architecture: RISC-V
     Load Address: 0x81f00000
     Hash algo:    sha256
     Hash value:   10b0244a5a9205357772ea1c4e135a4f882409262176d8c7191238cff65bb3a8
   Verifying Hash Integrity ... sha256+ OK
   Loading fdt from 0x90e9d31c to 0x81f00000
   Booting using the fdt blob at 0x81f00000
## Loading loadables from FIT Image at 90000000 ...
   Trying 'kernel' loadables subimage
     Description:  Linux kernel
     Type:         Kernel Image
     Compression:  uncompressed
     Data Start:   0x900123e8
     Data Size:    10781356 Bytes = 10.3 MiB
     Architecture: RISC-V
     OS:           Linux
     Load Address: 0x80200000
     Entry Point:  unavailable
     Hash algo:    sha256
     Hash value:   72a9847164f4efb2ac9bae736f86efe7e3772ab1f01ae275e427e2a5389c84f0
   Verifying Hash Integrity ... sha256+ OK
   Loading loadables from 0x900123e8 to 0x80200000
## Loading loadables from FIT Image at 90000000 ...
   Trying 'ramdisk' loadables subimage
     Description:  buildroot initramfs
     Type:         RAMDisk Image
     Compression:  gzip compressed
     Data Start:   0x90a5a780
     Data Size:    4467411 Bytes = 4.3 MiB
     Architecture: RISC-V
     OS:           Linux
     Load Address: 0x82000000
     Entry Point:  unavailable
     Hash algo:    sha256
     Hash value:   883dfd33ca047e3ac10d5667ffdef7b8005cac58b95055c2c2beda44bec49bd0
   Verifying Hash Integrity ... sha256+ OK
   Loading loadables from 0x90a5a780 to 0x82000000

Kaati, kua eke tatou ki te taumata e whai ake nei, engari kei te toia tonu. A, i etahi wa ka tauhiuhia ano he rereke. Ka taea e koe te kite i te mcause ma te tatari mo te waehere i te wahitau kua tohua $pc a muri iho si kia runga trap_entry. Ka taea e te kaihautu U-Boot te whakaputa noa mo te mcause = 0..4, na kia rite koe ki te mau ki roto i te peera he. Katahi ahau ka haere ki roto i te whirihora, ka timata ahau ki te titiro ki nga mea e huri ana ahau, ka mahara: kei roto conf/rvboot-fit.txt tuhia:

fitfile=image.fit
# below much match what's in FIT (ugha)

Kaati, me whakauru nga konae katoa ki roto i te hanganga ture, whakakapia te rarangi whakahau kernel ki tetahi mea penei, na te mea he whakapae tera SIF0 - koinei te putanga i tetahi waahi ma PCIe:

-bootargs=console=ttySIF0,921600 debug
+bootargs=console=ttyS0,125200 debug

A kia huri tatou i te hashing algorithm mai i SHA-256 ki MD5: Kaore au e hiahia ki te kaha cryptographic (ina koa ki te patuiro), he tino roa te waa, a mo te hopu i nga hapa tika i te wa e utaina ana, he ngawari rawa te MD5. He aha te mutunga? I timata matou ki te whakaoti i te taumata o mua kia tere ake (na te mea ngawari noa iho), a ka whakatuwherahia te waahanga e whai ake nei:

...
   Verifying Hash Integrity ... md5+ OK
   Loading loadables from 0x90a5a758 to 0x82000000
libfdt fdt_check_header(): FDT_ERR_BADMAGIC
chosen {
        linux,initrd-end = <0x00000000 0x83000000>;
        linux,initrd-start = <0x00000000 0x82000000>;
        riscv,kernel-end = <0x00000000 0x80a00000>;
        riscv,kernel-start = <0x00000000 0x80200000>;
        bootargs = "debug console=tty0 console=ttyS0,125200 root=/dev/mmcblk0p2 rootwait";
};
libfdt fdt_path_offset() returned FDT_ERR_NOTFOUND
chosen {
        linux,initrd-end = <0x00000000 0x83000000>;
        linux,initrd-start = <0x00000000 0x82000000>;
        riscv,kernel-end = <0x00000000 0x80a00000>;
        riscv,kernel-start = <0x00000000 0x80200000>;
        bootargs = "debug console=tty0 console=ttyS0,125200 root=/dev/mmcblk0p2 rootwait";
};
   Loading Kernel Image ... OK
Booting kernel in
3

Engari karekau te karaka i te karaka...

(gdb) x/x 0x0200bff8
0x200bff8:      0x00000000

Aue, te ahua o te whakatika i te karaka i puta he waahi, ahakoa ki taku whakaaro i tera wa i awhina. Kao, ko te tikanga me whakatika, engari me huri a ringa i nga pere ka kite he aha te mahi:

0x00000000bff6dbb0 in ?? ()
(gdb) set variable *0x0200bff8=1000000
(gdb) c
Continuing.
^C
Program received signal SIGINT, Interrupt.
0x00000000bff6dbb0 in ?? ()
(gdb) set variable *0x0200bff8=2000000
(gdb) c
Continuing.
^C
Program received signal SIGINT, Interrupt.
0x00000000bff6dbb0 in ?? ()
(gdb) set variable *0x0200bff8=3000000
(gdb) c
Continuing.

I taua wā…

   Loading Kernel Image ... OK
Booting kernel in
3
2
1
0
## Starting application at 0x80000000 ...

Kao, ka haere au ki te whakaaunoa i te karaka - ki te kore tera pea ka whakatau ia ki te whakatikatika i te karaka ki reira!

I tenei wa, ko te wahitau o nga tohutohu o naianei e tohu ana ki tetahi waahi

0000000080001c20 <poweroff>:
    80001c20:   1141                    addi    sp,sp,-16
    80001c22:   e022                    sd      s0,0(sp)
    80001c24:   842a                    mv      s0,a0
    80001c26:   00005517                auipc   a0,0x5
    80001c2a:   0ca50513                addi    a0,a0,202 # 80006cf0 <softfloat_countLeadingZeros8+0x558>
    80001c2e:   e406                    sd      ra,8(sp)
    80001c30:   f7fff0ef                jal     ra,80001bae <printm>
    80001c34:   8522                    mv      a0,s0
    80001c36:   267000ef                jal     ra,8000269c <finisher_exit>
    80001c3a:   00010797                auipc   a5,0x10
    80001c3e:   41e78793                addi    a5,a5,1054 # 80012058 <htif>
    80001c42:   639c                    ld      a5,0(a5)
    80001c44:   c399                    beqz    a5,80001c4a <poweroff+0x2a>
    80001c46:   72c000ef                jal     ra,80002372 <htif_poweroff>
    80001c4a:   45a1                    li      a1,8
    80001c4c:   4501                    li      a0,0
    80001c4e:   dc7ff0ef                jal     ra,80001a14 <send_ipi_many>
    80001c52:   10500073                wfi
    80001c56:   bff5                    j       80001c52 <poweroff+0x32>

i roto i te Berkeley Boot Loader kua utaina. Ko ahau ake, ko te mea e rangirua ana ahau mo tenei ko te whakahua htif — te atanga kaihautu i whakamahia mo te whakarewanga here o te kakano (ara, i te mahi tahi me te ARM kaihautu), i whakaaro ahau ko au anake. Heoi, ki te kitea e koe tenei mahi i roto i te waehere puna, ka kite koe ehara nga mea katoa i te kino:

void poweroff(uint16_t code)
{
  printm("Power offrn");
  finisher_exit(code);
  if (htif) {
    htif_poweroff();
  } else {
    send_ipi_many(0, IPI_HALT);
    while (1) { asm volatile ("wfin"); }
  }
}

Quest: timata te karaka

Ko te rapu i nga rehita i CLINT ka arahi tatou ki

    val io = IO(new Bundle {
      val rtcTick = Bool(INPUT)
    })

    val time = RegInit(UInt(0, width = timeWidth))
    when (io.rtcTick) { time := time + UInt(1) }

E hono ana ki te RTC, ki te MockAON ngaro ranei, i whakaaro ahau i te tuatahi: “Na, he aha ta tatou i konei? Kaore i te marama? Kia whakawetohia!" I te mea kare ano au i te marama he aha te momo mahi makutu karaka kei reira, no reira ka whakahou ano ahau i tenei arorau ki roto. System.scala:

  val rtcDivider = RegInit(0.asUInt(16.W)) // на всякий случай поддержу до 16ГГц, я оптимист :)
  val mhzInt = p(DevKitFPGAFrequencyKey).toInt
  // Преположим, частота равна целому числу мегагерц
  rtcDivider := Mux(rtcDivider === (mhzInt - 1).U, 0.U, rtcDivider + 1.U)
  outer.clintOpt.foreach { clint =>
    clint.module.io.rtcTick := rtcDivider === 0.U
  }

Te haere ki te kernel Linux

I konei kua toia kee te korero, kua paku noa iho, no reira ka whakaahua ahau mai i runga ki raro:

I mau a BBL i te aroaro o FDT i 0xF0000000, engari kua whakatikahia e au! Ana, ka titiro ano... I kitea ki roto HiFive_U-Boot/arch/riscv/lib/boot.c, whakakapihia e 0x81F00000, kua tohua i roto i te whirihoranga whawhai U-Boot.

Na ka amuamu a BBL kaore he maharatanga. Ko taku ara kei roto i te mahi mem_prop, kei te aha riscv-pk/machine/fdt.c: mai reira i ako ahau me tohu koe i te fdt ram node hei device_type = "memory" - tera pea, me whakatikahia te kaihanga tukatuka, engari mo tenei wa ka tuhia e au ma te ringaringa - ahakoa, kua whakawhitia e ahau tenei konae.

Inaianei kua tae mai ki ahau te panui (kua whakahōputuhia, me te hokinga mai o te waka):

This is bbl's dummy_payload.  To boot a real kernel, reconfigure bbl
with the flag --with-payload=PATH, then rebuild bbl. Alternatively,
bbl can be used in firmware-only mode by adding device-tree nodes
for an external payload and use QEMU's -bios and -kernel options.

Ko te ahua kei te tohuhia nga whiringa ina hiahiatia riscv,kernel-start и riscv,kernel-end i roto i te DTB, engari ka poroporoaki nga kore. Patuiro query_chosen I whakaatu mai kei te ngana a BBL ki te tarai i tetahi wahitau 32-bit, engari ka puta mai i te takirua <0x0 0xADDR>, a ko te uara tuatahi ko nga moka iti rawa. Kua taapirihia ki te waahanga chosen

chosen {
      #address-cells = <1>;
      #size-cells = <0>;
      ...
}

me te whakatika i te whakatipuranga o nga uara: kaua e tapiri 0x0 te huānga tuatahi.

Ko enei 100500 nga taahiraa ngawari ka ngawari ki te maataki i te hinganga o te korora:

Kupu huna

   Verifying Hash Integrity ... md5+ OK
   Loading loadables from 0x90a5a758 to 0x82000000
libfdt fdt_check_header(): FDT_ERR_BADMAGIC
chosen {
        linux,initrd-end = <0x83000000>;
        linux,initrd-start = <0x82000000>;
        riscv,kernel-end = <0x80a00000>;
        riscv,kernel-start = <0x80200000>;
        #address-cells = <0x00000001>;
        #size-cells = <0x00000000>;
        bootargs = "debug console=tty0 console=ttyS0,125200 root=/dev/mmcblk0p2 rootwait";
        stdout-path = "uart0:38400n8";
};
libfdt fdt_path_offset() returned FDT_ERR_NOTFOUND
chosen {
        linux,initrd-end = <0x83000000>;
        linux,initrd-start = <0x82000000>;
        riscv,kernel-end = <0x80a00000>;
        riscv,kernel-start = <0x80200000>;
        #address-cells = <0x00000001>;
        #size-cells = <0x00000000>;
        bootargs = "debug console=tty0 console=ttyS0,125200 root=/dev/mmcblk0p2 rootwait";
        stdout-path = "uart0:38400n8";
};
   Loading Kernel Image ... OK
Booting kernel in
3
2
1
0
## Starting application at 0x80000000 ...
bbl loader

                SIFIVE, INC.

         5555555555555555555555555
        5555                   5555
       5555                     5555
      5555                       5555
     5555       5555555555555555555555
    5555       555555555555555555555555
   5555                             5555
  5555                               5555
 5555                                 5555
5555555555555555555555555555          55555
 55555           555555555           55555
   55555           55555           55555
     55555           5           55555
       55555                   55555
         55555               55555
           55555           55555
             55555       55555
               55555   55555
                 555555555
                   55555
                     5

           SiFive RISC-V Core IP
[    0.000000] OF: fdt: Ignoring memory range 0x80000000 - 0x80200000
[    0.000000] Linux version 4.19.0-sifive-1+ (trosinenko@trosinenko-pc) (gcc version 8.3.0 (Buildroot 2019.02-07449-g4eddd28f99)) #1 SMP Wed Jul 3 21:29:21 MSK 2019
[    0.000000] bootconsole [early0] enabled
[    0.000000] Initial ramdisk at: 0x(____ptrval____) (16777216 bytes)
[    0.000000] Zone ranges:
[    0.000000]   DMA32    [mem 0x0000000080200000-0x00000000bfffffff]
[    0.000000]   Normal   [mem 0x00000000c0000000-0x00000bffffffffff]
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000080200000-0x00000000bfffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000080200000-0x00000000bfffffff]
[    0.000000] On node 0 totalpages: 261632
[    0.000000]   DMA32 zone: 3577 pages used for memmap
[    0.000000]   DMA32 zone: 0 pages reserved
[    0.000000]   DMA32 zone: 261632 pages, LIFO batch:63
[    0.000000] software IO TLB: mapped [mem 0xbb1fc000-0xbf1fc000] (64MB)

(ko te moko e whakaatuhia ana e BBL, ko te mea whai tohu wa ka whakaatuhia e te kernel).

Waimarie, kaore au i te mohio kei te pehea nga waahi katoa, engari i runga i te RocketChip, ka hono koe i te patuiro ma JTAG, ka taea e koe te hopu mahanga mai i te pouaka - ka mutu tonu te kaipatu i tenei wa.

Program received signal SIGTRAP, Trace/breakpoint trap.
0xffffffe0000024ca in ?? ()
(gdb) bt
#0  0xffffffe0000024ca in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
(gdb) file work/linux/vmlinux
A program is being debugged already.
Are you sure you want to change the file? (y or n) y
Reading symbols from work/linux/vmlinux...done.
(gdb) bt
#0  0xffffffe0000024ca in setup_smp () at /hdd/trosinenko/fpga/freedom-u-sdk/linux/arch/riscv/kernel/smpboot.c:75
#1  0x0000000000000000 in ?? ()
Backtrace stopped: frame did not save the PC

herekore-u-sdk/linux/arch/riscv/kernel/smpboot.c:

void __init setup_smp(void)
{
    struct device_node *dn = NULL;
    int hart;
    bool found_boot_cpu = false;
    int cpuid = 1;

    while ((dn = of_find_node_by_type(dn, "cpu"))) {
        hart = riscv_of_processor_hartid(dn);
        if (hart < 0)
            continue;

        if (hart == cpuid_to_hartid_map(0)) {
            BUG_ON(found_boot_cpu);
            found_boot_cpu = 1;
            continue;
        }

        cpuid_to_hartid_map(cpuid) = hart;
        set_cpu_possible(cpuid, true);
        set_cpu_present(cpuid, true);
        cpuid++;
    }

    BUG_ON(!found_boot_cpu); // < ВЫ НАХОДИТЕСЬ ЗДЕСЬ
}

Ka rite ki te korero a te kata tawhito, Karekau te PTM i kitea, kei te whakahaere i te tauira rorohiko. Ana, kaore ranei e rere. Kua ngaro i roto i te matua tukatuka kotahi.

/* The lucky hart to first increment this variable will boot the other cores */
atomic_t hart_lottery;
unsigned long boot_cpu_hartid;

He pai te korero i roto linux/arch/riscv/kernel/setup.c - he momo peita o te taiapa e whakamahi ana i te tikanga Tom Sawyer. I te nuinga o te waa, mo etahi take karekau he toa i tenei ra, ka whakawhitia te taonga ki te utu e whai ake nei...

I konei ka whakaaro ahau kia mutu te tuhinga roa.

Ka haere tonu. Ka puta he whawhai me tetahi pepeke maminga e huna ana mena ka tere haere koe ki runga me te hikoi kotahi.

Whakaaturanga panui tuhinga (hononga o waho):
Wāhanga 3: Tata ki te uta Linux mai i te kaari SD ki RocketChip

Source: will.com

Tāpiri i te kōrero