แƒœแƒแƒฌแƒ˜แƒšแƒ˜ 3: Linux-แƒ˜แƒก แƒ—แƒ˜แƒ—แƒฅแƒ›แƒ˜แƒก แƒฉแƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ SD แƒ‘แƒแƒ แƒแƒ—แƒ˜แƒ“แƒแƒœ RocketChip-แƒ–แƒ”

แƒœแƒแƒฌแƒ˜แƒšแƒ˜ 3: Linux-แƒ˜แƒก แƒ—แƒ˜แƒ—แƒฅแƒ›แƒ˜แƒก แƒฉแƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ SD แƒ‘แƒแƒ แƒแƒ—แƒ˜แƒ“แƒแƒœ RocketChip-แƒ–แƒ” ะ’ แƒฌแƒ˜แƒœแƒ แƒœแƒแƒฌแƒ˜แƒšแƒ˜ แƒ“แƒแƒœแƒ”แƒ แƒ’แƒ˜แƒšแƒ˜ แƒ˜แƒฅแƒœแƒ แƒ›แƒ”แƒข-แƒœแƒแƒ™แƒšแƒ”แƒ‘แƒแƒ“ แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ”แƒ แƒ˜, แƒฃแƒคแƒ แƒ แƒกแƒฌแƒแƒ แƒแƒ“, Quartus-แƒ˜แƒก IP Core-แƒ˜แƒก แƒ’แƒแƒ“แƒแƒกแƒแƒคแƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ แƒ˜แƒก TileLink-แƒ˜แƒก แƒแƒ“แƒแƒžแƒขแƒ”แƒ แƒ˜. แƒ“แƒฆแƒ”แƒก, แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒแƒจแƒ˜ "แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒ— RocketChip-แƒก แƒชแƒแƒขแƒ แƒชแƒœแƒแƒ‘แƒ˜แƒš แƒฉแƒ˜แƒœแƒฃแƒ  แƒ“แƒแƒคแƒแƒ–แƒ” Cyclone-แƒ˜แƒ—" แƒœแƒแƒฎแƒแƒ•แƒ— แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒ™แƒแƒœแƒกแƒแƒšแƒก. แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜ แƒชแƒแƒขแƒ แƒฎแƒแƒœแƒก แƒ’แƒแƒ’แƒ แƒซแƒ”แƒšแƒ“แƒ: แƒฃแƒ™แƒ•แƒ” แƒ•แƒคแƒ˜แƒฅแƒ แƒแƒ‘แƒ“แƒ˜, แƒ แƒแƒ› แƒกแƒฌแƒ แƒแƒคแƒแƒ“ แƒ’แƒแƒ•แƒฃแƒจแƒ•แƒ˜ Linux แƒ“แƒ แƒ’แƒแƒ•แƒแƒ’แƒ แƒซแƒ”แƒšแƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ”แƒก แƒแƒกแƒ” แƒแƒ  แƒ˜แƒงแƒ. แƒแƒ› แƒœแƒแƒฌแƒ˜แƒšแƒจแƒ˜ แƒ›แƒ” แƒ’แƒ—แƒแƒ•แƒแƒ–แƒแƒ‘แƒ— แƒ’แƒแƒ“แƒแƒ•แƒฎแƒ”แƒ“แƒแƒ— U-Boot-แƒ˜แƒก, BBL-แƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒก แƒ“แƒ Linux-แƒ˜แƒก แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒ˜แƒœแƒ˜แƒชแƒ˜แƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒแƒ แƒชแƒฎแƒ• แƒ›แƒชแƒ“แƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒก. แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ แƒ˜แƒก แƒ™แƒแƒœแƒกแƒแƒšแƒ˜ - U-Boot แƒ“แƒ แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ›แƒแƒฌแƒ˜แƒœแƒแƒ•แƒ”, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒแƒฅแƒ•แƒก แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒ แƒแƒ›, แƒ แƒแƒกแƒแƒช แƒ›แƒแƒ”แƒšแƒ˜แƒ— แƒกแƒ แƒฃแƒšแƒคแƒแƒกแƒแƒ•แƒแƒœแƒ˜ แƒ™แƒแƒœแƒกแƒแƒšแƒ˜แƒกแƒ’แƒแƒœ.

