В
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 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:
Tirohanga Raro:
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
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 sudo
no 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).
Ko te ahua nei, he aha atu te tumanako - he kino te whakauru, he aha nga momo waehere puna kei reira? Engari i roto
(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.
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 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
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
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):
Source: will.com