ะ
เบฎเบฒเบเปเบงเบเบฐเบเบฐเบเบญเบเบกเบต SD card เบเบตเปเปเบเบทเปเบญเบกเบเปเปเบเปเบฒเบเบชเปเบงเบเบเบดเบเบเปเป SPI, เปเบเบฑเปเบเบเบฝเบงเบเบฑเบเบเบฑเบ UART. เปเบเบชเปเบงเบเบเบญเบเบเบญเบเปเบง, BootROM เบเบฐเบเบทเบเปเบเบเบเบตเปเบเปเบงเบ xip
เบชเบธเบ sdboot
เปเบฅเบฐ, เปเบเบเบงเบฒเบกเปเบเบฑเบเบเบดเบ, เบเบฑเปเบเบเบญเบเบเบฒเบเปเบซเบผเบเบเปเปเปเบเบเบตเปเปเบเปเบเบทเบเปเบเบตเปเบก (เปเบ SD card).
เบชเปเบฒเปเบฅเบฑเบเบฎเบนเบเบฎเบฒเบเปเบง
เบเบฑเปเบเบเบฑเปเบ, เบงเบฝเบเบเบฒเบ: เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเปเบฝเบเปเบเบฑเบเบซเบผเบฑเบ "เบเบฐเบซเบเบฒเบเปเบซเบเป" เปเบฅเบฐเปเบเบทเปเบญเบกเบเปเป UART (เบเบฒเบ Raspberry) เปเบฅเบฐเบญเบฐเปเบเบเปเบเบต SD (เบเบงเบเปเบฎเบปเบฒเปเบเปเปเบเปเบเบฑเบเบเบฒเบ Catalex เบเบตเปเบกเบตเบซเบปเบ pins: GND, VCC, MISO, MOSI, SCK, CS) .
เปเบเบซเบผเบฑเบเบเบฒเบ, เบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบกเปเบเบเปเบญเบเบเปเบฒเบเบเปเบฒเบเบเบฒเบ. เปเบเปเบเปเบญเบเบเบตเปเบเบฐเบฎเบฑเบเบฎเบนเปเปเบฅเบทเปเบญเบเบเบตเป, เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเบทเบเบเบดเปเบกเปเบฅเบฑเบเบเปเบญเบเบเบฒเบเบเปเบฒเบเบซเบเบถเปเบ: เบซเบผเบฑเบเบเบฒเบเปเบงเบฅเบฒเบเปเบญเบเบซเบเปเบฒเบเบตเป, เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเบฑเบเบชเบดเบเปเบเบญเบตเบเปเบเบทเปเบญเบซเบเบถเปเบเบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฝเบเปเบเปเบเปเบญเบเบเบฒเบเบเบฐเบชเบปเบกเปเบเบปเปเบฒเปเบ. System
เบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบเปเบเบฑเปเบ: HasPeripheryUART
(เปเบฅเบฐเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฒเบกเบเบงเบฒเบกเปเบซเบกเบฒเบฐเบชเบปเบก), เบเบฝเบงเบเบฑเบเบชเปเบฒเบฅเบฑเบ SD card - เปเบฅเบฐเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเบเบฐเบเบฝเบกเบเปเบญเบก. เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเบฑเบเบชเบดเบเปเบเบเบตเปเบเบฐเปเบเบดเปเบเบงเปเบฒเบกเบฑเบเบเบทเบเบเบฐเบเบดเบเบฑเบเปเบเบเบฒเบเบญเบญเบเปเบเบ "เบขเปเบฒเบเบฎเบธเบเปเบฎเบ". เบเบฑเปเบเบเบฑเปเบ, เบชเบดเปเบเบเบตเปเบฎเปเบฒเบเปเบฎเบเบเปเบฝเบงเบเบฑเบเปเบฅเบทเปเบญเบเบเบตเป? Arty, เบเบฒเบเบปเบเบเบทเปเบ, เบเปเปเปเบซเบกเบฒเบฐ - monster เบเบฑเบเบเบปเบเบขเบนเป unleahshed.DevKitConfigs
. เปเบฅเบฐ เบเบฑเบ เบเบต เบเบฑเบ เปเบ เบกเบฑเบ เปเบเป เบซเบฑเบ เบญเบญเบ เบงเปเบฒ เบกเบต เบเบฒเบ overlays เบขเบนเป เบเบปเปเบง เบเบธเบ เปเบซเปเบ , เปเบเบดเปเบ เปเบเป เบเบทเบ เปเบเบตเปเบก เบเบถเปเบ เปเบเบ เบเปเบฒเบ เบเบฒ เบฅเบฒ เบกเบด เปเบเบต เปเบเบ เบเบฐ เปเบ . เบเปเบฒโเบเบฐโเปเบเบปเปเบฒโเปเบเบปเบฒโเบงเปเบฒโเบเบตเปโเปเบกเปเบโเบญเบฒเบโเบเบฐโเปเบเบฑเบโเบเบฒเบโเบเปเบฝเบโเปเบเบโเปเบเปโเบซเบผเบฒเบโเปเบฅเบฐโเบเบฒเบโเบเบฑเปเบโเบเปเบฒ, เปเบเปโเบเปเบฒโเบเบฐโเปเบเบปเปเบฒโเบเปเบญเบโเบเบฒเบโเบขเปเบฒเบโเบซเบเปเบญเบโเบเบฒเบโเบเปเบฒโเปเบเบตเบโเบเบฒเบโเบเบฒเบโเบขเปเบฒเบโเบเปเบฒโเบญเบดเบ ... เปเบเบปเปเบฒโเบกเบตโเบชเบดเปเบโเบเบฝเบงโเบเบฑเบโเบเปเปโ, เบเบฝเบโเปเบเปโเบเปเบฒเบโเบเบฒเบโเปเบฅเบฐโเบซเบเปเบฒโเบฅเปเบฒโเบเบฒเบโเบซเบผเบฒเบโ? ... เบเบฑเปเบเปเบกเปเบเปเบงเบฅเบฒเบเบตเปเบเปเบญเบเปเบเบปเปเบฒเบกเบฒ vera.iofpga.FPGAChip
เบชเปเบฒเบฅเบฑเบ Microsemi FPGAs เปเบฅเบฐเบเบฑเบเบเบตเบเบฑเบเปเบเบกเบฑเบเปเบเบเบญเบญเบเบชเปเบฒเบฅเบฑเบเบเปเบฒเปเบงเบปเปเบฒเปเบฅเบฐเบเบฐเบเบฒเบเบฒเบกเปเบฎเบฑเบเปเบซเปเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบญเบเบเปเบญเบเปเบญเบเปเบเบเบเบฒเบเบเบฝเบเบเบฝเบ, เปเบเบเบเบตเบเบตเปเบกเบต "เบฎเบนเบเปเบเบ motherboard" เบเบฑเบเบซเบกเบปเบเบซเบผเบฒเบเบซเบผเบทเบซเบเปเบญเบเบขเบนเปเปเบเปเบเบฅเปเบเบฝเบง.
เบกเบฑเบเปเบเปเบซเบฑเบเบญเบญเบเบงเปเบฒเบเปเบฒเบเบเบฝเบเปเบเปเบเปเบญเบเบเบฒเบเปเบเบตเปเบก System.scala
เบชเบฒเบ
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
...
เปเบชเบฑเปเบเบขเบนเปเปเบเบฎเปเบฒเบเบเบฒเบเบเบญเบเบซเปเบญเบเบฎเบฝเบ System
เปเบเบตเปเบกเบเปเปเบกเบนเบเบเปเบฝเบงเบเบฑเบเบเบงเบฒเบกเบเบตเปเบเบตเปเบชเปเบงเบเบเบตเปเบเบญเบ SoC เบเบญเบเบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบตเบเบเบฒเบเบเบฑเบเปเบเบฅเป dts. เปเบเบปเปเบฒเบเบตเปเบเปเบญเบเปเบเบปเปเบฒเปเบ, DTS/DTB เปเบกเปเบเบเบฒเบเบเบฝเบเบเบฝเบเปเบเบเบเบปเบเบเบตเปเบเบญเบเปเบเบเปเบเปเบฅเบเบต plug-and-play เบชเปเบฒเบฅเบฑเบเบญเบธเบเบฐเบเบญเบเบเบฑเบเบเบปเบง: เบเบปเปเบเปเบกเปเบเปเบฒเบญเบฐเบเบดเบเบฒเบ dts เบเบทเบเบฅเบงเบเบฅเบงเบกเปเบเบปเปเบฒเปเบเปเบเปเบเบฅเป dtb binary เปเบฅเบฐเปเบญเบเปเบเบ bootloader เบเบฑเบ kernel เปเบเบทเปเบญเปเบซเปเบกเบฑเบเบชเบฒเบกเบฒเบเบเบฑเปเบเบเปเบฒเปเบเปเบขเปเบฒเบเบเบทเบเบเปเบญเบ. เบฎเบฒเบเปเบง. เบซเบเปเบฒเบชเบปเบเปเบ, เปเบเบเบเปเปเบกเบตเบเบฒเบเบชเบฒเบเบเบฑเบ tlclock
เบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเบชเบฑเบเปเบเบฒเบฐเบขเปเบฒเบเบชเบปเบกเบเบนเบ, เปเบเปเบเบฒเบเบฅเบงเบเบฅเบงเบก BootROM (เปเบซเปเบเปเบญเบเปเบเบทเบญเบเปเบเบปเปเบฒ, เบเบฝเบงเบเบตเปเบกเบฑเบเบเบฐเปเบเบฑเบเปเบฅเปเบง sdboot
) เบเบฐเบเปเปเปเบฎเบฑเบเบงเบฝเบ - เปเบเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเบฅเบงเบเบฅเบงเบกเบกเบฑเบ parses เปเบเบฅเป dts เปเบฅเบฐเบชเปเบฒเบ header เบเบฑเบ macro. TL_CLK
, เบเบญเบเปเบเบเบตเปเบฅเบฒเบงเบเบฐเบชเบฒเบกเบฒเบเบเบฑเปเบเบเปเบฒเบเบปเบงเปเบเปเบเบเบงเบฒเบกเบเบตเปเปเบเปเบขเปเบฒเบเบเบทเบเบเปเบญเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเปเบเบญเบเบเบฒเบเบเบญเบ.
เบเบญเบเบเบฑเปเบเบเปเบฒเบเบเบฑเบเบเบฐเบเปเบญเบเปเบเปเปเบเปเปเบ "เบชเบฒเบเปเบ" เปเบฅเบฑเบเบเปเบญเบ:
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
}
เบเปเบญเบเปเบชเปเบเบฒเบเบฅเบปเบเบเบฐเบเบฝเบ, เปเบเบทเปเบญเบเบงเบฒเบกเบเบทเปเบชเบฑเบ, เปเบเปเบเบทเบเปเบเบตเปเบกเบเบฝเบเปเบเปเปเบเบเบเบฒเบเบเบฝเบเบเบฝเบเบเบฑเบเบเบฒเบเบเปเบญเบเบญเบทเปเบเปเบเบฅเบฐเบซเบฑเบเบเบปเปเบเบชเบฐเบเบฑเบ. เบชเปเบงเบเบซเบผเบฒเบเบญเบฒเบเบเบฐ, เบเบงเบเปเบเบปเบฒเบเบงเบเบเบฐเบเบปเบเบเปเบญเบ dq
? เบเปเบญเบเบเบฑเบเบเปเปเบเบปเบเบเปเบฒเบเบญเบเปเบเบทเปเบญ, เปเบเปเปเบเบดเปเบเบเบทเบงเปเบฒเบชเปเบงเบเบเบตเปเปเบซเบผเบทเบญเบเบญเบเบฅเบฐเบซเบฑเบเปเบกเปเบเบญเบตเบเปเบชเปเบเบฝเบเปเบเปเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฑเปเบเบเปเบฒเบง.
เบเบฒเบเบเปเบฒเบเบฎเปเบฒเบเบเบฒเบ, เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฝเบเปเบเปเปเบเปเบกเบญเบเบซเบกเบฒเบ pins เบเบฒเบเบญเบญเบเปเบเบเปเบซเปเบเบฑเบเบเบดเบเบเปเปเบเบปเบงเบเบฑเบเบเบฃเบตเบขเบนเปเปเบเบเบฑเบเปเบฅเบฐเบเปเบฒเบ jumper เบเบฒเบเบเบฑเบเปเบฅเบทเบญเบเปเบฎเบเบเบฑเบเปเบเบฑเบ 3.3V.
เบญเบฐเปเบเบฑเบเปเบเบต SD
เปเบเบดเปเบเบเบฒเบเบเปเบฒเบเปเบเบดเบ:
เบกเบธเบกเปเบเบดเปเบเบฅเบธเปเบก:
Software Debugging: เปเบเบทเปเบญเบเบกเบท
เบเปเบฒเบญเบดเบ, เปเบซเปเปเบงเบปเปเบฒเบเปเบฝเบงเบเบฑเบเปเบเบทเปเบญเบเบกเบทเปเบเปเบเบฑเบเบซเบฒเบเบตเปเบกเบตเบขเบนเปเปเบฅเบฐเบเปเปเบเปเบฒเบเบฑเบเบเบญเบเบกเบฑเบ.
เบกเบดเบเบดเบเบญเบก
เบเปเบญเบเบญเบทเปเบ เปเบปเบ, เบเบงเบเปเบฎเบปเบฒเบเบฐเบเปเบญเบเบญเปเบฒเบเบชเบดเปเบเบเบตเป bootloader เปเบฅเบฐ kernel output. เปเบเบทเปเบญเปเบฎเบฑเบเบชเบดเปเบเบเบตเปเปเบ Linux (เปเบเบเปเบฅเบฐเบเบตเบเบตเป, เบขเบนเปเปเบ RaspberryPi), เบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเปเบเบเบเบฒเบ Minicom. เปเบเบเบเบปเปเบงเปเบเปเบฅเปเบง, เปเบเบเบเบฒเบเปเบเบเปเปเบเบฒเบกเบเบตเปเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเบญเบ serial เบเบฐเปเบฎเบฑเบ.
เบเบฐเบฅเบธเบเบฒเบฎเบฑเบเบเบฒเบเบงเปเบฒเปเบกเบทเปเบญเปเบฅเบตเปเบกเบเบปเปเบ, เบเบทเปเบญเบธเบเบฐเบเบญเบเบเบญเบเบเปเบญเบเบเบทเบเบฅเบฐเบเบธเปเบเบฑเบ -D /dev/ttyS0
- เบซเบผเบฑเบโเบเบฒเบโเบเบฒเบโเปเบฅเบทเบญเบโ -D
. เบเบต, เบเปเปเบกเบนเบเบเบปเปเบเบเป: เบเบฒเบเบญเบญเบ, เบเบฒเบเบเปเบฒเปเบเป Ctrl-A, X
. เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบปเบงเบเบดเบเปเบฅเปเบงเบกเบตเบเปเบฅเบฐเบเบตเบเบตเปเบเบฒเบเบเบฐเบชเบปเบกเบเบฐเบชเบฒเบเบเบตเปเบเปเปเปเบเปเบเบปเบ - เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบชเบฒเบกเบฒเบเปเบงเบปเปเบฒเบเปเบฒเบเปเบเบฒเบเบเบญเบเบเบฐเบเบธเบก SSH เบเบตเปเปเบเปเบเบฝเบ killall -KILL minicom
.
เบกเบตเบเบธเบเบชเบปเบกเบเบฑเบเบญเบตเบเบญเบฑเบเปเบถเปเบ. เปเบเบเบชเบฐเปเบเบฒเบฐ, RaspberryPi เบกเบตเบชเบญเบ UART, เปเบฅเบฐเบเบญเบเบเบฑเบเบชเบญเบเบชเบฒเบกเบฒเบเบเบฑเบเปเบเบเปเบเปเปเบฅเปเบงเบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบ: เบซเบเบถเปเบเบชเปเบฒเบฅเบฑเบ Bluetooth, เบญเบตเบเบญเบฑเบเบซเบเบถเปเบเปเบเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบเบเบญเบ kernel console. เปเบเบเบเบต, เบเบถเบเบเบดเบเปเบฒเบเบตเปเบชเบฒเบกเบฒเบเบเบทเบเบฅเบปเบเบฅเปเบฒเบ
เบเบฝเบเบเบทเบเบเบงเบฒเบกเบเปเบฒ
เปเบเปเบงเบฅเบฒเบเบตเป debugging, เปเบเบทเปเบญเบเบปเบเบชเบญเบเบชเบปเบกเบกเบธเบเบเบดเบเบฒเบ, เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฒเบเบเบฑเปเบเบเปเปเบเปเบญเบ เปเบซเบผเบ bootloader (เบเปเบญเบฐเปเบ) เปเบเบปเปเบฒเปเบเปเบ RAM เปเบเบเบเบปเบเบเบฒเบเปเบเบปเปเบฒเบเบฒเบ. เบเบฒเบเบเบตเบเบตเปเบชเบฒเบกเบฒเบเปเบฎเบฑเบเปเบเปเปเบเบเบเบปเบเบเบฒเบ GDB, เปเบเปเปเบเบเบตเปเบชเบธเบเบเปเบญเบเปเบเปเบเบฐเบเบดเบเบฑเบเบเบฒเบกเปเบชเบฑเปเบเบเบฒเบเบเปเบฒเบเป: เบเปเบญเบเปเบเปเบเบฑเบเบฅเบญเบเปเบเบฅเปเบเบตเปเบเปเบฒเปเบเบฑเบเปเบ Raspberry, เบเบฑเบเปเบเปเบชเบปเปเบเบเปเปเบเบญเบ 4444 เบเปเบฒเบ SSH (telnet เบเบฒเบ OpenOCD) เปเบฅเบฐเปเบเปเบเปเบฒเบชเบฑเปเบ. load_image
. เปเบกเบทเปเบญเบเปเบฒเบเปเบฎเบฑเบเบกเบฑเบ, เบกเบฑเบเปเบเบดเปเบเบเบทเบงเปเบฒเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเบเบทเบเปเบเปเปเบเบ, เปเบเปเปเบเบเบงเบฒเบกเปเบเบฑเบเบเบดเบ "เบกเบฑเบเบเปเปเบเบญเบ, เบกเบฑเบเบเบฐเบเบดเบเบเปเบฒเป": เบกเบฑเบเบเบฒเบงเปเบซเบฅเบเปเบเบฅเป, เบกเบฑเบเบเบฝเบเปเบเปเปเบฎเบฑเบเบกเบฑเบเบเปเบงเบเบเบงเบฒเบกเปเบงเบชเบญเบเบชเบฒเบกเบเบดเปเบฅเปเบเบเปเปเบงเบดเบเบฒเบเบต.
เบเบธเบเบเบฐเบชเบปเบกเบเบฑเบเบเบญเบเบเบฒเบเบเบดเบเบเบฑเปเบ breakpoints
เบซเบผเบฒเบเบเบปเบเบญเบฒเบเบเบฐเบเปเปเปเบเปเบเบดเบเบเปเบฝเบงเบเบฑเบเปเบฅเบทเปเบญเบเบเบตเปเปเบเปเบงเบฅเบฒเบเบตเป debugging เปเบเบฅเปเบเบฅเบกเบเบปเบเบเบฐเบเบด, เปเบเป breakpoints เบเปเปเปเบเปเบเบฑเปเบเบขเบนเปเปเบเบฎเบฒเบเปเบงเบชเบฐเปเบซเบกเบต. เบเบฒเบเบเบฑเปเบเบเบฒเบเบเปเบฒเบเบปเบเบเบธเบเปเบเปเบเบชเปเบงเบเบเปเบฝเบงเบเปเบญเบเบเบฑเบเบเบฒเบเบเบปเปเบงเบเบฒเบงเบเบฒเบเบเบฝเบเบเปเบฒเปเบเบฐเบเปเบฒเบเบดเปเบชเบเปเบเบชเบฐเบเบฒเบเบเบตเปเบเบตเปเปเบซเบกเบฒเบฐเบชเบปเบก เปเบเบเบเบปเบเปเบเบปเปเบฒเปเบเบฅเบฐเบซเบฑเบเปเบเบทเปเบญเบ. เบเบปเบงเบขเปเบฒเบ, เบเบตเปเปเบกเปเบเบงเบดเบเบตเบเบตเปเบเปเบฒเบชเบฑเปเบเบกเบฒเบเบเบฐเบเบฒเบเบเบญเบเบเปเบญเบเปเบฎเบฑเบเบงเบฝเบ b
เปเบ GDB. เบเบตเปเปเบกเปเบเบชเบดเปเบเบเบตเปเบเปเปเปเบเบเบตเป:
- เบเปเบฒเบเบเปเปเบชเบฒเบกเบฒเบเปเบชเปเบเบธเบเบเบฒเบเปเบ BootROM เปเบเบฒเบฐเบงเปเบฒ ROM
- เบเปเบฒเบเบชเบฒเบกเบฒเบเบเบฑเปเบเบเบธเบเบขเบธเบเปเบเบฅเบฐเบซเบฑเบเบเบตเปเปเบซเบฅเบเปเบเบปเปเบฒเปเบเปเบ RAM เบเบฒเบ SD card, เปเบเปเบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบฅเปเบเปเบฒเบเบปเบเบเปเบงเบฒเบกเบฑเบเบเบฐเบเบทเบเปเบซเบฅเบ. เบเปเบฒโเบเปเปโเบเบฑเปเบโเบเบฑเปเบ, เบเบงเบโเปเบฎเบปเบฒโเบเบฐโเบเปเปโเบเบฝเบโเบฅเบฐโเบซเบฑเบโเปเบโเปเบถเปเบโเบเบทเบโเปเปเป, เปเบเปโเบเบปเบงโเปเบซเบผเบโเบเบฐโเบเบฝเบโเบเบธเบโเบขเบธเบโเบเบญเบโเบเบงเบโเปเบฎเบปเบฒโเบเบทเบโเปเปเป.
เบเปเบญเบเปเบเปเปเบเบงเปเบฒเปเบเบปเปเบฒเบชเบฒเบกเบฒเบเบฎเปเบญเบเบเปเปเบซเปเปเบเปเบเบธเบเปเบเปเบเบฎเบฒเบเปเบงเปเบเปเบขเปเบฒเบเบเบฑเบเปเบเบ, เปเบเปเบงเปเบฒเบกเบตเบเปเบฒเบเบงเบเบเปเบฒเบเบฑเบ.
เบเบฒเบเบเบปเบเปเบเบ BootROM เบเปเบงเบ
เปเบเบเบฑเปเบเบเบญเบเปเบเบทเปเบญเบเบเบปเปเบเบเบญเบเบเบฒเบเบเบตเบเบฑเบ, เบกเบฑเบเบเบฐเบกเบตเบเบงเบฒเบกเบเบฒเบเบฐเบซเบเบฒเบเบตเปเบเบฐเปเบเปเปเบ BootROM เปเบฅเบฐเบเบฐเบเบฒเบเบฒเบกเบญเบตเบเปเบเบทเปเบญเบซเบเบถเปเบ. เปเบเปเบกเบตเบเบฑเบเบซเบฒ: BootROM เปเบกเปเบเบชเปเบงเบเบซเบเบถเปเบเบเบญเบเบเบฒเบเบญเบญเบเปเบเบเบเบตเปเปเบซเบฅเบเปเบเบปเปเบฒเปเบเปเบ FPGA, เปเบฅเบฐเบเบฒเบเบชเบฑเบเปเบเบฒเบฐเบเบญเบเบกเบฑเบเปเบกเปเบเปเบเบฑเบเปเบฅเบทเปเบญเบเบเบญเบเบชเบญเบเบชเบฒเบกเบเบฒเบเบต (เปเบฅเบฐเบเบตเปเปเบกเปเบเบซเบผเบฑเบเบเบฒเบเบเบฒเบเบฅเบงเบเบฅเบงเบกเปเบเบทเบญเบเบเบฑเบเบเบตเบเบญเบเบฎเบนเบเบเบฒเบ BootROM เบเบปเบงเบเบญเบเบกเบฑเบเปเบญเบเบเบฒเบ C เปเบฅเบฐ Assembler ... ). เปเบเบเบเบต, เปเบเบเบงเบฒเบกเปเบเบฑเบเบเบดเบ, เบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบ เปเบงเบซเบผเบฒเบ: เบฅเปเบฒโเบเบฑเบโเบเบฒเบโเบเบฐโเบเบดโเบเบฑเบโเปเบกเปเบโเบเบฑเปเบโเบเปเปโเปเบโเบเบตเปโ:
- เบชเปเบฒเบ bootrom.mif เบเบทเบเปเปเป (เบเปเบญเบเบเปเบฝเบเปเบเบฑเบ MIF เปเบเบ HEX, เปเบเบฒเบฐเบงเปเบฒเบเปเบญเบเบกเบตเบเบฑเบเบซเบฒเบเบฑเบ HEX เบชเบฐเปเปเบต, เปเบฅเบฐ MIF เปเบกเปเบเบฎเบนเบเปเบเบเปเบเบตเบกเบเบญเบ Alter)
- เปเบ Quartus เปเบงเบปเปเบฒ
Processing -> Update Memory Initialization File
- เปเบเบฅเบฒเบเบเบฒเบ Assembler (เปเบเบเบฑเบเบเปเบฒเบเบเบญเบ Tasks) เบเปเบฒเบชเบฑเปเบเปเบฅเบตเปเบกเบเบปเปเบเบญเบตเบเปเบเบทเปเบญเบซเบเบถเปเบ
เบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเบเปเบฝเบงเบเบฑเบเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบ - เบชเบญเบเบชเบฒเบกเบชเบดเบเบงเบดเบเบฒเบเบต.
เบเบณเบฅเบฑเบเบเบฐเบเบฝเบก SD card
เบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเบขเบนเปเบเบตเปเบเบตเปเบเปเบญเบเบเปเบฒเบเบเปเบฒเบเบเบฒเบ, เปเบเปเบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบกเบตเบเบงเบฒเบกเบญเบปเบเบเบปเบเปเบฅเบฐเบกเบตเบเบทเปเบเบเบตเปเบเบดเบเบเบฐเบกเบฒเบ 14Gb:
git clone https://github.com/sifive/freedom-u-sdk
git submodule update --recursive --init
make
เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบชเปเปเบเปเบเบเบตเปเบชเบฐเบญเบฒเบ, เบซเบผเบทเปเบเบเบเบตเปเบเบฐ, เบญเบฑเบเบเบตเปเบเปเปเบกเบตเบชเบดเปเบเบเบตเปเบเปเบฒเปเบเบฑเบ, SD card, เปเบฅเบฐเบเปเบฒเปเบเบตเบเบเบฒเบ
sudo make DISK=/dev/sdX format-boot-loader
โฆ เบขเบนเปเปเบช sdX
โ เบญเบธโเบเบฐโเบเบญเบโเบเปเบฒโเบเบปเบโเปเบซเปโเบเบฑเบโ. เบฅเบฐเบงเบฑเบ: เบเปเปเบกเบนเบเปเบเบเบฑเบเบเบฐเบเบทเบเบฅเบถเบ, เบเบฝเบเบเบฑเบ เปเบฅเบฐเปเบเบเบเบปเปเบงเปเบ! เบกเบฑเบเบเปเปเบเบธเปเบกเบเปเบฒเบเบตเปเบเบฐเปเบฎเบฑเบเบเบฒเบเบเบฐเบเบญเบเบเบฑเบเบซเบกเบปเบเบเบฒเบเบเบฒเบเปเบเป sudo
เปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบชเบดเปเบเบเปเปเบชเปเบฒเบเบเบฑเบเบซเบกเบปเบเบเบฐเบเบถเปเบเบเบฑเบ root
, เปเบฅเบฐเบชเบฐเบเบฒเปเบซเปเบเบเบฐเบเปเบญเบเปเบฎเบฑเบเบเบฒเบเบเบฒเบเปเบเป sudo
เบขเปเบฒเบเบเปเปเปเบเบทเปเบญเบ.
เบเบปเบเปเบเปเบฎเบฑเบเปเบกเปเบเบเบฑเบเบซเบกเบฒเบเปเบ GPT เบกเบตเบชเบตเปเบเบฒเบเบดเบเบฑเบ, เบซเบเบถเปเบเปเบเบเบฑเปเบเบกเบต FAT เบเบฑเบ uEnv.txt
เปเบฅเบฐเบฎเบนเบเบเบฒเบเบเบตเปเบชเบฒเบกเบฒเบเบเบนเบเปเบเปเปเบเบฎเบนเบเปเบเบ FIT (เบกเบฑเบเบกเบตเบฎเบนเบเบเบฒเบเบเปเบญเบเบซเบผเบฒเบ, เปเบเปเบฅเบฐเบเบปเบเบกเบตเบเบตเปเบขเบนเปเบเบฒเบงเปเบซเบฅเบเบเบญเบเบเบปเบเปเบญเบ), เบชเปเบงเบเปเบเปเบเบญเบทเปเบเปเบกเปเบเบซเบงเปเบฒเบเปเบเบปเปเบฒ, เบกเบฑเบเบเบงเบเบเบฐเบเบทเบเบเบฑเบเบฎเบนเบเปเบเบเปเบ Ext4 เบชเปเบฒเบฅเบฑเบ Linux. เบชเบญเบโเบเบฒเบโเบชเปเบงเบโเปเบเบตเปเบกโเปเบเบตเบก - เบฅเบถเบเบฅเบฑเบ: U-Boot เบเปเบฒเบฅเบปเบเบเบตเบงเบดเบเบขเบนเปเปเบเบซเบเบถเปเบ (เบเบฒเบเบเบปเบเปเบเบตเบเบเบญเบเบกเบฑเบ, เปเบเบปเปเบฒเบเบตเปเบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเบปเปเบฒเปเบ, เปเบกเปเบ hardcoded เปเบเบปเปเบฒเปเบเปเบ BootROM), เปเบเบเบฒเบเบเบปเบเบเบฑเบเบเปเบฒเบก, เบกเบฑเบเปเบเบดเปเบเบเบทเบงเปเบฒ, เบเบปเบงเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบเบญเบเบกเบฑเบเบกเบตเบเบตเบงเบดเบเบขเบนเป, เปเบเปเบเปเบญเบเบเปเปเปเบเปเปเบเปเบกเบฑเบเปเบเบทเปเบญ.
เบฅเบฐเบเบฑเบเบซเบเบถเปเบ, BootROM
เบเบฑเบเบเบฒเบเบตเปเปเบเบฑเบเบเบตเปเบเบดเบเบปเบกเบเปเบฒเบงเบงเปเบฒ: "เบเปเบฒเบขเบนเปเปเบเบเบฒเบเบเบฝเบเปเบเบผเปเบเบผเบกเบกเบตเบเบฒเบเปเบเบฑเปเบเบฅเปเบฒเบเบฑเบ tambourine, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเปเบเปเบญเปเบฅเบฑเบเปเบเบฃเบเบดเบเบเปเปเบกเบตเบเบฒเบเปเบเบฑเปเบเบฅเปเบฒเบเปเบงเบเปเบเบทเปเบญเบเบเบฑเบเปเบเบตเบ." เบกเบฑเบเบเปเปเบเปเบฝเบงเบเบฑเบเบเบงเบฒเบกเบเบดเบเบเบตเปเบงเปเบฒเปเบกเบทเปเบญเบเปเบญเบเปเบเบทเบญเบเปเบเบปเบฒเบเบฐเบเบฒเบ, เบเบฑเบเบชเบดเบเปเบเบงเปเบฒ "เบเบต, GND เปเบกเปเบเบฅเบฐเบเบฑเบเบเปเปเบฒเบเบฝเบงเบเบฑเบ." (เบเบฒเบเบปเบเบเบทเปเบ, เบเบปเบงเบเปเบฒเบเบเบฒเบเบเบฐเบเปเปเปเบเบฑเบเบเบงเบเบซเบผเบฑเบเบเบฒเบเบเบฑเบเบซเบกเบปเบ ... ) เบกเบฑเบเปเบเบตเปเบกเปเบเบตเบกเบเปเบฝเบงเบเบฑเบเบเบงเบฒเบกเบเบดเบเบเบตเปเบงเปเบฒเบเปเบฒเบกเบทเบเปเปเปเบเบตเบเปเบซเบเปเบเบฒเบเบเปเบญเบเบเบฑเปเบ, เปเบญเปเบฅเบฑเบเปเบเบฃเบเบดเบเบเปเปเปเบเบตเบเบขเบธเบเบเบตเปเบเบฐเปเบฎเบฑเบเปเบซเปเปเบเบตเบเบเบงเบฒเบกเปเบเบเปเบ: เปเบกเบทเปเบญ solder connector เปเบชเปเบเบฐเบเบฒเบ, เบเปเบญเบเบเบฑเบเบเปเปเบชเบฒเบกเบฒเบ solder เบเบดเบเบเปเปเปเบเปเบขเปเบฒเบเบเบทเบเบเปเบญเบ - เบงเบดเบเบตเปเบญเบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบเบงเบดเบเบตเบเบฒเบ solder เปเบเบเบเบปเบ. เปเบเปเบฅเบเบฐเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฑเบเบซเบกเบปเบ, เบเบฝเบเปเบเปเบเปเบฒเปเบเปเบเบฒเบเปเบซเบผเบฑเบ soldering, เบชเปเบฒเบฅเบฑเบเบเปเบฒเบเบฐเปเบเบปเปเบฒ, เบฅเบฒเบง "slapped" เบขเบนเปเบชเบธเปเบก. เบเบต, เบเบฒเบเบเบต solder เบเปเปเปเบซเบกเบฒเบฐเบชเบปเบกเบชเปเบฒเบฅเบฑเบเบญเบธเบเบซเบฐเบเบนเบกเบเบญเบเบเบฒเบเปเบซเบผเบฑเบ soldering, เบเบฒเบเบเบตเบญเบฒเบเบกเบตเบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบเบญเบทเปเบ ... เปเบเบเบเบปเปเบงเปเบ, เปเบเปเบงเบฅเบฒเบเบตเปเบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบซเบฑเบเบงเปเบฒเบเปเบฒเบเบฐเปเบเบปเปเบฒเบกเบตเบญเบฒเบเปเบเบฑเบชเบเบดเบเบเปเปเบเบฑเบเปเบฅเปเบง, เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเบฐเบเบดเปเบกเปเบฅเบฐเปเบฅเบตเปเบกเบเบปเปเบ debugging. เปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบกเบฑเบเปเบเปเปเบฅเบตเปเบกเบเบปเปเบ เบเบงเบฒเบกเบฅเบถเบเบฅเบฑเบ: เบเปเบญเบเปเบเบทเปเบญเบกเบเปเป RX/TX เบเบฒเบ UART, เบเปเบญเบเปเบซเบฅเบเปเบเบตเบกเปเบง - เบกเบฑเบเบเบญเบเบงเปเบฒ
INIT
CMD0
ERROR
เบเบต, เบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบกเปเบเบกเบตเปเบซเบเบเบปเบ - เบเปเบญเบเบเปเปเปเบเปเปเบเบทเปเบญเบกเบเปเปเปเบกเบเบนเบ SD card. เบเบงเบเปเบฎเบปเบฒเปเบเปเปเบเบชเบฐเบเบฒเบเบฐเบเบฒเบ, เปเบซเบฅเบเปเบเบตเบกเปเบง ... เปเบฅเบฐเบเบฝเบ ... เปเบเบฑเบเบซเบเบฑเบเบเปเบญเบเบเปเปเปเบเปเบเปเบฝเบเปเบ, เปเบเปเบเปเบญเบเบเปเบญเบเบเบฝเบเปเบเปเปเบเบตเบ: เบซเบเบถเปเบเบเบญเบ pins เปเบกเบเบนเบเบเปเบญเบเปเบเบทเปเบญเบกเบเปเปเบเบฑเบ VCC. เปเบเบเปเบฅเบฐเบเบตเบเบญเบเบเปเบญเบ, เปเบกเบเบนเบเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบ 5V เบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเบฐเบซเบเบญเบเบเบฐเบฅเบฑเบเบเบฒเบ, เบเบฑเปเบเบเบฑเปเบเปเบเบเบเปเปเบกเบตเบเบฒเบเบเบดเบเบชเบญเบเบเบฑเปเบ, เบเปเบญเบเปเบเปเบชเบฝเบเบชเบฒเบเบเบตเปเบกเบฒเบเบฒเบเปเบกเบเบนเบเปเบเบซเบฒเบเปเบฒเบเบเบปเบเบเบฑเบเบเปเบฒเบกเบเบญเบเบเบฐเบเบฒเบ. เบเบฑเปเบเบเบฑเปเบ, เบเบฒเบเปเบเบทเปเบญเบกเบเปเป soldered crookedly เปเบเปเบเบฒเบเปเบเบฑเบ skewed, เปเบฅเบฐ เบเบฒเบเบเบดเบเบเปเป UART เปเบกเปเบเบชเบนเบเปเบชเบเบเบฝเบเปเบเป. facepalm.jpg เปเบเบเบเบปเปเบงเปเบ, "เบซเบปเบงเบเบตเปเบเปเปเบเบตเปเบฎเบฑเบเปเบซเปเบเบฒเบเปเปเบเบฑเบเบเปเบญเบ," เปเบฅเบฐเบกเบทเบเปเบเปเปเบเบฑเบเบเปเบญเบเปเบซเปเบซเบปเบง ...
เบเบฑเปเบเบเบฑเปเบ, เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเปเบซเบฑเบเบชเบดเปเบเบเบตเปเบฅเปเบเบญเบเบกเบฒเบเบปเบเบเบฒเบ
INIT
CMD0
CMD8
ACMD41
CMD58
CMD16
CMD18
LOADING /
เบเบดเปเบเปเบเบเบงเปเบฒเบเบฑเปเบ, เบกเบฑเบเบเปเบฒเบเปเบฅเบฐเบเบปเบงเบเบตเปเบงเบฑเบเบเบฒเบเปเบซเบผเบเปเบเปเบซเบกเบธเบ. เบเปเบฒโเบเบฐโเปเบเบปเปเบฒโเบเบทเปโเบเปเบฒโเบงเบฑเบโเบฎเบฝเบโเบเบญเบโเบเปเบฒโเบเบฐโเปเบเบปเปเบฒโเบเบฑเบโเบเบตโเบเบฑเบโเปเบโเปเบฅเบฐโเบเบฒเบโเปเบซเบผเบโเบเบญเบ MinuetOS leisurely เบเบฒเบ floppy diskโ. เปเบงเบฑเปเบเปเบชเบเปเบเปเบงเปเบฒเปเบเบเปเป grind.
เบเบฑเบเบซเบฒเปเบกเปเบเบงเปเบฒเบซเบผเบฑเบเบเบฒเบเบเปเปเบเบงเบฒเบก BOOT เบเปเปเบกเบตเบซเบเบฑเบเปเบเบตเบเบเบถเปเบ. เบเบตเปเบซเบกเบฒเบเบเบงเบฒเบกเบงเปเบฒเบกเบฑเบเปเบเบดเบเปเบงเบฅเบฒเบเบตเปเบเบฐเปเบเบทเปเบญเบกเบเปเปเบเปเบฒเบ OpenOCD เบเบฑเบ Raspberry, เบเบฑเบ GDB เปเบเปเบเบปเปเบฒเบเบฒเบ, เปเบฅเบฐเปเบเบดเปเบเบงเปเบฒเบกเบฑเบเปเบกเปเบเบซเบเบฑเบ.
เบเปเบญเบเบญเบทเปเบ เปเบปเบ, เบเบฒเบเปเบเบทเปเบญเบกเบเปเปเปเบเบเปเบเป GDB เบเบฑเบเบเบตเปเบเปเบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบเบงเปเบฒ $pc
(เปเบเบเบเบฒเบเบเปเบฒเบ, เบเบตเปเบขเบนเปเบเบญเบเบเปเบฒเปเบเบฐเบเปเบฒเปเบเบเบฐเบเบธเบเบฑเบ) เบเบดเบเปเบ 0x0
- เบเบตเปเบญเบฒเบเบเบฐเปเบเบตเบเบเบถเปเบเบซเบผเบฑเบเบเบฒเบเบเบงเบฒเบกเบเบดเบเบเบฒเบเบซเบผเบฒเบ. เปเบเบฒเบฐเบชเบฐเบเบฑเปเบ, เบเบฑเบเบเบตเบซเบผเบฑเบเบเบฒเบเบเปเปเบเบงเบฒเบกเบญเบญเบ BOOT
เปเบซเปเปเบเบตเปเบก loop เบเบตเปเบเปเปเบกเบตเบเบญเบเปเบเบ. เบญเบฑเบเบเบตเปเบเบฐเปเบฎเบฑเบเปเบซเปเบฅเบฒเบงเบเบฑเบเบเปเบฒเปเบเปเบฅเบเบฐเปเบถเปเบ...
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;
}
เบฅเบฐเบซเบฑเบ tricky เบเบฑเปเบเบเปเบฒเบงเบเบทเบเบเปเบฒเปเบเป "เบชเปเบฒเบฅเบฑเบเบเบงเบฒเบกเบซเบเปเบฒเปเบเบทเปเบญเบเบท": เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเบดเบเบเบฒเบเบเปเบญเบเบงเปเบฒ loop เบเบตเปเบเปเปเบกเบตเบเบตเปเบชเบดเปเบเบชเบธเบเปเบกเปเบเบเบถเบเบเบดเบเปเบฒเบเบตเปเบเปเปเปเบเปเบเปเบฒเบเบปเบ, เปเบเป compiler เบเปเปเบซเบเปเบฒเบเบฐเปเบเบปเบฒ (เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเบทเบญเบเบเปเบฒเบเบงเปเบฒเบญเบตเบเบเบฒเบกเบเบฒเบ. 0x10000
เบเบฑเปเบเบขเบนเป BootROM).
เบกเบฑเบเบเบฐเปเบเบดเปเบเบเบทเบงเปเบฒ, เบกเบตเบซเบเบฑเบเบญเบตเบเปเบเปเบเบตเปเบเบฐเบเบฒเบเบซเบงเบฑเบ - harsh embedded, เบเบฐเปเบเบเบเบญเบเบฅเบฐเบซเบฑเบเปเบซเบผเปเบเปเบ? เปเบเปเปเบ
(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.
เบเปเบฒเบโเบเบฝเบโเปเบเปโเบเปเบญเบโเบเบฒเบโเบเบตเปโเบเบฐโเบเบฒเบงโเบโเปโเปเบซเบฅเบโเบเปเปโเปเบกเปเบโเปเบเบฅโเป MIF เบซเบผเบท binโ, เปเบเปโเบชเบฐโเบเบฑเบโเบเบปเปเบโเบชเบฐโเบเบฑเบโเปเบโเบฎเบนเบโเปเบเบ ELFโ.
เปเบเบเบฑเบเบเบธเบเบฑเบเบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบปเบฒเปเบเปเบเปเบงเบเบเบงเบฒเบกเบเบฐเบเบฒเบเบฒเบก nth เบเบตเปเบขเบนเป เบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฐเบชเบทเบเบเปเป (เบเบตเปเปเบกเปเบเปเบซเบเบเบปเบเบญเบทเปเบเบเบตเป compiler เบเปเปเบเบงเบเบเบฒเบเปเบเบปเบฒเบงเปเบฒ loop เปเบกเปเบเบเปเปเบกเบตเบเบญเบเปเบเบ). เบเบตเบกเบเบฒเบ
set variable $pc=0xADDR
เบญเบฐเบเบธเบเบฒเบเปเบซเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฝเบเบกเบนเบเบเปเบฒเบเบฒเบเบฅเบปเบเบเบฐเบเบฝเบเปเบเบเบฒเบเบเบดเบ (เปเบเบเปเบฅเบฐเบเบตเบเบตเป, เบเบตเปเบขเบนเปเบเบญเบเบเปเบฒเปเบเบฐเบเปเบฒเปเบเบเบฐเบเบธเบเบฑเบ). เบเปเบงเบเบเบฒเบเบเปเบงเบเปเบซเบผเบทเบญเบเบญเบเบกเบฑเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฝเบเบเปเบฒเบเบตเปเบเบฝเบเปเบงเปเปเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒ (เปเบฅเบฐเบเบฑเบเบเบถเบเบเบตเปเปเบฎเบฑเบเปเบเบเบเบตเปเบเปเบงเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒ).
เปเบโเบเบตเปโเบชเบธเบ, เบเปเบฒโเบเบฐโเปเบเบปเปเบฒโเปเบเปโเบชเบฐโเบซเบผเบธเบโเปเบเป (เบเปเปโเปเบเปโเปเบเบงเปโเบฒโเบญเบฑเบโเปเบโเบเบทเบโเบเปเบญเบโ) เบงเปเบฒโเบเบงเบโเปเบฎเบปเบฒโเบกเบต "เบฎเบนเบโเบเบฒเบโเบเบฑเบ SD เบเบญเบโเบฅเบฐโเบเบปเบโเบเบตเปโเบเบดเบโเบเบฒเบโ"โ, เปเบฅเบฐโเบเบงเบโเปเบฎเบปเบฒโเบเปเบฒโเปเบเบฑเบโเบเปเบญเบโเปเบโเบเปเปโเปเบกเปเบโเบเบฒเบโเปเบฅเบตเปเบกโเบเบปเปเบโเบเบญเบโเบเปเปโเบกเบนเบโเบเบตเปโเบเบฒเบงโเปเบซเบผเบโเปเบเปโ, เปเบเปโเบงเปเบฒโ. 0x89800
bytes เปเบเบตเปเบกเปเบเบตเบก:
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
เบเบฒเบเบเบตเบเบตเปเบเบฑเบเปเบเปเบฎเบฑเบเบเบปเบเบเบฐเบเบปเบเบเบฒเบเบเบงเบฒเบกเบเบดเบเบเบตเปเบงเปเบฒเบเปเปเบกเบตเบเบฑเบ 4Gb เบเบตเปเบเปเปเบเปเบฒเปเบเบฑเบเบขเบนเปเปเบเบกเบท, เบเปเบญเบเปเบญเบปเบฒ 2Gb เบซเบเบถเปเบเปเบฅเบฐเบเปเบฝเบเบกเบฑเบเปเบ Makefile เปเบเบเบชเบธเปเบก. DEMO_END=11718750
เบชเบธเบ DEMO_END=3078900
(เบขเปเบฒเบเบญเบเบซเบฒเบเบงเบฒเบกเบซเบกเบฒเบเปเบเบเบงเบฒเบกเบซเบกเบฒเบเบชเบฐเปเบเบฒเบฐ - เบเปเปเบกเบต, เบกเบฑเบเปเบเบฑเบเบเบฝเบเปเบเปเบงเปเบฒเปเบเบเบฑเบเบเบธเบเบฑเบเบฎเบนเบเบเบฒเบเปเบเปเบเบทเบเบเบฑเบเปเบชเปเปเบเบเบฑเบ).
เบฅเบฐเบเบฑเบเบชเบญเบ, U-Boot
เปเบเบเบฑเบเบเบธเบเบฑเบเบเบงเบเปเบฎเบปเบฒเบเบฑเบ "เบเบปเบ", เปเบเปเบเบงเบเปเบฎเบปเบฒเบขเบนเปเปเบเบชเบฐเบเบฒเบเบเบตเปเบเบตเปเบเบทเบเบเปเบญเบเปเบฅเปเบง 0x0000000080089a84
. เบเบตเปเบเบตเปเบเปเบญเบเบเปเบญเบเบเบญเบกเบฎเบฑเบเบงเปเบฒ: เปเบเบเบงเบฒเบกเปเบเบฑเบเบเบดเบ, เบเบฒเบเบเปเบฒเบชเบฐเปเบซเบเบตเบเปเปเปเบเป "เบขเบธเบเบเบฑเบเบซเบกเบปเบ", เปเบเปเบเบทเบเบเบฝเบเบเบฒเบเบชเปเบงเบ "เบซเบผเบฑเบเบเบฒเบ", เบเบฑเปเบเบเบฑเปเบเบเปเบญเบเปเบเปเบเบฑเบเบเบฒเบเปเบชเปเปเบเบฅเป dtb เบเบตเปเบเบทเบเบเปเบญเบเบเบฒเบ SoC เบเบญเบเบเบงเบเปเบฎเบปเบฒ, เปเบเปเปเบเบกเบฑเบเบขเบนเปเปเบเบเบฒเบเบเบฑเปเบเบเปเบฒ. HiFive_U-Boot
เบเบปเบงเปเบ CONFIG_SYS_TEXT_BASE=0x80089800
(เปเบเบเบเบตเปเบเบฐ 0x08000000
) เปเบเบทเปเบญเปเบซเปเบเบตเปเบขเบนเปเบเบฒเบงเปเบซเบผเบเบเบปเบเบเบฑเบเบเบปเบงเบเบดเบ. เปเบเบเบฑเบเบเบธเบเบฑเบเบเบงเบเปเบฎเบปเบฒเปเบซเบฅเบเปเบเบเบเบตเปเบเบญเบเบฅเบฐเบเบฑเบเบเปเปเปเบ, เบฎเบนเบเบเบฒเบเบญเบทเปเบ:
(gdb) file ../freedom-u-sdk/work/HiFive_U-Boot/u-boot
(gdb) tui en
เปเบฅเบฐเบเบงเบเปเบฎเบปเบฒเปเบเบดเปเบ:
โ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) โ
เบเบดเปเบเปเบเบเบงเปเบฒเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเปเบเบฑเปเบเปเบเบซเบฒเบฅเบฐเบซเบงเปเบฒเบเบชเบฒเบ 308 เปเบฅเบฐ 309. เปเบฅเบฐเบกเบฑเบเบเปเปเปเบเบเปเบ, เปเบเบฒเบฐเบงเปเบฒเปเบ $sp
เบเบปเบงเบฐเบเบงเบฒเบกเบซเบกเบฒเบ 0xfffffffe31cdc0a0
. เบญเบฐเบเบดเบเบฒ, เบกเบฑเบเบเบฑเบ "เปเบฅเปเบเบซเบเบต" เบขเปเบฒเบเบเปเปเปเบเบทเปเบญเบเปเบเบทเปเบญเบเบเบฒเบเปเบชเบฑเปเบ 307. เบเบฑเปเบเบเบฑเปเบ, เปเบซเปเบเบงเบเปเบฎเบปเบฒเบเบฐเบเบฒเบเบฒเบกเบเปเบฒเบเบปเบเบเบธเบเบขเบธเบเบขเบนเปเบเบตเป trap_entry
, เปเบฅเบฐโเบซเบผเบฑเบโเบเบฒเบโเบเบฑเปเบโเบเบฑเบโเบเบทเบโเปเบโเบเปเบญเบโ 0x80089800
(เบเบธเบเปเบเบปเปเบฒเบเบญเบ U-Boot), เปเบฅเบฐเบซเบงเบฑเบเบงเปเบฒเบกเบฑเบเบเปเปเบฎเบฝเบเบฎเปเบญเบเปเบซเปเบกเบตเบเบฒเบเบฅเบปเบเบเบฐเบเบฝเบเบเบตเปเบเบทเบเบเปเบญเบเบเปเบญเบเบเบตเปเบเบฐเปเบเบ... เปเบเบดเปเบเบเบทเบงเปเบฒเบกเบฑเบเปเบฎเบฑเบเบงเบฝเบ:
(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
เบเบปเบงเบเบตเป stack เปเบกเปเบเบเบฑเปเบเบเบฑเปเบ, เปเบงเบปเปเบฒเบเบปเบเปเบเบเบปเบเบกเบฒ: เบกเบฑเบเบเบตเปเบเปเบฒเบ RAM เบเบฑเบเบซเบกเบปเบ (เปเบงเบฑเปเบเปเบชเบเปเบเป, เปเบเปเบเบญเบ, เบเบงเบเปเบฎเบปเบฒเบเปเปเบกเบตเบเบฒเบเปเบเบเบตเปเบขเบนเป, เปเบเปเปเบซเปเบเบงเบฒเบกเบซเบงเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบฅเบทเบญเบเบเบตเปเบเปเบฒเบเบเบฒเบ).
เบฅเบญเบเบเปเบฝเบเบเบปเบงเบเบตเปเบเปเบงเบ 0x881cf950
. เบเบฑเปเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเบกเบฒเบชเบฐเบซเบฅเบธเบเบงเปเบฒ handle_trap
เปเบญเบตเปเบเปเบฅเบฐเปเบญเบตเปเบ, เปเบฅเบฐเปเบเปเบงเบฅเบฒเบเบฝเบงเบเบฑเบเบเบงเบเปเบฎเบปเบฒเปเบเบปเปเบฒเปเบเปเบ _exit_trap
เบเปเบงเบเบเบฒเบเปเบเปเบเบฝเบ epc=2148315240
(เปเบเบฑเบเบเบปเบเบชเบฐเบเบดเบเบปเบก):
(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
เบเบฑเปเบเบเบธเบเบขเบธเบเปเบเบฑเบ strnlen
, เบเบงเบเปเบฎเบปเบฒเบชเบทเบเบเปเปเปเบฅเบฐเปเบเบดเปเบ:
(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
เปเบเบดเปเบเบเบทเบงเปเบฒ, _exit_trap
เบเปเบญเบโเบเบฒเบโเปเบซเปโเบเปเปโเบกเบนเบโเบเบฒเบโเปเบเปโเปเบโเบเบฑเบโเบซเบฒโเบเปเบฝเบงโเบเบฑเบโเบเปเปโเบเบปเบโเปเบงเบฑเปเบโเบเบตเปโเปเบเบตเบโเบเบถเปเบโ, เปเบเปเบฅเบฒเบงเปเบฎเบฑเบเบเปเปเปเบเป. เบเบฑเปเบเบเบฑเปเบ, somehow เปเบซเบผเปเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเบเปเปเปเบเปเบชเบฐเปเบเบเบญเบตเบเปเบเบทเปเบญเบซเบเบถเปเบ. set directories ../freedom-u-sdk/HiFive_U-Boot/
เบเปเบฝเบงเบเบฑเบ! เบเบญเบเบเบตเปเบชเบฐเปเบเบเปเบฅเปเบง!
เปเบฅเปเบง, เปเบซเปเบเปเบฒเปเบเบตเบเบเบฒเบเบกเบฑเบเบญเบตเบเปเบเบทเปเบญเบซเบเบถเปเบ, เปเบฅเบฐเปเบเบดเปเบเบเบฒเบ stack เบเบดเบเบเบฒเบกเบชเบฒเปเบซเบเบเบญเบเบเบฑเบเบซเบฒเบเบปเปเบเบชเบฐเบเบฑเบเบเบตเปเปเบฎเบฑเบเปเบซเปเปเบเบตเบเบเบงเบฒเบกเบเบดเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบญเบดเบ (mcause == 5
). เบเปเบฒเบเปเบญเบเปเบเบปเปเบฒเปเบเบเบทเบเบเปเบญเบเบชเบดเปเบเบเบตเปเบเบฝเบ Load access fault
. เปเบซเบเบเบปเบเปเบเบดเปเบเบเบทเบงเปเบฒเบขเบนเปเบเบตเปเบเบตเป
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
เบกเบตเบเบงเบฒเบกเบซเบกเบฒเบเบเบตเปเบเปเปเบเบทเบเบเปเบญเบเบเบทเบเบฑเบ, เปเบฅเบฐเบเบฒเบเปเบ board_init_f_init_reserve
เบเบงเบฒเบกโเบเบดเบโเบเบฒเบโเปเบเบตเบโเบเบถเปเบโ. เปเบเบดเปเบเบเบทเบงเปเบฒเบเบตเปเปเบกเปเบเบเบนเปเบเบฐเบเปเบฒเบเบดเบ: เบเบปเบงเปเบเบเบตเปเบกเบตเบเบทเปเบเบตเปเบเปเปเบเบฑเบเปเบเบ CONFIG_SYS_INIT_SP_ADDR
. เบกเบฑเบเบเบทเบเบเปเบฒเบเบปเบเปเบงเปเปเบเปเบเบฅเป HiFive_U-Boot/include/configs/HiFive-U540.h
. เปเบเบเบฒเบเบเบธเบเบเปเบญเบเบเปเปเบเบดเบเบงเปเบฒ, เบเบฒเบเบเบต, เบเบต, เบเปเบญเบเบเบงเบเปเบเบตเปเบก boot loader เบชเปเบฒเบฅเบฑเบเปเบเปเบเบเปเบเบต - เบเบฒเบเบเบตเบกเบฑเบเบญเบฒเบเบเบฐเบเปเบฒเบเบเปเปเบเบฒเบเปเบเปเปเบเปเบเปเบเบเปเบเบตเปเบฅเบฑเบเบเปเบญเบ? เปเบเปเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเปเบซเบฑเบเบงเปเบฒเบกเบฑเบเบเปเบฒเบเบเบทเบเบฑเบเบชเบดเปเบเบเบฐเบเบดเบเบเบฒเบเบเบตเปเบเปเปเปเบเปเบชเปเบฒเปเบฅเบฑเบเบขเปเบฒเบเบชเบปเบกเบเบนเบ#if 0
- เบเบฒเบโเบเบฑเปเบโเบเปเบฒโเบชเบฐโเปเบเบฒเบฐโเบชเปเบฒโเบฅเบฑเบโเบเบฒเบโเบเบฑเปเบโเบเปเบฒโเบซเบเปเบงเบโเบเบงเบฒเบกโเบเปเบฒโเบเบตเปโเปเบเบโเบเปเบฒเบโเบเบฑเบโ, เปเบฅเบฐโเบเปเบฒเบโเบชเบฒโเบกเบฒเบโเบเบฐโเบเบฒโเบเบฒเบกโเปเบฎเบฑเบโเบชเบดเปเบโเบเบตเปโ:
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 */
เปเบเบเบฒเบเบเบธเบเบเปเบฒเบเบงเบเบเบญเบ crutches เปเบเป
เบเบต, เบเบฐเบกเบฒเบ, เบเบตเปเปเบกเปเบเบเบฒเบเบฐเบฅเบฒเบเปเบฅเบฑเบเบเปเบญเบ
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
เบฅเบฒเบเบฅเบฐเบญเบฝเบเบชเบฒเบกเบฒเบเบเบปเบเปเบเปเปเบ
เบเบฑเปเบเบเบตเปเบกเบฑเบเปเบเปเบซเบฑเบเบญเบญเบ, เปเบเบเบฐเบเบฒเบ SiFive เบเบตเป, เบเบฒเบเบฅเบปเบเบเบฐเบเบฝเบเบเบญเบเบเบฒเบเบญเบธเบเบฐเบเบญเบเบกเบตเบเบตเปเบขเบนเปเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบ. เบกเบฑเบเบเบฑเบเปเบเปเบซเบฑเบเบญเบญเบเบงเปเบฒ U-Boot เบเบทเบเบเบฑเปเบเบเปเบฒเปเบเบเปเบเปเบเบปเบเปเบ Kconfig, เบเบตเปเบเบธเปเบเปเบเบตเบเบเบฒเบ Linux kernel - เบเบปเบงเบขเปเบฒเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเบชเบฑเปเบเปเบเป. make menuconfig
, เปเบฅเบฐเบเบฒเบเปเบเปเบเบญเบเบเปเปเบเบงเบฒเบกเบชเบฐเบเบงเบเบเบฐเบเบฒเบเบปเบเบขเบนเปเบเบฒเบเบซเบเปเบฒเบเบญเบเบเปเบฒเบเบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบเบฅเบฒเบเบฅเบฐเบญเบฝเบเบเบญเบเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเปเบเบ ?
เปเบฅเบฐเบญเบทเปเบเป เปเบเบเบเบปเปเบงเปเบเปเบฅเปเบง, เบกเบตเบเบฒเบเบฅเบงเบกเปเบญเบปเบฒเบเปเบฒเบญเบฐเบเบดเบเบฒเบเบเบญเบเบชเบฒเบกเบเบฒเบเบเปเบฒเบญเบฐเบเบดเบเบฒเบเบเบญเบเบชเบญเบเบเบฐเบเบฒเบ, เบเบดเปเบกเบเบธเบเบเบฐเปเบเบเบเบญเบ PLL reconfigurations เบเบตเปเบซเบเปเบฒเบเบฝเบเบเบฒเบเบเปเบญเบเบเบฑเปเบ (เบเบฒเบเบปเบเบเบทเปเบ, เบเบตเปเปเบกเปเบเบเบฒเบเบขเปเบฒเบเบเบตเปเปเบเบทเปเบญเบกเบเปเปเบเบฑเบเบเบฒเบเบเบงเบเบเบธเบกเบเบฒเบเบเบญเบกเบเบดเบงเปเบเบตเปเบฎเบเบเปเบฒเบ PCIe, เปเบเปเบเบตเปเบเปเปเปเบเปเบเบญเบ) , เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบฎเบฑเบเปเบเบตเบกเปเบงเบเบฒเบเบขเปเบฒเบ, เปเบเบดเปเบ, เปเบเบชเบฐเบเบฒเบเบญเบฒเบเบฒเบเบเบตเปเปเบซเบกเบฒเบฐเบชเบปเบกเปเบเบดเบเบเบฒเบงเบญเบฑเบเบเบฒเบเปเบเปเปเบซเปเบเปเปเบเบงเบฒเบกเบเปเบฒเบเบฐเปเบเบปเปเบฒเบเปเบฒเบ UART เบเปเบฝเบงเบเบฑเบเบเบฒเบเบเบตเปเบเปเบฒเบซเบกเบฑเปเบเบชเบฑเบเบเบฒ hash เบกเบฑเบเบเบทเบเบฅเบงเบเบฅเบงเบกเบเบฒเบ, เปเบฅเบฐเบเปเบฝเบงเบเบฑเบเบเปเบฒเบเบงเบ DRAM เบเบตเปเบเปเบญเบเบกเบต (เปเบเปเบเปเบญเบเปเบญเบเบเบฝเบเบเปเปเบกเบนเบเบเบตเปเบขเบนเปเปเบเบซเบปเบง).
เบเบงเบฒเบกเบชเบปเบเบชเบฒเบเบเบฝเบเปเบเปเบงเปเบฒเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบฐเบเบฐเบเปเบฒเบกเบฐเบเบฒเบเบเบปเบเบเบฐเบเบดเบขเบธเบเปเบเบปเบฒเบเบฒเบเบเบญเบเบชเบฐเบซเบเบญเบเบเปเบฒเบเปเบเปเบเบเปเบเบต JTAG, เปเบฅเบฐเบเบฒเบเปเบซเบผเบเบเบฒเบ SD card เปเบกเปเบ, เบญเบฐเบเบดเบเบฒ, เบเปเปเปเบงเปเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบญเบเบเปเบญเบ. เปเบเบเบฒเบเบเบปเบเบเบฑเบเบเปเบฒเบก, เบเบฒเบเบเบฑเปเบ BootROM เปเบซเปเบเปเปเบเบงเบฒเบกเบงเปเบฒ ERROR
, เบฅเบปเปเบกเปเบซเบฅเบงเปเบเบเบฒเบเบเบนเบ, เปเบฅเบฐ U-Boot เบเบฒเบเบปเบเบเบถเปเบเบเบฑเบเบเบต. เบกเบฑเบเปเบกเปเบเบเบญเบเบเบฑเปเบเบเบตเปเบกเบฑเบเบฎเบธเปเบเบเบถเปเบเปเบเบเปเบญเบ: เบเบฒเบเบปเบเบเบทเปเบ, เบซเบผเบฑเบเบเบฒเบ rebooting bitstream เปเบเบปเปเบฒเปเบเปเบ FPGA, เบเบงเบฒเบกเบเบปเบเบเปเบฒเบเปเปเปเบเปเบเบทเบเบฅเบถเบ, เบกเบฑเบเบเปเปเบกเบตเปเบงเบฅเบฒเบเบตเปเบเบฐ "untrain", เปเบฅเบฐเบญเบทเปเบเป. เปเบเบชเบฑเปเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเบเบฝเบเปเบเปเปเบกเบทเปเบญเบเปเปเบเบงเบฒเบกเบเบฒเบเบปเบ LOADING /
เปเบเบทเปเบญเบกโเบเปเปโเบเบฑเบ debugger เปเบฅเบฐโเบเปเบฒโเบชเบฑเปเบโ set variable $pc=0x80089800
, เบเบฑเปเบเบเบฑเปเบเบเบฒเบเบเปเบฒเบกเบเบฒเบเปเบซเบผเบเบเบฒเบงเบเบตเป (เปเบเปเบเบญเบ, เบเบฒเบกเบชเบปเบกเบกเบธเบเบเบดเบเบฒเบเบงเปเบฒเบเบฑเปเบเบชเบธเบเบเปเบฒเบเบกเบฑเบเปเบเบเบเบปเปเบเบเบฝเบเบเปเบเบตเปเบกเบฑเบเบเปเปเบกเบตเปเบงเบฅเบฒเบเบตเปเบเบฐเปเบซเบฅเบเบญเบฑเบเปเบเบขเบนเปเปเบเบดเบเบฅเบฐเบซเบฑเบเบเบปเปเบเบชเบฐเบเบฑเบ).
เปเบเบเบงเบดเบเบตเบเบฒเบเบเบฒเบ, เบกเบฑเบเปเบเบฑเบเปเบฅเบทเปเบญเบเบเบปเบเบเบฐเบเบดเบเบตเปเปเบเปเบเบเปเบเบต freezes เบซเบกเบปเบเปเบฅเบฐ JTAG debugger เบเปเปเบชเบฒเบกเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฑเบเบกเบฑเบเบเปเบงเบเบเปเปเบเบงเบฒเบก?
Error: unable to halt hart 0
Error: dmcontrol=0x80000001
Error: dmstatus =0x00030c82
เบเบฑเปเบเบเบฑเปเบ, เบฅเปเบเปเบฒ! เบเปเบญเบเปเบเบตเบเปเบซเบฑเบเบญเบฑเบเบเบตเปเปเบฅเปเบง! เบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบเบเบตเปเบเปเบฒเบเบเบทเบเบฑเบเปเบเบตเบเบเบทเปเบเปเบเปเบงเบฅเบฒเบเบตเป TileLink เบเบทเบเบเบดเบเบเบฑเปเบ, เปเบฅเบฐเบเปเบญเบเบเปเปเปเบเบทเปเบญเบเบนเปเบเบฝเบเบเบญเบเบเบปเบงเบเบงเบเบเบธเบกเบเบงเบฒเบกเบเบปเบเบเปเบฒ - เบเปเบญเบเบเบฝเบเบกเบฑเบเปเบญเบ ... เบเบฑเบเบเบตเบเบฑเบเปเบ, เบซเบผเบฑเบเบเบฒเบเบเบฒเบเบชเปเบฒเบเปเบเปเบเบเปเบเบตเบเปเบฒเบญเบดเบเบเบตเปเบเบฐเบชเบปเบเบเบปเบเบชเปเบฒเปเบฅเบฑเบเบซเบผเบฑเบเบเบฒเบเบเบฒเบเปเบเปเปเบเบเบปเบงเบเบงเบเบเบธเบก, เบเปเบญเบเปเบเปเปเบซเบฑเบ:
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
เบเบฑเบเปเบชเบฑเปเบเปเบเบเบเบตเปเบเปเบญเบ In: serial
เบขเปเบฒเปเบญเบปเบฒเปเบเปเบชเป - เบเปเบญเบเปเบเปเบเบฐเบเบฒเบเบฒเบกเปเบเบปเปเบฒเปเบเบเปเบฝเบงเบเบฑเบเปเบฎเบเบเบฒเบเบเบฐเบฅเบดเบเบซเปเบญเบเบงเปเบฒเบกเบฑเบเบเบฐเปเบฎเบฑเบเบงเบฝเบเบขเปเบฒเบเบเบทเบเบเปเบญเบเบเบฑเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบซเบผเบทเบเปเป. เปเบเบปเปเบฒเบซเบกเบฒเบเบเบงเบฒเบกเบงเปเบฒเปเบเบงเปเบ, "เบกเบฑเบเบเบทเบเบซเปเบญเบเปเบเบเบเบตเปเปเบเบฑเบเปเบงเบฅเบฒเบชเบดเบเบเบฒเบเบต"? เบขเปเบฒเบเบซเบเปเบญเบเบกเบฑเบเบเบธเปเบกเบเบญเบเบเบฒเบเบเบปเบเบเปเบฒเบเปเบฅเบฐเปเบเบเบตเปเปเบกเบเบน boot! เบเบงเบฒเบกเปเบเบเบเปเบฒเบเปเบฅเบฑเบเบเปเบญเบ: เปเบเบดเบเปเบกเปเบเบงเปเบฒ U-Boot เบเบฐเบเบทเบเปเบซเบฅเบเบขเบนเปเปเบ 2^24 bytes เบเปเบฒเบญเบดเบเบเบฒเบ SD card, เปเบกเบทเปเบญเบกเบฑเบเปเบฅเบตเปเบกเบเบปเปเบ, เบกเบฑเบเบเบฐเบเบฑเบเบฅเบญเบเบเบปเบงเบกเบฑเบเปเบญเบเปเบเบซเบฒเบเบตเปเบขเบนเปเบซเปเบฒเบเปเบ, เบเปเปเบงเปเบฒเบเบฐเบเบฝเบเปเบงเปเปเบเบชเปเบงเบเบซเบปเบงเบเบฒเบเบเบฑเปเบเบเปเบฒ, เบซเบผเบทเบเบฝเบเปเบเปเปเบเบซเบฒเบเบตเปเบขเบนเปเบเบตเปเบชเบนเบเบเบงเปเบฒเบเบญเบ RAM. , เปเบฅเบฐเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบปเบเบเปเบฒเบ ELF -characters, เปเบฅเบฐเบเบฒเบเบเบงเบเบเบธเบกเบเบฒเบเปเบญเบเบกเบต. เบเบฑเปเบเบเบฑเปเบ: เปเบเบดเปเบเบเบทเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบเปเบฒเบเบฅเบฐเบเบฑเบเบเบตเปเปเบฅเบฐเปเบเปเบฎเบฑเบเปเบเบดเบเปเบเบเบฑเบเบเบตเปเปเบฎเบเบเบฒเบเบเบฐเบฅเบดเบเบเปเปเบเบดเบเปเบซเบเปเบเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ.
เบชเบฐเบเบฑเปเบ เปเบเบฑเบเบซเบเบฑเบเปเบเบทเปเบญเบเบเบฑเบเปเบงเบฅเบฒเบเบถเปเบเบเปเปเปเบฎเบฑเบเบงเบฝเบ? เปเบเบดเปเบเบเบทเบงเปเบฒเปเบกเบเบเปเปเปเบฎเบฑเบเบงเบฝเบเบเปเบญเบเปเบซเบเบเบปเบเบเบฒเบเบขเปเบฒเบ...
(gdb) x/x 0x0200bff8
0x200bff8: 0x00000000
เบเบฐเปเบเบฑเบเปเบเบงเปเบเบเปเบฒเบเปเบฒเบเบซเบฑเบเบฅเบนเบเบชเบญเบเบเปเบงเบเบเบปเบเปเบญเบ?
(gdb) set variable *0x0200bff8=310000000
(gdb) c
เบเบฒเบเบเบฑเปเบ:
Hit any key to stop autoboot: 0
MMC_SPI: 0 at 0:1 hz 20000000 mode 0
เบชเบฐเบซเบผเบธเบ: เปเบกเบเบเปเปเปเบเปเปเบฒเบเบเบดเบ. เบญเบฑเบเบเบตเปเบญเบฒเบเบเบฐเปเบเบฑเบเบเปเบญเบเบเบฒเบเบเปเบญเบเปเบเปเบเบเบดเบกเบเปเปเปเบฎเบฑเบเบงเบฝเบ:
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 == '[') {
...
เบเบฑเบเบซเบฒเปเบเปเบเบฒเบเปเบเบฑเบเบงเปเบฒเบเปเบญเบเบชเบฐเบซเบฅเบฒเบเปเบเบตเบเปเบ: เบเปเบญเบเปเบเปเปเบเบตเปเบกเบเบธเบเปเบเปเบชเปเบเบฒเบเบเบฑเปเบเบเปเบฒเปเบเปเบเบเปเบเบต:
case DTSTimebase => BigInt(0)
... เบญเบตเบเปเบชเปเบเบงเบฒเบกเบเบดเบเบเบตเปเบงเปเบฒเบเปเบฒเปเบซเบฑเบเบเปเบฒเบงเบงเปเบฒ "เบเปเบฒเบเปเบฒเบเบเปเปเบฎเบนเป, เปเบซเปเบญเบญเบเบเบฒเบ 0." เปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเบเบซเบกเบปเบ WithNBigCores
เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฝเบเปเบเปเบเบฑเปเบเบกเบฑเบเปเบเบฑเบ 1MHz (เปเบเบเบงเบดเบเบตเบเบฒเบเบเบฒเบ, เบกเบฑเบเบเบทเบเบฅเบฐเบเบธเปเบงเปเปเบ U-Boot config). เปเบเป damn, เบเปเบฒโเบเบฐโเปเบเบปเปเบฒโเปเบเบฑเบโเบฅเบฐโเบญเบฝเบโเปเบฅเบฐโเบฅเบฐโเบกเบฑเบโเบฅเบฐโเบงเบฑเบ: เบเปเบฒโเบเบฐโเปเบเบปเปเบฒโเบเปเปโเบฎเบนเปโเบงเปเบฒโเบกเบต, เบเบตเปโเปเบกเปเบ 25MHz! เปเบเบเบตเปเบชเบธเบ, เบเปเปเบกเบตเบซเบเบฑเบเปเบฎเบฑเบเบงเบฝเบ. เบเปเบญเบเปเบญเบปเบฒ "เบเบฒเบเบเบฑเบเบเบธเบ" เบเบญเบเบเปเบญเบเบญเบญเบเปเบฅเบฐ ...
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 #
เปเบเบปเปเบฒเบชเบฒเบกเบฒเบเปเบชเปเบเปเบฒเบชเบฑเปเบเปเบเป! เบเบปเบงเบขเปเบฒเบ, เบซเบผเบฑเบเบเบฒเบ poking เบเบฐเบกเบฒเบเปเบฅเบฑเบเบเปเบญเบ, เบชเบธเบเบเปเบฒเบเบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบปเบฒเบเบตเปเบเบฐเปเบเบปเปเบฒ mmc_spi 1 10000000 0; mmc part
, เบเบฒเบเบซเบผเบธเบเบเปเบญเบเบเบงเบฒเบกเบเบตเป SPI เบเบฒเบ 20MHz เบซเบฒ 10MHz. เปเบเบฑเบเบซเบเบฑเบ? เบเบต, เบเบงเบฒเบกเบเบตเปเบชเบนเบเบชเบธเบเบเบญเบ 20MHz เบเบทเบเบเบฝเบเปเบงเปเปเบ config, เปเบฅเบฐเบกเบฑเบเบเบฑเบเบเบทเบเบเบฝเบเบขเบนเปเบเบตเปเบเบฑเปเบ. เปเบเป, เปเบเบปเปเบฒเบเบตเปเบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเบปเปเบฒเปเบ, เบเบฒเบเปเบเปเบเบญเบ, เบขเปเบฒเบเบซเบเปเบญเบเบขเบนเปเบเบตเปเบเบตเป, เปเบฎเบฑเบเบงเบฝเบเปเบเบเบเบตเป: เบฅเบฐเบซเบฑเบเปเบเปเบเบเบงเบฒเบกเบเบตเปเบเบญเบเบซเบเปเบงเบเบเบฒเบเบฎเบฒเบเปเบง (เบเบญเบเบเปเบญเบเปเบกเปเบ 25MHz เบขเบนเปเบเบปเปเบงเบเบธเบเปเบซเปเบ) เปเบเบเปเบเบปเปเบฒเบซเบกเบฒเบ, เปเบฅเบฐเบเปเบฒเบเบปเบเบกเบนเบเบเปเบฒเบเบปเบเปเบเปเบฎเบฑเบเปเบเบฑเบเบเบปเบงเบซเบฒเบเปเบเบเบฒเบเบเบงเบเบเบธเบกเบเบตเปเบชเบญเบเบเปเบญเบเบเบฑเบ. เบฅเบปเบเบเบฐเบเบฝเบ. เบเบฑเบเบซเบฒเปเบกเปเบเบงเปเบฒเบเปเบฒเบชเปเบฒเบฅเบฑเบ 115200Hz UART เบกเบตเบเบฐเบกเบฒเบเบชเบดเปเบเบเบตเปเบเปเบญเบเบเบฒเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเปเบฒเบเปเบเปเบ 25000000 เบเบฑเบ 20000000 เบเปเบฒเบเบเบฐเปเบเปเบฎเบฑเบ 1, i.e. เบกเบฑเบเบเบฐเปเบฎเบฑเบเบงเบฝเบเบขเบนเปเบเบตเป 25MHz. เบเบฒเบเบเบตเบเบตเปเปเบกเปเบเปเบฅเบทเปเบญเบเบเบปเบเบเบฐเบเบด, เปเบเปเบเปเบฒเบกเบตเบเปเปเบเปเบฒเบเบฑเบ, เบกเบฑเบเบซเบกเบฒเบเบเบงเบฒเบกเบงเปเบฒเบเบนเปเปเบเบเบนเปเบซเบเบถเปเบเบเปเบญเบเบเบฒเบเบกเบฑเบ (เปเบเปเบเบตเปเบเปเปเปเบเปเบเบญเบ) ... เปเบเบเบเบปเปเบงเปเบ, เบกเบฑเบเบเปเบฒเบเบเบตเปเบเบฐเบงเบฒเบเบกเบฑเบเบฅเบปเบเปเบฅเบฐเบเปเบฒเบงเบเปเปเปเบ - เปเบเปเบฅเบฐเบญเบฐเบเบดเบเบฒ, เปเบงเบฅเบฒเบเบปเบเบเบฒเบ. 25MHz เบเปเปเปเบกเปเบ Core i9.
เบเบปเบเบเบฐเบฅเบดเบ Console
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
เบเบปเบเบฅเบปเบ, เบเบงเบเปเบฎเบปเบฒเบกเบฒเบฎเบญเบเบฅเบฐเบเบฑเบเบเปเปเปเบเปเบฅเปเบง, เปเบเปเบกเบฑเบเบเบฑเบเบเบปเบเบเปเบฒเบเบขเบนเป. เปเบฅเบฐเบเบฒเบเบเบฑเปเบเบกเบฑเบเบเปเป sprinkles เบเปเปเบเบปเบเปเบงเบฑเปเบ. เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบดเปเบ mcause เปเบเบเบเบฒเบเบเบญเบเบฅเปเบเปเบฒเบฅเบฐเบซเบฑเบเบขเบนเปเปเบเบเบตเปเบขเบนเปเบเบตเปเบเปเบฒเบเบปเบเปเบงเป $pc
เปเบฅเบฐเบซเบผเบฑเบเบเบฒเบ si
เบขเบนเป trap_entry
. เบเบปเบงเบเบฑเบเบเบฒเบ U-Boot เบเบปเบงเบเบญเบเบกเบฑเบเปเบญเบเบชเบฒเบกเบฒเบเบชเบปเปเบเบญเบญเบเบเบฝเบเปเบเปเบชเปเบฒเบฅเบฑเบ mcause = 0..4, เบเบฑเปเบเบเบฑเปเบเบเบฝเบกเบเปเบญเบกเบเบตเปเบเบฐเบเบดเบเบขเบนเปเปเบ boot เบเบตเปเบเปเปเบเบทเบเบเปเบญเบ. เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเปเบเบปเปเบฒเปเบเปเบ config, เปเบฅเบตเปเบกเบเบปเปเบเปเบเบดเปเบเบชเบดเปเบเบเบตเปเบเปเบญเบเบกเบตเบเบฒเบเบเปเบฝเบเปเบเบ, เปเบฅเบฐเบเบทเป: เบขเบนเปเบเบตเปเบเบฑเปเบ conf/rvboot-fit.txt
เบเบฝเบ:
fitfile=image.fit
# below much match what's in FIT (ugha)
เปเบฅเปเบง, เปเบซเปเปเบญเบปเบฒเปเบเบฅเปเบเบฑเบเบซเบกเบปเบเปเบเบปเปเบฒเปเบเปเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฒเบก, เปเบเบเบเบตเปเปเบชเบฑเปเบเบเปเบฒเบชเบฑเปเบ kernel เบเปเบงเบเบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบเปเบเบฑเปเบเบเบตเป, เปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒเบกเบตเบเบงเบฒเบกเบชเบปเบเปเบชเบงเปเบฒ. SIF0
- เบเบตเปเปเบกเปเบเบเบปเบเบเบฐเบฅเบดเบเบเบฒเบเบเปเบญเบเบเปเบฒเบ PCIe:
-bootargs=console=ttySIF0,921600 debug
+bootargs=console=ttyS0,125200 debug
เปเบฅเบฐเปเบซเปเบเบงเบเปเบฎเบปเบฒเบเปเบฝเบเบฅเบฐเบเบปเบ hashing algorithm เบเบฒเบ SHA-256 เปเบเบฑเบ MD5: เบเปเบญเบเบเปเปเบเปเบญเบเบเบฒเบเบเบงเบฒเบกเปเบเบฑเปเบกเบเบปเปเบเบเบญเบเบฅเบฐเบซเบฑเบเบฅเบฑเบ (เปเบเบเบชเบฐเปเบเบฒเบฐเปเบกเปเบเบเบฒเบเปเบเปเบเบฑเบเบซเบฒ), เบกเบฑเบเปเบเปเปเบงเบฅเบฒเบเบปเบเบซเบผเบฒเบ, เปเบฅเบฐเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฑเบเบเบงเบฒเบกเบเบดเบเบเบฒเบเบเบงเบฒเบกเบเบทเปเบชเบฑเบเปเบเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเปเบซเบฅเบ, MD5 เปเบกเปเบเบเปเบฒเบเปเบเบตเบเปเบ. เบเบปเบเบชเบธเบเบเปเบฒเบเปเบกเปเบเบซเบเบฑเบ? เบเบงเบโเปเบฎเบปเบฒโเปเบเปโเปเบฅเบตเปเบกโเบเบปเปเบโเบเบตเปโเบเบฐโเบชเปเบฒโเปเบฅเบฑเบโเปเบโเบฅเบฐโเบเบฑเบโเบเบตเปโเบเปเบฒเบโเบกเบฒโเปเบงโเบเบถเปเบโเบขเปเบฒเบโเบงเปเบญเบโเปเบง (เปเบเบทเปเบญเบโเบเบฒเบโเบเบฒเบ hashing เบเปเบฒเบโเบเบถเปเบโ)โ, เปเบฅเบฐโเบเบฒเบโเบเปเปโเปเบโเปเบเปโเปเบเบตเบโ:
...
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
เปเบเปโเปเบกเบโเบเปเปโเปเบเปโเบซเบกเบฒเบโเบเบดเบ ...
(gdb) x/x 0x0200bff8
0x200bff8: 0x00000000
เบญเบธเบ, เปเบเบดเปเบเบเบทเบงเปเบฒเบเบฒเบเปเบเปเปเบเปเบกเบเปเบเปเบเบฒเบเปเบเบฑเบ placebo, เปเบเบดเบเปเบกเปเบเบงเปเบฒเบกเบฑเบเปเบเบดเปเบเบเบทเบงเปเบฒเบเปเบญเบเปเบเปเบงเบฅเบฒเบเบตเปเบกเบฑเบเบเปเบงเบเปเบเป. เบเปเป, เปเบเปเบเบญเบ, เบกเบฑเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเปเบ, เปเบเปเบเปเบฒเบญเบดเบเปเบซเปเบเบงเบเปเบฎเบปเบฒเบซเบฑเบเบฅเบนเบเบชเบญเบเบเปเบงเบเบเบปเบเปเบญเบเปเบฅเบฐเปเบเบดเปเบเบชเบดเปเบเบเบตเปเปเบเบตเบเบเบถเปเบ:
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.
เปเบโเบเบฐโเบเบฐโเบเบฝเบงโเบเบฑเบโฆ
Loading Kernel Image ... OK
Booting kernel in
3
2
1
0
## Starting application at 0x80000000 ...
เบเปเป, เบเปเบญเบเบเบฐเปเบฎเบฑเบเปเบซเปเปเบกเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบ - เบเปเบฒเบเปเปเบเบฑเปเบเบเบฑเปเบเปเบเบปเบฒเบญเบฒเบเบเบฐเบเบฑเบเบชเบดเบเปเบเบเบฑเบเปเบกเบเบเบฑเบเปเบงเบฅเบฒเบขเบนเปเบเบตเปเบเบฑเปเบ!
เปเบโเบเบฐโเบเบฐโเบเบฝเบงโเบเบฑเบโ, เบเบตเปโเบขเบนเปโเบเบญเบโเบเปเบฒโเปเบเบฐโเบเปเบฒโเปเบโเบเบฑเบโเบเบธโเบเบฑเบโเบเบธเบโเบเบฒเบโเบเปเบญเบโเปเบโ
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>
เบเบฒเบเปเบเบเบปเบงเปเบซเบผเบ Berkeley Boot Loader. เบชเปเบงเบเบเบธเบเบเบปเบ, เบชเบดเปเบเบเบตเปเปเบฎเบฑเบเปเบซเปเบเปเบญเบเบชเบฑเบเบชเบปเบเบเปเบฝเบงเบเบฑเบเปเบฅเบทเปเบญเบเบเบตเปเปเบกเปเบเบเบฒเบเบเปเบฒเบงเปเบเบดเบ htif
โ เบเบฒเบเปเบเปเบเบญเบเปเบเบปเปเบฒเบเบฒเบเบเบตเปเปเบเปเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเบตเบเบเบปเบง kernel tethered (เบเบฑเปเบเปเบกเปเบ, เปเบเบเบฒเบเบฎเปเบงเบกเบกเบทเบเบฑเบ host ARM), เบเปเบฒเบเบฐเปเบเบปเปเบฒเบชเบปเบกเบกเบธเบเบงเปเบฒ standalone. เบขเปเบฒเบเปเบเบเปเบเบฒเบก, เบเปเบฒเบเปเบฒเบเบเบญเบเบซเบฒเบเบฑเบเบเบฑเบเบเบตเปเบขเบนเปเปเบเบฅเบฐเบซเบฑเบเปเบซเบผเปเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบดเปเบเบงเปเบฒเบเปเปเปเบกเปเบเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเบเบตเปเบเปเปเบเบต:
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: เปเบฅเบตเปเบกเปเบกเบ
เบเบฒเบเบเบญเบเบซเบฒเบเบฒเบเบฅเบปเบเบเบฐเบเบฝเบเปเบ CLINT เปเบฎเบฑเบเปเบซเปเบเบงเบเปเบฎเบปเบฒเปเบ
val io = IO(new Bundle {
val rtcTick = Bool(INPUT)
})
val time = RegInit(UInt(0, width = timeWidth))
when (io.rtcTick) { time := time + UInt(1) }
เปเบเบดเปเบเปเบเบทเปเบญเบกเบเปเปเบเบฑเบ RTC, เบซเบผเบทเบเบฑเบ MockAON เบเบตเปเบฅเบถเบเบฅเบฑเบ, เบเบตเปเบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบดเบเปเบเปเบเบทเปเบญเบเบเบปเปเบ: "เบเบฑเปเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเบกเบตเบซเบเบฑเบเบขเบนเปเบเบตเปเบเบตเป? เบเปเปเบเบฐเปเบเปเบ? เปเบซเปเบเบดเบเบกเบฑเบ!" เปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒเบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฑเบเบเปเปเปเบเบปเปเบฒเปเบเบงเปเบฒเบเบฐเปเบเบเบเบญเบเปเบกเบ magic เปเบเบตเบเบเบถเปเบเบขเบนเปเบเบตเปเบเบฑเปเบ, เบชเบฐเบเบฑเปเบเบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฝเบเปเบเปเบเบฐเบเบฑเบเบเบธเบเปเบซเบเบเบปเบเบเบตเปเปเบ. 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
}
เปเบฎเบฑเบเปเบซเปเปเบชเบฑเปเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบเบชเบนเป Linux kernel
เบเบตเปเบเบตเปเปเบฅเบทเปเบญเบเปเบเปเบเบทเบเบฅเบฒเบเปเบฅเปเบงเปเบฅเบฐเปเบเปเบเบฒเบเปเบเบฑเบ monotonous เปเบฅเบฑเบเบเปเบญเบ, เบชเบฐเบเบฑเปเบเบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฐเบญเบฐเบเบดเบเบฒเบเบกเบฑเบเบเบฒเบเปเบเบดเบเบซเบฒเบฅเบธเปเบกเบชเบธเบ:
BBL เบชเบปเบกเบกเบธเบเบงเปเบฒเบกเบต FDT เบขเบนเป 0xF0000000
, เปเบเปเบเปเบญเบเปเบเปเปเบเปเปเบเบกเบฑเบเปเบฅเปเบง! เปเบฅเปเบง, เปเบซเปเปเบเบดเปเบเบญเบตเบเปเบเบทเปเบญเบซเบเบถเปเบ ... เบเบปเบเบกเบฑเบเบขเบนเปเปเบ HiFive_U-Boot/arch/riscv/lib/boot.c, เปเบเบเบเบตเปเบเปเบงเบ 0x81F00000
, เบฅเบฐเบเบธเปเบงเปเปเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบฒเบเบเบนเบ U-Boot.
เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, BBL เบเบปเปเบกเบงเปเบฒเบเปเปเบกเบตเบเบงเบฒเบกเบเบปเบเบเปเบฒ. เปเบชเบฑเปเบเบเบฒเบเบเบญเบเบเปเบญเบเบขเบนเปเปเบเบซเบเปเบฒเบเบตเป mem_prop
, เบชเบดเปเบเบเบตเปเบขเบนเปเปเบ riscv-pk/machine/fdt.c: เบเบฒเบเบเปเบญเบเบเบฑเปเบเบเปเบญเบเปเบเปเบฎเบฝเบเบฎเบนเปเบงเปเบฒเบเปเบฒเบเบเปเบญเบเบเบฒเบเบซเบกเบฒเบ fdt ram node เปเบเบฑเบ device_type = "memory"
- เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเบฒเบเบเบต, เปเบฎเบเบเบฒเบเบเบฐเบฅเบดเบเปเบเปเบเบเปเบเบตเบเบฐเบเปเบญเบเบเบทเบเปเบเปเปเบ, เปเบเปเบเบญเบเบเบตเปเบเปเบญเบเบเบฝเบเปเบเปเบเบฝเบเบกเบฑเบเบเปเบงเบเบเบปเบเปเบญเบ - เปเบเบงเปเบเบเปเปเบเบฒเบก, เบเปเบญเบเปเบญเบเปเบเบฅเปเบเบตเปเบเปเบงเบเบเบปเบเปเบญเบ.
เบเบญเบเบเบตเปเบเปเบญเบเปเบเปเบฎเบฑเบเบเปเปเบเบงเบฒเบก (เบชเบฐเปเบญเบเปเบซเปเปเบเบฎเบนเบเปเบเบเบเบตเปเบกเบตเบฎเบนเบเปเบเบ, เบเปเบงเบเบเบฒเบเบชเบปเปเบเบเบทเบเบชเบดเบเบเปเบฒ):
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.
เบกเบฑเบเปเบเบดเปเบเบเบทเบงเปเบฒเบเบฒเบเปเบฅเบทเบญเบเปเบเปเบเบทเบเบเบตเปเบเบญเบเบเบฒเบกเบเบงเบฒเบกเบเปเบญเบเบเบฒเบ riscv,kernel-start
ะธ riscv,kernel-end
เปเบ DTB, เปเบเปเบชเบนเบเบเบทเบเบงเบดเปเบเบฒเบฐ. เบเบฒเบเบเบตเบเบฑเบ query_chosen
เบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบเบงเปเบฒ BBL เบเปเบฒเบฅเบฑเบเบเบฐเบเบฒเบเบฒเบกเบงเบดเปเบเบฒเบฐเบเบตเปเบขเบนเป 32-bit, เปเบเปเบกเบฑเบเบกเบฒเปเบเบเบปเปเบงเบเบนเป <0x0 0xADDR>
, เปเบฅเบฐเบเปเบฒเบเปเบฒเบญเบดเบเปเบเบดเปเบเบเบทเบงเปเบฒเปเบเบฑเบ bits เบซเบเปเบญเบเบเบตเปเบชเบธเบ. เปเบเบตเปเบกเปเบชเปเบเบฒเบเบชเปเบงเบ chosen
chosen {
#address-cells = <1>;
#size-cells = <0>;
...
}
เปเบฅเบฐเปเบเปเปเบเบเบฒเบเบชเปเบฒเบเบเบธเบเบเปเบฒ: เบเปเปเปเบเบตเปเบก 0x0
เบญเบปเบเบเบฐเบเบญเบเบเปเบฒเบญเบดเบ.
100500 เบเบฑเปเบโเบเบญเบโเบเบตเปโเบเปเบฒเบโเบเบฒเบโเปเบซเบผเบปเปเบฒโเบเบตเปโเบเบฐโเปเบฎเบฑเบโเปเบซเปโเบกเบฑเบโเบเปเบฒเบโเบเบตเปโเบเบฐโเปเบเบดเปเบ penguin เบซเบผเบธเบโเบฅเบปเบโ:
เบเปเปเบเบงเบฒเบกเบเบตเปเปเบเบทเปเบญเบเปเบงเป
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)
(เปเบฅเปเบเปเปเบกเปเบเบชเบฐเปเบเบเปเบเบ BBL, เปเบฅเบฐเบชเบฑเบเบเบฒเบฅเบฑเบเบเบตเปเบกเบตเปเบงเบฅเบฒเบเบทเบเบชเบฐเปเบเบเปเบเบเปเบเปเบ).
เปเบเบเบเบต, เบเปเบญเบเบเปเปเบฎเบนเปเบงเปเบฒเบกเบฑเบเปเบเบฑเบเปเบเบงเปเบเบขเบนเปเบเบปเปเบงเบเบธเบเปเบซเปเบ, เปเบเปเปเบ RocketChip, เปเบกเบทเปเบญเบเปเบฒเบเปเบเบทเปเบญเบกเบเปเป debugger เบเปเบฒเบ JTAG, เบเปเบฒเบเบชเบฒเบกเบฒเบเบเบฑเบเบเบฑเบเบเบฑเบเบญเบญเบเบเบฒเบเบเปเบญเบ - debugger เบเบฐเบขเบธเบเบขเบนเปเปเบเบเบธเบเบเบตเป.
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
freedom-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); // < ะะซ ะะะฅะะะะขะะกะฌ ะะะะกะฌ
}
เบเบฑเปเบเบเบตเปเปเบเบตเบเปเบงเบปเปเบฒเบเบฐเบซเบผเบปเบเปเบเบปเปเบฒเป. เบเปเปเบเบปเบ CPU, เปเบฅเปเบเบเบฒเบเบเบณเบฅเบญเบเบเบญเบเปเบง. เบเบต, เบซเบผเบทเบเปเปเปเบฅเปเบ. เบชเบนเบเปเบชเบเปเบเปเบเบเบเบฐเบกเบงเบเบเบปเบเบเบฝเบง.
/* The lucky hart to first increment this variable will boot the other cores */
atomic_t hart_lottery;
unsigned long boot_cpu_hartid;
เบเปเบฒเปเบซเบฑเบเบเบตเปเบ linux/arch/riscv/kernel/setup.c - เบเบฐเปเบเบเบเบญเบเบเบฒเบเปเบเปเบกเบฎเบนเบเบเบญเบเบฎเบปเปเบงเปเบเบเปเบเปเบงเบดเบเบตเบเบฒเบ Tom Sawyer. เปเบเบเบเบปเปเบงเปเบ, เบเปเบงเบเปเบซเบเบเบปเบเบเบฒเบเบขเปเบฒเบเบเบตเปเบเปเปเบกเบตเบเบนเปเบเบฐเบเบฐเปเบเบกเบทเปเบเบตเป, เบฅเบฒเบเบงเบฑเบเบเบฐเบเบทเบเปเบญเบเปเบเบซเบฒเบเบฒเบเบเบฑเบเบชเบฐเบซเบฅเบฒเบเบเบฑเปเบเบเปเปเปเบ ...
เปเบเบเบตเปเบเบตเปเบเปเบฒเบเบฐเปเบเบปเปเบฒเบชเบฐเปเบซเบเบตเปเบซเปเบชเบดเปเบเบชเบธเบเบเบปเบเบเบงเบฒเบกเบเบตเปเบเบฒเบงเปเบฅเปเบง.
เบเบดเบโเบเบฒเบกโเบเบญเบโเบเปเปโเปเบ. เบเบฐโเบกเบตโเบเบฒเบโเบเปเปโเบชเบนเปโเบเบฑเบโเปเบกเบโเปเบกเป cunning เบเบตเปโเบเบธเปเบกโเบเบญเบโเปเบเบทเปเบญโเบเปเบญเบโเบเปเบฒโเบซเบฒเบโเบงเปเบฒโเบเปเบฒเบโเบเปเบญเบเป creep เปเบเบดเบโเบกเบฑเบโเบเปเบงเบ singlestep.
เบเปเปเบเบงเบฒเบกเบเบฒเบงเปเบซเบผเบ screencast (เบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฒเบเบเบญเบ):
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com