แƒแƒžแƒแƒ แƒแƒขแƒฃแƒ แƒ แƒ›แƒแƒ˜แƒชแƒแƒ•แƒก 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
}

แƒ แƒ”แƒ”แƒกแƒขแƒ แƒ˜แƒก แƒฏแƒแƒญแƒ•แƒ”แƒ‘แƒ˜, แƒ›แƒแƒ แƒ—แƒแƒšแƒ˜ แƒ’แƒ˜แƒ—แƒฎแƒ แƒแƒ—, แƒ“แƒแƒ”แƒ›แƒแƒขแƒ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒแƒ แƒ˜แƒ’แƒ˜แƒœแƒแƒšแƒฃแƒ แƒ˜ แƒ™แƒแƒ“แƒ˜แƒก แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ— แƒกแƒฎแƒ•แƒ แƒแƒ“แƒ’แƒ˜แƒšแƒ—แƒแƒœ แƒแƒœแƒแƒšแƒแƒ’แƒ˜แƒ˜แƒ—. แƒกแƒแƒ•แƒแƒ แƒแƒฃแƒ“แƒแƒ“, แƒ›แƒแƒ— แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ˜แƒชแƒ•แƒแƒœ แƒ›แƒ”แƒขแƒแƒกแƒขแƒแƒ‘แƒ˜แƒšแƒฃแƒ แƒแƒ‘แƒ. แƒแƒšแƒ‘แƒแƒ— แƒจแƒ˜แƒ’แƒœแƒ˜แƒ— แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ—แƒ˜ แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒก แƒฃแƒ™แƒ•แƒ” แƒแƒฅแƒ•แƒ— แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒ“แƒแƒชแƒ•แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒฏแƒ”แƒ  แƒ›แƒกแƒฃแƒ แƒก แƒ›แƒ˜แƒกแƒ˜ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ แƒ›แƒ˜แƒœแƒ˜แƒ›แƒฃแƒ› "แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒฎแƒแƒ แƒ˜แƒกแƒฎแƒ˜แƒก แƒ“แƒแƒœแƒ”แƒ–แƒ”". แƒฉแƒ”แƒ›แƒ—แƒ•แƒ˜แƒก แƒฃแƒคแƒ แƒ แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒ™แƒ˜แƒ—แƒฎแƒ•แƒแƒ, แƒ แƒแƒขแƒแƒ› แƒแƒ แƒ˜แƒก MISO แƒ“แƒ MOSI แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ dq? แƒžแƒแƒกแƒฃแƒฎแƒ˜ แƒฏแƒ”แƒ  แƒ•แƒ”แƒ  แƒ•แƒ˜แƒžแƒแƒ•แƒ”, แƒ›แƒแƒ’แƒ แƒแƒ›, แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒแƒœแƒก, แƒ“แƒแƒœแƒแƒ แƒฉแƒ”แƒœแƒ˜ แƒ™แƒแƒ“แƒ˜ แƒกแƒฌแƒแƒ แƒ”แƒ“ แƒแƒกแƒ”แƒ— แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒก แƒ”แƒงแƒ แƒ“แƒœแƒแƒ‘แƒ.

แƒคแƒ˜แƒ–แƒ˜แƒ™แƒฃแƒ แƒแƒ“, แƒ›แƒ” แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ›แƒ˜แƒ•แƒแƒœแƒ˜แƒญแƒ” แƒ“แƒ˜แƒ–แƒแƒ˜แƒœแƒ˜แƒก แƒฅแƒ˜แƒœแƒซแƒ˜แƒกแƒ—แƒแƒ•แƒ”แƒ‘แƒ˜ แƒ‘แƒšแƒแƒ™แƒ˜แƒก แƒ—แƒแƒ•แƒ˜แƒกแƒฃแƒคแƒแƒš แƒ™แƒแƒœแƒขแƒแƒฅแƒขแƒ”แƒ‘แƒก แƒ“แƒ แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒงแƒ•แƒแƒœแƒ” แƒซแƒแƒ‘แƒ•แƒ˜แƒก แƒจแƒ”แƒ แƒฉแƒ”แƒ•แƒ˜แƒก แƒฏแƒฃแƒ›แƒžแƒ”แƒ แƒ˜ 3.3 แƒ•-แƒ–แƒ”.

