ะ
แแแแ แแขแฃแ แ แแแแชแแแก SD แแแ แแแก, แ แแแแแแช แแแแแแจแแ แแแฃแแแ SPI แแแขแแ แคแแแกแแ, แแกแแแ UART. แแ แแแ แแแฃแ แแแฌแแแจแ BootROM แจแแแชแแแแแ xip
on sdboot
แแ, แคแแฅแขแแแ แแแแ, แแแแแขแแแฃแแแ แจแแแแแแ แแแขแแแ แแแแก แแขแแแแแ (SD แแแ แแแแ).
แขแแฅแแแแแก แแแกแ แฃแแแแ
แแกแ แ แแ, แแแแแแแแ: แแฅแแแ แฃแแแ แแแแแฎแแแแแ "แแแ" แแแ แแแแ แแ แแแแแแแจแแ แแ UART (Rspberry-แแแ) แแ SD แแแแแขแแ แ (แแแแแแแงแแแแ Catalex แแแ แแแ แแฅแแกแ แฅแแแซแแกแแแแแแแ: GND, VCC, MISO, MOSI, SCK, CS) .
แแ แแแชแแแจแ, แงแแแแแคแแ แ แกแแแแแแ แแแ แขแแแ แแงแ. แแแแ แแ แกแแแแ แแแแก แแแแฎแแแแแแแ, แชแแขแแแ แแแแ แแแแแ แแแแ แแแ แแแแแแแแแแก: แฌแแแ แแ แแแก แจแแแแแ, แแแแแแฌแงแแแขแ, แ แแ แแกแแ แแญแแ แแแแแแ แจแแ แแแ. System
แ แแฆแแช แแกแแแแกแ HasPeripheryUART
(แแ แจแแกแแแแแแกแแ แแแแฎแแ แชแแแแแแ), แแแแแ SD แแแ แแแแกแแแแก - แแ แงแแแแแคแแ แ แแแแ แแฅแแแแ. แจแแแแแ แแแแแแฌแงแแแขแ แแแแแฎแ, แ แแแแ แแแแฎแแ แชแแแแแ แแก "แกแแ แแแแฃแ" แแแแแแแจแ. แแแจ, แ แ แแ แแก แแแแจแ แกแแ แแแแฃแแ? แแ แขแ, แ แแแแ แช แฉแแแก, แแ แฏแแแแ - แแแแกแขแ แ แ แฉแแแ unleahshed.DevKitConfigs
. แแ แฃแชแแ แแฆแแแฉแแแ, แ แแ แงแแแแแแ แแงแ แแแแแคแแ แแแแ, แ แแแแแแแช แแแแแแขแ แแแ แแแแขแ แแแแก แกแแจแฃแแแแแแ แแแแแแจแแแแ. แแฎแแแแแ, แ แแ แแก แแ แแก แแแแแ แซแแแแแ แแแฅแแแแ แแ แแแแคแแแฃแ แแ แแแแแ, แแแแ แแ แแ แแแแแช แแแแแ แฏแแ แ แแฆแแชแแก แแแจแแแแ... แจแแแช แแแแแ แแ แแแฅแแก, แฃแคแ แ แแแ แขแแแ แแ แแแแแฆแแแแแแแแแแ?.. แกแฌแแ แแ แแแจแแ แจแแแฎแแแ vera.iofpga.FPGAChip
Microsemi FPGA-แกแแแแก แแ แแแจแแแแ แแแแจแแ แ แชแแขแแขแแแแกแแแแก แแ แจแแแแชแแแ แฉแแแ แแแแฎแแ แชแแแแแแแก แแแแแแแแแ, แกแแแแแแแแ แแ, แแแข-แแแแแแแแ แแ แแก แแแแแ โแแแแแแแแขแแก แแแแแแแแแโ แแ แ แคแแแแจแ.
แแฆแแแฉแแแ, แ แแ แแฅแแแ แฃแแ แแแแ แฃแแแ แแแแแแขแแ 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
dts แคแแแแก แแแแขแแแก แแแคแแ แแแชแแแก แฉแแแแ SoC-แแก แแ แแแฌแแแแก แแฃแจแแแแแก แกแแฎแจแแ แแก แจแแกแแฎแแ. แ แแแแแแแแแช แแ แแแกแแแก, DTS/DTB แแ แแก plug-and-play แขแแฅแแแแแแแแก แกแขแแขแแแฃแ แ แแแแแแแ แฉแแจแแแแแฃแแ แแแฌแงแแแแแแแแแแกแแแแก: dts แแฆแฌแแ แแแแแแก แฎแ แแแแแแแแ แแแฃแแแ แแแแแ แฃแ dtb แคแแแแจแ แแ แฉแแแขแแแ แแแแแแก แแแแ แแแแแชแแแฃแแแ แแแ แแแจแ, แ แแแ แแแ แจแแซแแแก แกแฌแแ แแ แแแแคแแแฃแ แแชแแ. แแแแ แแขแฃแ แ. แกแแแแขแแ แแกแแ, แ แแ แฎแแแแก แแแ แแจแ tlclock
แงแแแแแคแแ แ แแแแแแฃแ แแ แกแแแแแแแแแ, แแแแ แแ BootROM-แแก แจแแแแแแ (แจแแแแฎแกแแแแแ, แแฎแแ แแก แฃแแแ แแฅแแแแ sdboot
) แแ แแแฃแจแแแแแก - แแแแแแแแชแแแก แแ แแชแแกแจแ แแก แแแแแแแแแแก dts แคแแแแก แแ แฅแแแแก แกแแแแฃแ แก แแแแ แแแ 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
? แแแกแฃแฎแ แฏแแ แแแ แแแแแแ, แแแแ แแ, แ แแแแ แช แฉแแแก, แแแแแ แฉแแแ แแแแ แกแฌแแ แแ แแกแแ แแแแจแแ แก แแงแ แแแแแ.
แคแแแแแฃแ แแ, แแ แฃแแ แแแแ แแแแแแแญแ แแแแแแแแก แฅแแแซแแกแแแแแแ แแแแแแก แแแแแกแฃแคแแ แแแแขแแฅแขแแแก แแ แแแแแแแงแแแแ แซแแแแแก แจแแ แฉแแแแก แฏแฃแแแแ แ 3.3 แ-แแ.
SD แแแแแขแแ แ
แฎแแแ แแแแแแแ:
แฅแแแแ แฎแแแ:
แแ แแแ แแแฃแแ แฃแแ แฃแแแแแงแแคแแก แแแแแ แแแ: แแแกแขแ แฃแแแแขแแแ
แแแ แแแ แ แแแจแ, แแแแแ แแแกแแฃแแ แแ แแแแแ แแแแก แฎแแแแแกแแฌแแแแ แแแกแขแ แฃแแแแขแแแแ แแ แแแ แจแแแฆแฃแแแแแแ.
แแแแแแแแ
แแแ แแแ แ แแแจแ, แแแแแญแแ แแแแ แ แแแแ แแ แฌแแแแแแแฎแแ, แ แแก แแแแแกแชแแแก แฉแแแขแแแ แแแแแ แแ แแแ แแแ. Linux-แแ แแแแก แแแกแแแแแแแแแ (แแ แจแแแแฎแแแแแจแ, RaspberryPi-แแ), แแแญแแ แแแแ Minicom แแ แแแ แแแ. แแแแแแแ, แแแแแกแแแแ แ แแ แแแ แแแ, แ แแแแแแช แแฃแจแแแแก แกแแ แแฃแ แแแ แขแแแ, แแแฃแจแแแแแก.
แแแฎแแแ แแแแแแแแแกแฌแแแแ, แ แแ แแแจแแแแแกแแก, แแแ แขแแก แแแฌแงแแแแแแแแก แกแแฎแแแ แฃแแแ แแงแแก แแแแแแแแฃแแ, แ แแแแ แช -D /dev/ttyS0
- แแแ แแแแขแแก แจแแแแแ -D
. แแกแ, แแแแแแ แ แแแคแแ แแแชแแ: แแแกแแกแแแแแแ, แแแแแงแแแแแ Ctrl-A, X
. แแ แแแแแแแแแ แแฅแแแแ แจแแแแฎแแแแ, แ แแแแกแแช แแก แแแแแแแแชแแ แแ แแฃแจแแแแแ - แแแจแแ แจแแแแซแแแแ แฃแแ แแแแ แแฅแแแ แแแแแแแแ SSH แกแแกแแแแแ killall -KILL minicom
.
แแ แแก แแแแแ แแ แแ แแแแกแแแ. แแแแแ แแขแฃแแแ, RaspberryPi-แก แแฅแแก แแ แ UART แแ แแ แแแ แแแ แขแ แฃแแแ แจแแแซแแแแ แแแแแขแแ แแแฃแแ แแงแแก แ แแฆแแชแแกแแแแก: แแ แแ Bluetooth-แแกแแแแก, แแแแ แ แแแแฃแแแกแฎแแแแแ แแแแแกแชแแแก แแแ แแแแก แแแแกแแแก. แกแแแแแแแแ แแ, แแก แฅแชแแแ แจแแแซแแแแ แแแแแแแฎแแก
แแแฎแกแแแ แแแแก แแแแแฌแแ แ
แแแแแ แแแแกแแก, แฐแแแแแแแแก แจแแกแแแแฌแแแแแแ, แแแแฏแแ แแแฌแแแแ แฉแแขแแแ แแแ แฉแแแขแแแ แแแแ (แแแแแจแ) RAM-แจแ แแแ แแแแแ แฐแแกแขแแแแ. แจแแกแแซแแแ, แแก แจแแแซแแแแ แแแแแแแแก แแแ แแแแแ GDB-แแแ, แแแแ แแ แกแแแแแแแ แแแแงแแแ แแแ แขแแ แแแแก: แแแแแแแแแ แ แกแแญแแ แ แคแแแแ Raspberry-แจแ, แแกแแแ แแแแแแแแแแแแ แแแ แขแ 4444 SSH-แแ (telnet OpenOCD-แแแ) แแ แแแแแแแงแแแ แแ แซแแแแแ. load_image
. แ แแชแ แแแแก แแแแแแ, แแแแฅแแก แงแแแแแคแแ แ แแแงแแแฃแแแ, แแแแ แแ แกแแแแแแแแแแจแ "แแ แกแซแแแแแก, แฃแแ แแแแ แแแแ แชแแแชแแแแแก": แแก แฉแแแแขแแแ แแแแก แคแแแแก, แฃแแ แแแแ แแแแแแแก แ แแแแแแแแ แแแแแแแแข แฌแแแจแ แกแแฉแฅแแ แแ.
แฌแงแแแขแแก แฌแแ แขแแแแแแก แแแงแแแแแแก แแแฎแแกแแแแแแแแแ
แแแแ แแแแแแแแก แแแแแ แแ แแแฃแฌแแ แแแแแ แคแแฅแ แ แ แแแฃแแแ แฃแแ แแ แแแ แแแแแแก แแแแแ แแแแกแแก, แแแแ แแ แฌแงแแแขแแก แฌแแ แขแแแแแ แงแแแแแแแแก แแ แแ แแก แแแแแแแแฃแแ แแแแ แแขแฃแ แแจแ. แแแแฏแแ แฌแงแแแขแแก แฌแแ แขแแแแก แแแงแแแแแ แแฃแแแกแฎแแแแก แกแแแชแแแแฃแ แ แแแกแขแ แฃแฅแชแแแแแก แแ แแแแแ แฉแแฌแแ แแก แกแฌแแ แแแแแแแก แแแ แแแแแ แแแแฅแแแแก แแแแจแ. แแแแแแแแแ, แแกแ แแฃแจแแแแแ แฉแแแ แกแขแแแแแ แขแฃแแ แแ แซแแแแแ b
GDB-แจแ. แแ แ แ แแ แแก แจแแแแแแ:
- แแฅแแแ แแ แจแแแแซแแแแ แฌแแ แขแแแแก แฉแแกแแ BootROM-แจแ, แ แแแแแ ROM
- แจแแแแซแแแแ แแแแงแแแแ แฌแงแแแขแแก แฌแแ แขแแแ RAM-แจแ แฉแแขแแแ แแฃแ แแแแแ SD แแแ แแแแแแ, แแแแ แแ แแฅแแแ แฃแแแ แแแแแแแแ แแแก แฉแแขแแแ แแแแก. แฌแแแแแฆแแแแ แจแแแแฎแแแแแจแ, แฉแแแ แแ แแแแแแฌแแ แ แแแแแก แแแฌแแแก, แแแแ แแ แฉแแแขแแแ แแแแแ แแแแแฌแแ แก แฉแแแแก แฌแงแแแขแแก แฌแแ แขแแแก
แแแ แฌแแฃแแแแฃแแ แแแ , แจแแแแซแแแแ แชแแแกแแฎแแ แแแแแฎแแแแ แขแแฅแแแแแก แฌแงแแแขแแก แฌแแ แขแแแแแแก แแแแแงแแแแแ, แแแแ แแ แแแแแช แแ แแก แแแแ แจแแแฆแฃแแฃแแ แ แแแแแแแแ.
แกแฌแ แแคแ BootROM แฉแแแแชแแแแแ
แแแแแ แแแแก แกแแฌแงแแก แแขแแแแ แฎแจแแ แแ แฉแแแแแ BootROM-แแก แแแแแกแฌแแ แแแแก แแ แฎแแแแฎแแ แชแแแก แกแฃแ แแแแ. แแแแ แแ แแ แแก แแ แแแแแแ: BootROM แแ แแก FPGA-แจแ แฉแแขแแแ แแฃแแ แแแแแแแแก แแแฌแแแ แแ แแแกแ แกแแแแแแ แ แแแแแแแแ แฌแฃแแแก แกแแแแแฎแแ (แแ แแก แฎแแแแ BootROM แกแฃแ แแแแก แแแแฅแแแก แแงแแกแแแ แ แจแแแแแแแก แจแแแแแ C-แแแ แแ Assembler-แแแแ...). แกแแแแแแแแ แแ, แกแแแแแแแแแแจแ แงแแแแแคแแ แ แฃแคแ แ แกแฌแ แแคแแ: แแแฅแแแแแแแแแก แแแแแแแแแแ แแแ แแกแแแแ:
- regenerate bootrom.mif (แแ แแแแแแแแ MIF-แแ HEX-แแก แแแชแแแแ, แ แแแแแ แงแแแแแแแแก แแฅแแแแ แแ แแแแแแแแ HEX-แแแ แแ MIF แแ แแก Alter-แแก แแจแแแแแฃแ แ แคแแ แแแขแ)
- แแแแ แขแฃแกแจแ แแแแแแแ
Processing -> Update Memory Initialization File
- Assembler แแฃแแฅแขแแ (Tasks-แแก แแแ แชแฎแแแ แกแแแขแจแ) แแ แซแแแแแ Start again
แงแแแแแคแแ แ แงแแแแแคแแ แแ - แ แแแแแแแแ แแแแฃแแ แฌแแแ.
SD แแแ แแแแก แแแแแแแแแ
แแฅ แงแแแแแคแแ แ แจแแแแ แแแแ แแแ แขแแแแ, แแแแ แแ แแฅแแแ แฃแแแ แแงแแ แแแแแแแแแ แแ แแฅแแแแแ แแแแฎแแแแแแ 14 แแ แแแแแแ แแแกแแแ:
git clone https://github.com/sifive/freedom-u-sdk
git submodule update --recursive --init
make
แ แแก แจแแแแแแแช แแฅแแแ แฃแแแ แฉแแแแ แกแฃแคแแ, แฃแคแ แ แกแฌแแ แแ, แแก, แ แแแแแแช แแ แจแแแชแแแก แ แแแแ แแฃแชแแแแแแแก, SD แแแ แแแก แแ แจแแแกแ แฃแแแ
sudo make DISK=/dev/sdX format-boot-loader
โฆ แกแแ sdX
โ แแแ แแแแ แแแแแญแแแฃแแ แแแฌแงแแแแแแแ. แงแฃแ แแแฆแแแ: แแแ แแแแ แแ แกแแแฃแแ แแแแแชแแแแแ แฌแแแจแแแแ, แแแแแแฌแแ แแแ แแ แแแแแแแ! แซแแแแแ แฆแแ แก แแแแแ แจแแแ แแแแก แแแแแแแแ แฅแแแแแแแ sudo
แ แแแแแ แแแจแแ แงแแแแ แแแแกแขแ แฃแฅแชแแแก แแ แขแแคแแฅแขแ แแแฃแแแแแก root
, แแ แจแแแ แแแ แฅแแแแแแแ แฃแแแ แแแแแแแแก sudo
แแฃแแแแแแ.
แจแแแแแ แแ แแก แแแ แแแ, แ แแแแแแช แแฆแแแแจแแแแ GPT-แจแ แแแฎแ แแแแแงแแคแแ, แ แแแแแแแแแ แแ แแก แแฅแแก FAT uEnv.txt
แแ แฉแแแขแแแ แแแแ แกแฃแ แแแ FIT แคแแ แแแขแจแ (แแก แจแแแชแแแก แ แแแแแแแแ แฅแแแกแฃแ แแแก, แแแแแแฃแแก แแแแแกแ แแแแแแขแแแ แแแแก แแแกแแแแ แแแ), แแแแ แ แแแแแงแแคแ แชแแ แแแแแ, แแก แกแแแแ แแฃแแแ แแแคแแ แแแขแแแฃแแแ Ext4-แจแ Linux-แแกแแแแก. แแแแแ แแ แ โโแแแแงแแคแแแแแ - แแแฃแแแแ: U-Boot แชแฎแแแ แแแก แแ แแแ (แแแกแ แแคแกแแขแ, แ แแแแแแแแแช แแ แแแกแแแก, แแงแแ แ แแแแแ แแแฃแแแ BootROM-แจแ), แแแแ แแแ, แ แแแแ แช แฉแแแก, แแแกแ แแแ แแแแก แชแแแแแแแ แชแฎแแแ แแแก, แแแแ แแ แแ แแแ แฏแแ แแ แแแงแแแแ.
แแแ แแแแ แแแแ, BootROM
แแแแฃแแแ แฃแแ แกแแแ แซแแ แแแแแแก: โแแฃ แแ แแแ แแแแ แแแแจแ แแ แแก แขแแแแฃแ แแ แชแแแแ, แแแจแแ แแแแฅแขแ แแแแแแจแ แแกแแแ แแ แแก แชแแแแ แชแแชแฎแแแแฅแ แแโ. แกแแฅแแ แแก แแ แแ แแ แแก, แ แแ แแ แแฎแแ แแแแแฆแแ แแแแฌแแ แแแคแ แแ แแแแแแฌแงแแแขแ, แ แแ "แแแ แแ, GND แแแแแ แแแแแแ แแแแแ". (แ แแแแ แช แฉแแแก, แ แแแแกแขแแ แ แแ แแแแแแ แแแแแก แแแแแก แแ แแแแแก...) แแก แฃแคแ แ แแแแแแ, แ แแ แแฃ แฎแแแแแ แแฅแแแแ แแ แแแ แแแแ, แแแจแแ แแแแฅแขแ แแแแแ แแ แแกแแแแก แฌแงแแแขแก แกแแฃแ แแ แแแแแแก แแแขแแแแก: แแแแแฅแขแแ แแก แแแคแแแ แจแแแฃแฆแแแแกแแก, แแ แแแแแช แแแ แแแแแฎแแ แฎแ แแแแขแแฅแขแแแแก แกแฌแแ แแ แจแแแฃแฆแแแ - แแแแแแจแ แแแฉแแแแแแแ, แแฃ แ แแแแ แแ แชแแแแแแ แจแแแฃแฆแแแ แแแ แแแแแ . แแแแ แแแแจแแ แแ, แฃแแ แแแแ แฌแแแกแแแ แแแแแแ แแแแแแแ แฃแแ, แฉแแแแแแก แแแ แจแแแแฎแแแแแ โแแแแ แขแงแโ. แฎแ, แจแแแซแแแแ แแแแฃแฆแแ แ แแ แแ แแแแแแ แแแแแก แขแแแแแ แแขแฃแ แแก, แจแแแซแแแแ แกแฎแแ แ แแแ... แกแแแ แแแ, แ แแชแ แแแแแแแฎแ, แ แแ แฃแแแ แแแแฃแแ แแแแขแแฅแขแ แแฅแแแแ, แแแแ แแแแแแแแ แแ แแแแแฌแงแ แแแแแ แแแ. แแ แแแ แ แแแแฌแงแ แแแฃแแแแ: RX/TX แแแแแแแแจแแ แ UART-แแแ, แแขแแแ แแแ แคแแ แแแแ แก - แฌแแ แแ
INIT
CMD0
ERROR
แแกแ, แงแแแแแคแแ แ แแแแแแฃแ แแ - แแ แแ แแแแฃแแแแจแแ แ SD แแแ แแแแก แแแแฃแแ. แฉแแแ แแแกแฌแแ แแแ แกแแขแฃแแชแแแก, แแขแแแ แแแแ firmware-แก... แแ แแฃแแแแ... แ แแขแแ แแ แแแแแแแคแแฅแ แ, แแแแ แแ แแแขแแ แ แงแฃแแ แแฎแแแฎแแ แแแแฎแกแแ: แแแแฃแแแก แแ แ-แแ แแ แแแแ แฃแแแ แแแแ แแแก VCC-แก. แฉแแแก แจแแแแฎแแแแแจแ, แแแแฃแแ แแฎแแ แก แฃแญแแ แแ 5 แ-แก แแแแฅแขแ แแแแแ แแแแก แแแฌแแแแแแกแแแแก, แแกแ แ แแ, แแ แฏแแ แแแคแแฅแ แแแแก แแแ แแจแ, แแ แแแแแแ แแ แแแแฃแแแแแ แแแแแแแแ แแแแแฃแแ แแแคแแก แแแแแ แแแแแ แ แแฎแแ แแก. แจแแแแแแ, แฃแฎแแ แฎแฃแแแ แจแแแฃแฆแแแฃแแ แแแแแฅแขแแ แ แแแฎแ แแแ แแแฎแแ แแ UART แแแแขแแฅแขแ แฃแแ แแแแ แแแแแแ แแ. facepalm.jpg แแแแแแแ, โแชแฃแแ แแแแ แแ แแกแแแแแแก แคแแฎแแแกโ, แแแฎแแแแ แฎแแแแแ แแ แแแแก แแ แแกแแแแแแก...
แจแแแแแแ แแแแฎแ แแแแ แฎแแแก แแแแแขแ แ
INIT
CMD0
CMD8
ACMD41
CMD58
CMD16
CMD18
LOADING /
แฃแคแ แ แแแขแแช, แแก แแแซแ แแแแก แแ แแแขแแแ แแแแก แแแแแแแขแแ แ แขแ แแแแแแก. แแแจแแแแ แแแฎแกแแแแแแ แฉแแแ แกแแแแแก แแฆแแแแ แแ MinuetOS-แแก แแ แแฃแแแ แฉแแขแแแ แแแ แคแแแแ แแแกแแแแแ. แแแ แแ แแ แจแแแแฎแแแแแกแ, แ แแแแกแแช แแ แแแแ แแ แแแคแฅแแแแก.
แแ แแแแแแ แแก แแ แแก, แ แแ BOOT แจแแขแงแแแแแแแแก แจแแแแแ แแ แแคแแ แ แฎแแแแ. แแก แแแจแแแแก, แ แแ แแ แแ แแแฃแแแแจแแ แแแ OpenOCD-แแก แกแแจแฃแแแแแแ Raspberry-แก, GDB-แก แฐแแกแขแแ แแ แแแฎแแ แ แ แแ แแก แแก.
แฏแแ แแ แแ, GDB-แแก แแแแแงแแแแแแ แแแแแแจแแ แแแแ แแแจแแแแ แแฉแแแแ แแก $pc
(แแ แแแ แแแแก แแ แแชแฎแแแแ, แแแแแแแแ แ แแแกแขแ แฃแฅแชแแแก แแแกแแแแ แแ) แคแ แแแแแแก 0x0
- แแก แแแแแ แแ แแแแแ แจแแชแแแแแก แจแแแแแ แฎแแแแ. แแแแขแแ, แจแแขแงแแแแแแแแก แแแแแแแแแกแแแแแแ BOOT
แแแแแ แแแแแแแขแแ แฃแกแแกแ แฃแแ แแแ แงแฃแแ. แแก แแแก แชแแขแ แฎแแแ แแแแงแแแแแแก...
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;
}
แแกแแแ แ แแฃแแ แแแแ แแแแแแงแแแแแ "แกแแแแแแแแกแแแแก": แกแแแฆแแช แแแแแแ, แ แแ แแแฃแแแแแแแแ แแแ แงแฃแแ แแ แแก แแแแฃแกแแแฆแแ แแแ แฅแชแแแ, แแแแ แแ แจแแแแแแแแแ แแแแแแแแ แกแแแแ แแฃแแแ, แ แแ แแแแแแชแแแก (แจแแแแฎแกแแแแแ, แ แแ แจแแกแแแแแแกแแ 0x10000
แแแแแแ แแแแก BootROM).
แ แแแแ แช แฉแแแก, แแแแแ แ แแก แฃแแแ แแแแแแแ - แฃแฎแแจแ แฉแแจแแแแแฃแแ, แ แ แกแแฎแแก แฌแงแแ แแก แแแแแแ แแ แกแแแแแก? แแแแ แแ แจแแแแแ
(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 แคแแแแ แแ แงแฃแแ, แแ แแแแ แแ แแแแแแแฃแ แ แแแ แกแแ ELF แคแแ แแแขแจแ.
แแฎแแ แแฅแแแ แจแแแแซแแแแ n-แ แแชแแแแแแแ แแแแแแชแแแ แแแกแแแแ แแ, แกแแแแช แจแแกแ แฃแแแแ แแแแ แซแแแแแแ (แแก แแ แแก แแแแแ แแ แแ แแแแแแ, แ แแก แแแแแช แจแแแแแแแแแก แแ แฃแแแ แแแแแแชแแ, แ แแ แชแแแแ แฃแกแแกแ แฃแแแ). แแฃแแแ
set variable $pc=0xADDR
แกแแจแฃแแแแแแก แแแซแแแแ แจแแชแแแแแ แ แแแแกแขแ แแก แแแแจแแแแแแแ on the fly (แแ แจแแแแฎแแแแแจแ, แแแแแแแแ แ แแแกแขแ แฃแฅแชแแแก แแแกแแแแ แแ). แแแกแ แแแฎแแแ แแแแ แจแแแแซแแแแ แจแแชแแแแแ แแแฎแกแแแ แแแแจแ แฉแแฌแแ แแแ แแแแจแแแแแแแแแ (แแ แแแฎแกแแแ แแแแก แ แฃแแแแแก แ แแแแกแขแ แแแ).
แกแแแแแแ แฏแแแจแ, แแแแแแ แแแกแแแแแแแ (แแ แแแ แแแ แฌแแฃแแแแฃแแ, แ แแแแแแ แกแฌแแ แ), แ แแ แฉแแแ แแแแฅแแก โแแ แแกแฌแแ แ แกแแกแขแแแแก SD แแแ แแแแก แกแฃแ แแแโ แแ แฉแแแ แฃแแแ แฌแแแแแแ แแ แ แแแแแแฌแแ แแแ แแแแแชแแแแแแก แแแกแแฌแงแแกแจแ, แแ แแแแ 0x89800
แแแแขแแแ แจแแแแแแแจแ:
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
แจแแกแแซแแแ, แแแแแ แแแแฅแแแแ แแแแแแช, แ แแ แฎแแแ แแ แแฅแแแแ แแแแแแขแ 4 แแ แแแ แแแ, แแแแฆแ 2 แแ-แแแแ แแ แจแแแแฎแแแแแ แแแแแแชแแแแ Makefile-แจแ. DEMO_END=11718750
on 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
แกแขแแแแก แแแฉแแแแแแแแ แแกแแ, แแฃแแฌแ แคแแแแ แ แแ แแแฅแแแ: แแก แแแฃแแแแแแก 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
แกแฃแ แก แแแแฌแแแแก แแแแแ แแแแก แแแคแแ แแแชแแ แแแแฎแแแ แ แแแแแแแแแแกแแก แจแแกแแฎแแ, แแแแ แแ แแแก แแ แจแแฃแซแแแ. แแกแ แ แแ, แ แแขแแแฆแแช แฉแแแแ แฌแงแแ แแแแ แแฆแแ แแ แแก แแแฉแแแแแแ. set directories ../freedom-u-sdk/HiFive_U-Boot/
แจแแกแแฎแแ! แแฎแแ แแแฉแแแแแแแ!
แแแแแ, แแกแแ แแแแฃแจแแแ แแ แแแกแขแแแแ แแแแฎแแ, แแฃ แ แ แแงแ แแ แแแแแแแฃแ แ แแ แแแแแแแก แแแแแแ, แ แแแแช แแแแแแฌแแแ แแแ แแแแ แจแแชแแแแ (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
. แ แแฆแแช แแแแแแขแจแ แแกแแช แแแคแแฅแ แ, แแฅแแแ, แแแ แแแ, แแ แแชแแกแแ แแกแแแแก แฉแแแขแแแ แแแแ แแแแแแแขแ - แแฅแแแ แชแแขแ แฃแคแ แ แแแแแแ แแงแแก แแ แแชแแกแแ แแก แแแแแกแฌแแ แแแ? แแแแ แแ แจแแแแแ แแแแแแแฎแ, แ แแ แแก แฃแคแ แ แแ แขแแคแแฅแขแก แฐแแแแแ แแแแแแแ แแแกแ แฃแแแแฃแแ#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 */
แ แแฆแแช แแแแแแขแจแ แงแแแแ แฏแแแแแก แ แแแแแแแแ
แแแแฎแแแแแแ, แแฅ แแ แแก แแแขแแ แ แแแแแแ
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-แแก แแแ แแแแแแ - แแแแแแแแแ, แจแแแแซแแแแ แแ แซแแแแแ make menuconfig
แแ แแแกแแฎแแ แฎแแแแแ แขแแฅแกแขแฃแ แ แแแขแแ แคแแแกแ แแแแแฉแแแแแ แแฅแแแแก แฌแแแแจแ, แ แแแแแแช แแฉแแแแแแก แแแ แแแแขแ แแแแก แแฆแฌแแ แแแแแแก ?
แแ แ.แจ. แแแแแแแ, แแ แ แแแคแแก แแฆแฌแแ แแแแแแแแ แแแกแแแแก แแฆแฌแแ แแแแแแก แจแแแแแแแกแแก, แแฅแแแแ แงแแแแ แกแแฎแแก แแ แแขแแแแแฃแแ PLL-แแก แ แแแแแคแแแฃแ แแชแแแก แแแแแแแแแแก (แ แแแแ แช แฉแแแก, แแก แแแ แแแแฃแแฌแแแแ แแแแแแจแแ แแแฃแแแ แแแกแแแแซแแแ แแแแแแฃแขแแ แแแแ PCIe-แก แกแแจแฃแแแแแแ แแแแขแ แแแแแ, แแแแ แแ แแก แแ แแ แแก แแแ แแแแฃแแ) , แแแแแฆแ แ แแฆแแช firmware, แ แแแแแแช แแแ แกแแ แจแแกแแคแแ แแก แแแแแแจแ UART-แแก แกแแจแฃแแแแแแ แแแแชแ แจแแขแงแแแแแแแ แแแแก แจแแกแแฎแแ, แแฃ แ แแแแแ commit hash-แแกแแแ แแงแ แจแแแแแแแแ แแ แ แแแแแแ DRAM แแแฅแแก (แแแแ แแ แแ แแแแแแ แแแแฌแแ แ แแก แแแคแแ แแแชแแ แกแแแแฃแ แจแ).
แกแแแฌแฃแฎแแ แแ แแฎแแแแ แแก, แ แแ แแแแก แจแแแแแ แแแคแ แฉแแแฃแแแแ แแ แฌแงแแแขแก แแแกแฃแฎแก แแ แแชแแกแแ แแก JTAG-แแก แกแแจแฃแแแแแแ แแ SD แแแ แแแแแแ แฉแแขแแแ แแแ, แกแแแฌแฃแฎแแ แแ, แแ แแ แแก แกแฌแ แแคแ แฉแแแก แแแแคแแแฃแ แแชแแแจแ. แแแแ แแก แแฎแ แแ, แแแแฏแแ BootROM แแซแแแแแ แจแแขแงแแแแแแแแก, แ แแ ERROR
, แแแ แฉแแแขแแแ แแ แแ U-Boot แแแจแแแแ แแแแแฉแแแ. แกแฌแแ แแ แแแจแแ แแแแแฉแแแ: แ แแแแ แช แฉแแแก, แแแขแขแ แแแแก FPGA-แจแ แแแแแขแแแ แแแแก แจแแแแแ, แแแฎแกแแแ แแแ แแ แแจแแแแ, แแแก แแ แแฅแแก แแ แ "แแแฃแแแ แฏแแจแแแแแ" แแ แ. แแแแแแ, แจแแแแซแแแแ แฃแแ แแแแ, แ แแแแกแแช แจแแขแงแแแแแแแ แแแแแฉแแแแแ LOADING /
แแแแแแจแแ แแแ แแแแแ แแแแกแ แแ แแ แซแแแแแแ set variable $pc=0x80089800
, แแแแ แแแแ แแแก แแแแแ แแ แฎแแแแ แซแแแ แฉแแขแแแ แแแแก (แ แ แแฅแแ แฃแแแ, แแ แแแ แแฃแแแ, แ แแ แแแแ แแ แแก แแก แกแแแแแ แแกแแ แแแ แ แแแคแฃแญแแ, แ แแ แแแก แแ แฐแฅแแแแ แแ แ แแ แแแแแแแฃแ แ แแแแแก แแแแแ แ แแแแแก แฉแแขแแแ แแแแแ).
แกแฎแแแแ แจแแ แแก, แแแแแแแ แแแ แแแแฃแ แแ, แ แแ แแ แแชแแกแแ แ แแแแแแแแ แแงแแแแแ แแ JTAG แแแแแแแ แ แแแก แจแแขแงแแแแแแแแแแ แแแ แฃแแ แแแแแ?
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
แงแฃแ แแแฆแแแ แแ แแแแฅแชแแ - แแแแแแแแฃแ แแ แแชแแกแแ แแ แแชแแแแแแแ แแแแแแ แกแฌแแ แแ แแฃแจแแแแก แแฃ แแ แ แแแ แแแแกแแแ. แ แแก แแฃแแแกแฎแแแ, "แแแ แฌแฃแแแ แแกแ แฉแแแแแแแแแฃแแ"? แแแแแช แแแแฎแแ แฎแ แแแแแขแแแ แแ แฉแแขแแแ แแแแก แแแแแฃแจแ แแแแแกแแแ! แแชแแ แ แแแแแฎแแแแ: แแแฃแฎแแแแแแ แแแแกแ, แ แแ U-Boot แแขแแแ แแแแ SD แแแ แแแแแแ แแแ แแแ 2^24 แแแแขแจแ, แ แแแแกแแช แแก แแฌแงแแแ, แแก แแแแแ แแแแ แฃแคแ แ แจแแ แก แแแกแแแแ แแแ, แแ แฉแแฌแแ แแแแ แแแแคแแแฃแ แแชแแแก แกแแแแฃแ แจแ, แแ แฃแแ แแแแ RAM-แแก แฃแคแ แ แแแฆแแ แแแกแแแแ แแแแแ. , แแ แแฎแแ แชแแแแแแก ELF-แแก แแแแแขแแแแก -แแแ แกแแแแแแแก แแ แแแแแกแชแแแก แแแแขแ แแแก แแฅ. แแกแ แ แแ: แ แแแแ แช แฉแแแก, แฉแแแ แแแแแแ แแ แแก แแแแ แแ แแแแแฆแแ แแแแฃแกแ, แ แแ แแ แแชแแกแแ แ แแญแแแ แแ แแ แฉแแแแแฎแ แฉแ แแแแก แจแแแแแ.
แ แแขแแ แแ แแฃแจแแแแก แขแแแแแ แ? แ แแแแ แช แฉแแแก, แกแแแแ แ แแขแแแฆแแช แแ แแฃแจแแแแก...
(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
แแ แฃแแ แแแแ แแแแแงแแแ แแก 1 MHz-แแ (แ แแแแ แช, แกแฎแแแแ แจแแ แแก, แแก แแงแ แแแแแแแแฃแแ U-Boot แแแแคแแแฃแ แแชแแแจแ). แแแแ แแ แฏแแแแแแ, แแ แแแ แแแฌแแกแ แแแแแฃแแ แแ แแแแแแฌแแแแแแ: แแฅ แแ แแแชแ, แแฅ แแ แแก 25 MHz! แกแแแแแแ แฏแแแจแ, แแ แแคแแ แ แแฃแจแแแแก. แแ แฌแแแจแแแ แฉแแแ "แแแฃแแฏแแแแกแแแแแ" แแ...
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 #
แแฅแแแ แแ แจแแแแซแแแแ แจแแแงแแแแแ แแ แซแแแแแแแ! แแแแแแแแแ, แแแก แจแแแแแ, แ แแช แชแแขแแแ แแแแแแแแ แแแ, แกแแแแแแแ แจแแแแซแแแแ แแแแแแชแแแ แจแแกแแแ mmc_spi 1 10000000 0; mmc part
, แแแชแแ แแแก SPI แกแแฎแจแแ แแก 20MHz-แแแ 10MHz-แแแ. แ แแขแแ? แฎแ, แแแแคแแแฃแ แแชแแแจแ แแฌแแ แ แแแฅแกแแแแแฃแ แ แกแแฎแจแแ แ 20MHz แแ แแกแแ แแฅ แฌแแ แแ. แแแแ แแ, แ แแแแแแแแแช แแ แแแกแแแก, แแแขแแ แคแแแกแแแ, แงแแแแ แจแแแแฎแแแแแจแ, แแฅ แแกแ แแฃแจแแแแก: แแแแ แงแแคแก แขแแฅแแแแแก แแ แแแฃแแแก แกแแฎแจแแ แแก (แฉแแแ แงแแแแแแ แแ แแก 25 MHz) แกแแแแแแแแ แแ แแแฆแแแฃแ แแแแจแแแแแแแแก แแแแแแก แแแแงแแคแแ แจแแกแแแแแแก แแแแขแ แแแจแ. แ แแแแกแขแ แแชแแ. แแ แแแแแแ แแก แแ แแก, แ แแ แแฃ 115200Hz UART-แแกแแแแก แแ แแก แแแแฎแแแแแแ แแก, แ แแช แกแแญแแ แแ, แแแจแแ แแฃ 25000000-แก แแแงแแคแ 20000000-แแ แแแแฆแแแ 1-แก, แ.แ. แแก แแแฃแจแแแแแก 25 MHz-แแ. แจแแแซแแแแ แแก แแแ แแแแฃแ แแ, แแแแ แแ แแฃ แจแแแฆแฃแแแแแ แแแฌแแกแแแฃแแแ, แแก แแแจแแแแก, แ แแ แแแแแแก แกแญแแ แแแแ (แแแแ แแ แแก แแ แแ แแก แแแ แแแแฃแแ)... แแแแแแแ, แฃแคแ แ แแแแแแแ แแแกแ แแแงแแแแแ แแ แฌแแแกแแแ - แจแแ แก แแ, แกแแแฌแฃแฎแแ แแ, แแแแ แฎแแแก แแแแแแแแแแแจแ. 25 MHz แแ แแ แแก Core i9.
แแแแกแแแแก แแแแแแแแแแ
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, แแกแ แ แแ แแแแแแแแแ แแ แแกแฌแแ แ แฉแแขแแแ แแแแกแแแแก. แจแแแแแ แจแแแแแ แแแแคแแแฃแ แแชแแแจแ, แแแแแฌแงแ แงแฃแ แแแ, แ แแกแแช แแชแแแแแ แแ แแแแแฎแกแแแแ: แแฅ conf/rvboot-fit.txt
แแแฌแแ แแแ:
fitfile=image.fit
# below much match what's in FIT (ugha)
แแแแแ, แงแแแแ แคแแแแ แจแแกแแแแแแกแแแแจแ แแแแแงแแแแแ, แจแแแชแแแแแ แแแ แแแแก แแ แซแแแแแแก แฎแแแ แแกแแแแกแ แ แแแแ, แ แแแแแ แแ แกแแแแแก แแญแแ, แ แแ SIF0
- แแก แแ แแก แแแแแกแแแแแ แกแแแฆแแช PCIe-แแก แกแแจแฃแแแแแแ:
-bootargs=console=ttySIF0,921600 debug
+bootargs=console=ttyS0,125200 debug
แแ แแแแแ แจแแแชแแแแแ แฐแแจแแ แแแแก แแแแแ แแแแ SHA-256-แแแ MD5-แแ: แแ แแ แแญแแ แแแแ แแ แแแขแแแ แแคแแฃแแ แกแแซแแแแ แ (แแแแกแแแฃแแ แแแแ แแแแแ แแแแกแแก), แแแแก แกแแจแแแแแ แแแแ แแ แ แกแญแแ แแแแ แแ แฉแแขแแแ แแแแกแแก แแแแแแแแแแก แจแแชแแแแแแแก แแแคแแฅแกแแ แแแแก, MD5 แซแแแแแ แแแ แขแแแแ. แ แ แแ แแก แกแแแแแแ แจแแแแแ? แฉแแแ แแแแแฌแงแแ แฌแแแ แแแแแก แแแกแ แฃแแแแ แจแแกแแแฉแแแแแ แฃแคแ แ แกแฌแ แแคแแ (แฃแคแ แ แแแ แขแแแ แฐแแจแแ แแแแก แแแแ) แแ แแแแฎแกแแ แจแแแแแแ:
...
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
แฃแ, แ แแแแ แช แฉแแแก, แกแแแแแก แแแ แแฅแขแแ แแแ แแแแชแแแ แแฆแแแฉแแแ, แแฃแแชแ แแ แแ แแก แแแฉแแแแแแแแ, แ แแ แแแแแฎแแแ แ. แแ แ, แ แ แแฅแแ แฃแแแ, แแแแแกแฌแแ แแแแ แกแแญแแ แ, แแแแ แแ แฏแแ แฎแแแแ แแแแแขแ แแแแแ แแกแ แแแ แแ แแแแฎแแ, แ แ แแแฎแแแแ:
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
โ แแแกแแแแซแแแ แแแขแแ แคแแแกแ, แ แแแแแแช แแแแแแงแแแแแ แแแ แแแแก แจแแแ แแแแฃแแ แแแจแแแแแกแแแแก (แแแฃ แแแกแแแแซแแ ARM-แแแ แแแแแแจแ แแแแแแแ), แแ แฉแแแแแแแ แแแแแฃแแแแแแแแ. แแฃแแชแ, แแฃ แแ แคแฃแแฅแชแแแก แแแแแแ แกแแฌแงแแก แแแแจแ, แฎแแแแแ, แ แแ แงแแแแแคแแ แ แแ แช แแกแ แชแฃแแแ:
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-แก, แ แแแแแก แจแแกแแฎแแแแช แแแแแแแ แแคแแฅแ แแแแ: โแแแจ, แ แ แแแแฅแแก แแฅ? แแแฃแแแแแ แแ? แแแแ แแแแแแ แแแ!" แแแแก แแแแ, แ แแ แแ แฏแแ แแแแแ แแ แแแกแแแก, แ แแแแ แ แกแแแแแก แแแแแ แฎแแแแ แแฅ, แแกแ แ แแ, แแ แฃแแ แแแแ แแแแแแฎแแ แชแแแแแ แแ แแแแแแแก 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-แแก แแแ แแแแกแแแ
แแฅ แแแแแแ แฃแแแ แแแญแแแแฃแ แแ แแ แชแแขแ แแแแแขแแแฃแ แ แแแฎแแ, แแแแขแแ แแแแแแแ แฅแแแแแแแ แแฆแแฌแแ :
BBL-แแ แแแแ แแฃแแ FDT-แแก แแ แกแแแแแ 0xF0000000
, แแแแ แแ แฃแแแ แแแแแกแฌแแ แ! แแแ, แแแแแ แแแแแ แแ แแฎแแ แแแแแแฎแแแแ... แแแแแแก HiFive_U-Boot/arch/riscv/lib/boot.c, แจแแชแแแแ 0x81F00000
, แแแแแแแแฃแแแ U-Boot แฉแแขแแแ แแแแก แแแแคแแแฃแ แแชแแแจแ.
แจแแแแแ BBL แแแแฉแแแแ, แ แแ แแแฎแกแแแ แแแ แแ แแงแ. แฉแแแ แแแ แคแฃแแฅแชแแแจแ แแงแ mem_prop
, แ แแแแแแช riscv-pk/machine/fdt.c: แแฅแแแแ แแแแแแ, แ แแ แแฅแแแ แฃแแแ แแแแแจแแแ fdt ram แแแแแซแ แ แแแแ แช 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-แแแขแแแแ แแแกแแแแ แแแก แแแแแแแแแแแแก, แแแแ แแ แแแฎแแแแแ แฌแงแแแแ <0x0 0xADDR>
แแ แแแ แแแแ แแแแจแแแแแแแ, แ แแแแ แช แฉแแแก, แงแแแแแแ แแแแแแแแ แแแแจแแแแแแแแแ แแแขแแ. แแแแแขแแแฃแแแ แแแแงแแคแแแแแแจแ chosen
chosen {
#address-cells = <1>;
#size-cells = <0>;
...
}
แแ แจแแแกแฌแแ แ แฆแแ แแแฃแแแแแแแก แแแแแ แแชแแ: แแ แแแแแแขแ 0x0
แแแ แแแแ แแแแแแแขแ.
แแก 100500 แแแ แขแแแ แแแแแฏแ แแแแแแแแแแแแ แแแแแแแแแก แแแชแแแแก แงแฃแ แแแแก:
แแแแแแฃแแ แขแแฅแกแขแ
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-แแ, แ แแแแกแแช แแฅแแแ แแแแแแแจแแ แแแ แแแแแ แแแแก JTAG-แแก แกแแจแฃแแแแแแ, แจแแแแซแแแแ แฎแแคแแแแแแแก แแแญแแ แ แงแฃแแแแแ - แแแแแ แแแ แแฃแกแขแแ แแ แแ แแก แแแฉแแ แแแแ.
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
azadรฎ-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 - แฆแแแแก แแ แแแแแ แ แจแแฆแแแแ แขแแ แกแแแแ แแก แแแแแแแ. แแแแแแแ, แแฆแแก แ แแขแแแฆแแช แแแแแ แฏแแแแฃแแแแ แแ แแงแแแแ, แแ แแแ แแแแแแแก แจแแแแแ แแแแแแแจแแแแแ...
แแฅแแ แแแแแแแแ แแแแแกแ แฃแแแ แฃแแแ แแ แชแแแ แกแขแแขแแ.
แฒแแแ แซแแแแแ แแฅแแแแ. แแฅแแแแ แแ แซแแแ แแแแแแ แฃแ แแแแแแ, แ แแแแแแช แแฎแแ แฎแแแก แแแแแแแแก, แแฃ แแแ-แแแแ แแแกแแ แชแแ แแแแแฏแแ แแแแแฎแแแแ.
แขแแฅแกแขแแก แฉแแแแขแแแ แแแแก แกแแ แแแแแกแขแ (แแแ แ แแแฃแแ):
แฌแงแแ แ: www.habr.com