SD แƒแƒ“แƒแƒžแƒขแƒ”แƒ แƒ˜

แƒฎแƒ”แƒ“แƒ˜ แƒ–แƒ”แƒ›แƒแƒ“แƒแƒœ:

แƒœแƒแƒฌแƒ˜แƒšแƒ˜ 3: Linux-แƒ˜แƒก แƒ—แƒ˜แƒ—แƒฅแƒ›แƒ˜แƒก แƒฉแƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ SD แƒ‘แƒแƒ แƒแƒ—แƒ˜แƒ“แƒแƒœ RocketChip-แƒ–แƒ”

แƒฅแƒ•แƒ”แƒ“แƒ แƒฎแƒ”แƒ“แƒ˜:

แƒœแƒแƒฌแƒ˜แƒšแƒ˜ 3: Linux-แƒ˜แƒก แƒ—แƒ˜แƒ—แƒฅแƒ›แƒ˜แƒก แƒฉแƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ SD แƒ‘แƒแƒ แƒแƒ—แƒ˜แƒ“แƒแƒœ RocketChip-แƒ–แƒ”

แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒฃแƒšแƒ˜ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒ˜แƒก แƒ’แƒแƒ›แƒแƒ แƒ—แƒ•แƒ: แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜

แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒ แƒ˜แƒ’แƒจแƒ˜, แƒ›แƒแƒ“แƒ˜แƒ— แƒ•แƒ˜แƒกแƒแƒฃแƒ‘แƒ แƒแƒ— แƒ’แƒแƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ› แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ–แƒ” แƒ“แƒ แƒ›แƒแƒ— แƒจแƒ”แƒ–แƒฆแƒฃแƒ“แƒ•แƒ”แƒ‘แƒ–แƒ”.

แƒ›แƒ˜แƒœแƒ˜แƒ™แƒแƒ›แƒ˜

แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒ แƒ˜แƒ’แƒจแƒ˜, แƒ“แƒแƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ แƒแƒ’แƒแƒ แƒ›แƒ” แƒฌแƒแƒ•แƒ˜แƒ™แƒ˜แƒ—แƒฎแƒแƒ—, แƒ แƒแƒก แƒ’แƒแƒ›แƒแƒกแƒชแƒ”แƒ›แƒก แƒฉแƒแƒ›แƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ”แƒšแƒ˜ แƒ“แƒ แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜. 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).

แƒœแƒแƒฌแƒ˜แƒšแƒ˜ 3: Linux-แƒ˜แƒก แƒ—แƒ˜แƒ—แƒฅแƒ›แƒ˜แƒก แƒฉแƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ SD แƒ‘แƒแƒ แƒแƒ—แƒ˜แƒ“แƒแƒœ RocketChip-แƒ–แƒ”

แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒแƒœแƒก, แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ แƒแƒก แƒฃแƒœแƒ“แƒ แƒ•แƒ”แƒšแƒแƒ“แƒแƒ— - แƒฃแƒฎแƒ”แƒจแƒ˜ แƒฉแƒแƒจแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜, แƒ แƒ แƒกแƒแƒฎแƒ˜แƒก แƒฌแƒงแƒแƒ แƒแƒก แƒ™แƒแƒ“แƒ”แƒ‘แƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก? แƒ›แƒแƒ’แƒ แƒแƒ› แƒจแƒ˜แƒ’แƒœแƒ˜แƒ— แƒ˜แƒ› แƒกแƒขแƒแƒขแƒ˜แƒแƒก แƒแƒ•แƒขแƒแƒ แƒ˜ แƒแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒ“แƒ C แƒ™แƒแƒ“แƒก... Kreks-fex-pex:

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

แƒœแƒแƒฌแƒ˜แƒšแƒ˜ 3: Linux-แƒ˜แƒก แƒ—แƒ˜แƒ—แƒฅแƒ›แƒ˜แƒก แƒฉแƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ SD แƒ‘แƒแƒ แƒแƒ—แƒ˜แƒ“แƒแƒœ RocketChip-แƒ–แƒ”

แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒฃแƒœแƒ“แƒ แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒแƒ— แƒแƒ แƒ 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). แƒ—แƒฃ แƒกแƒฌแƒแƒ แƒแƒ“ แƒ’แƒแƒ•แƒ˜แƒ’แƒ” แƒ แƒแƒช แƒฌแƒ”แƒ แƒ˜แƒ แƒแƒฅ แƒ’แƒ•แƒ”แƒ แƒ“แƒ–แƒ” 37, แƒ›แƒแƒจแƒ˜แƒœ แƒ”แƒก แƒ’แƒแƒ›แƒแƒœแƒแƒ™แƒšแƒ˜แƒกแƒ˜ แƒœแƒ˜แƒจแƒœแƒแƒ•แƒก 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 - แƒฆแƒแƒ‘แƒ˜แƒก แƒ”แƒ แƒ—แƒ’แƒ•แƒแƒ แƒ˜ แƒจแƒ”แƒฆแƒ”แƒ‘แƒ•แƒ แƒขแƒแƒ› แƒกแƒแƒ˜แƒ”แƒ แƒ˜แƒก แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒ—. แƒ–แƒแƒ’แƒแƒ“แƒแƒ“, แƒ“แƒฆแƒ”แƒก แƒ แƒแƒขแƒแƒ›แƒฆแƒแƒช แƒ’แƒแƒ›แƒแƒ แƒฏแƒ•แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ˜ แƒแƒ  แƒ˜แƒงแƒ•แƒœแƒ”แƒœ, แƒžแƒ แƒ˜แƒ–แƒ˜ แƒ’แƒแƒ“แƒแƒ“แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ’แƒแƒ—แƒแƒ›แƒแƒจแƒ”แƒ‘แƒแƒ–แƒ”...

แƒแƒฅแƒ•แƒ” แƒ•แƒ—แƒแƒ•แƒแƒ–แƒแƒ‘ แƒ“แƒแƒ•แƒแƒกแƒ แƒฃแƒšแƒแƒ— แƒฃแƒ™แƒ•แƒ” แƒ•แƒ แƒชแƒ”แƒšแƒ˜ แƒกแƒขแƒแƒขแƒ˜แƒ.

แฒ’แƒแƒ’แƒ แƒซแƒ”แƒšแƒ”แƒ‘แƒ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ. แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ‘แƒ แƒซแƒแƒšแƒ แƒ›แƒ–แƒแƒ™แƒ•แƒ แƒฃแƒš แƒ‘แƒแƒ’แƒ—แƒแƒœ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒก แƒ“แƒแƒ›แƒแƒšแƒ•แƒแƒก, แƒ—แƒฃ แƒœแƒ”แƒš-แƒœแƒ”แƒšแƒ แƒ›แƒแƒกแƒ–แƒ” แƒชแƒแƒš แƒœแƒแƒ‘แƒ˜แƒฏแƒ–แƒ” แƒ’แƒแƒ“แƒแƒฎแƒ•แƒแƒšแƒ—.

แƒขแƒ”แƒฅแƒกแƒขแƒ˜แƒก แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒกแƒ™แƒ แƒ˜แƒœแƒ™แƒแƒกแƒขแƒ˜ (แƒ’แƒแƒ แƒ” แƒ‘แƒ›แƒฃแƒšแƒ˜):
แƒœแƒแƒฌแƒ˜แƒšแƒ˜ 3: Linux-แƒ˜แƒก แƒ—แƒ˜แƒ—แƒฅแƒ›แƒ˜แƒก แƒฉแƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ SD แƒ‘แƒแƒ แƒแƒ—แƒ˜แƒ“แƒแƒœ RocketChip-แƒ–แƒ”

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