рдкрд┐рдЫрд▓реЗ рднрд╛рдЧ рдореЗрдВ , рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореЗрдореЛрд░реА рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╛ рдмрд▓реНрдХрд┐, рдХреНрд╡рд╛рд░реНрдЯрд╕ рд╕реЗ рдЖрдИрдкреА рдХреЛрд░ рдкрд░ рдПрдХ рдЖрд╡рд░рдг, рдЬреЛ рдХрд┐ рдЯрд╛рдЗрд▓рд▓рд┐рдВрдХ рдХрд╛ рдПрдХ рдПрдбрд╛рдкреНрдЯрд░ рд╣реИред рдЖрдЬ, "рд╣рдо рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЬреНрдЮрд╛рдд рдЪреАрдиреА рдорджрд░рдмреЛрд░реНрдб рд╕рд╛рдЗрдХреНрд▓реЛрди рдХреЗ рд╕рд╛рде рд░реЙрдХреЗрдЯ рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВ" рд╢реАрд░реНрд╖рдХ рдХреЗ рддрд╣рдд, рдЖрдкрдХреЛ рдПрдХ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХрдВрд╕реЛрд▓ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдереЛрдбрд╝рд╛ рдЖрдЧреЗ рдмрдврд╝рд╛рдпрд╛ рдЧрдпрд╛: рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рд╕реЛрдЪ рд▓рд┐рдпрд╛ рдерд╛ рдХрд┐ рдореИрдВ рдЬрд▓реНрджреА рд╕реЗ рд▓рд┐рдирдХреНрд╕ рд▓реЙрдиреНрдЪ рдХрд░реВрдВрдЧрд╛, рдФрд░ рдЖрдЧреЗ рдмрдврд╝реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рдерд╛ред рдЗрд╕ рднрд╛рдЧ рдореЗрдВ, рдореИрдВ рдпреВ-рдмреВрдЯ, рдмреАрдмреАрдПрд▓, рдФрд░ рдбрд░рдкреЛрдХ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджреЗрдЦрдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдПрдХ рд╕рд╛рдВрддреНрд╡рдирд╛ рд╣реИ - рдпреВ-рдмреВрдЯ-рдУрд╡реНрд╕реНрдХреА, рдФрд░ рдХрд╛рдлреА рдЙрдиреНрдирдд, рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдкреВрд░реНрдг рдХрдВрд╕реЛрд▓ рд╕реЗ рдмрд╣реБрдд рдХреБрдЫ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред
рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдореЗрдВ, SPI рдХреЗ рд╕рд╛рде-рд╕рд╛рде UART рд╕реЗ рдЬреБрдбрд╝рд╛ рдПрдХ SD рдХрд╛рд░реНрдб рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рднрд╛рдЧ рдореЗрдВ, рдмреВрдЯреЙрдо рдХреЛ xip рд╕реЗ xip
рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмреВрдЯ рдЪрд░рдг (SD рдХрд╛рд░реНрдб рдкрд░) рдЬреЛрдбрд╝реЗ рдЬрд╛рдПрдВрдЧреЗред
рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдбреЛрдкрд┐рдВрдЧ
рддреЛ, рдХрд╛рд░реНрдп: рдЖрдкрдХреЛ "рдмрдбрд╝реЗ" рдХреЛрд░ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдФрд░ UART (рд░рд╛рд╕реНрдкрдмреЗрд░реА рд╕реЗ) рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдФрд░ рдПрд╕рдбреА рдПрдбрд╛рдкреНрдЯрд░ (рдЫрд╣ рдкрд┐рди рдХреЗ рд╕рд╛рде рдХреИрдЯрд▓реЗрдХреНрд╕ рдмреЛрд░реНрдб рдХреЗ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рдЬреАрдПрдирдбреА, рд╡реАрд╕реАрд╕реА, рдПрдордЖрдИрдПрд╕рдУ, рдорд┐рдХреНрд╕реА, рдПрд╕рд╕реАрдХреЗ, рд╕реАрдПрд╕)ред
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рдерд╛ред рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╕рд╛рдХрд╛рд░ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореБрдЭреЗ рдкрдХреНрд╖ рдХреА рдУрд░ рд╕реЗ рдереЛрдбрд╝рд╛ рдлреЗрдВрдХрд╛ рдЧрдпрд╛ рдерд╛: рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдЖрдкрдХреЛ рдлрд┐рд░ рд╕реЗ System
рдореЗрдВ HasPeripheryUART
(рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдХреНрд░рдорд╢рдГ) рдЬреИрд╕реА рдХреБрдЫ HasPeripheryUART
рдХреЛ рдорд┐рд▓рд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рдПрд╕рдбреА рдХрд╛рд░реНрдб рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди - рдФрд░ рдпрд╣ рд╡рд╣реА рд╣реИ рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдлрд┐рд░ рдореИрдВрдиреЗ рдпрд╣ рджреЗрдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдЗрд╕реЗ "рдЧрдВрднреАрд░" рдбрд┐рдЬрд╝рд╛рдЗрди рдореЗрдВ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рддреЛ рдХреНрдпрд╛ рд╣рдо рдЧрдВрднреАрд░ рд╣реЛ рдЧрдП рд╣реИрдВ? рдПрд░реА, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдлрд┐рдЯ рдирд╣реАрдВ рд╣реИ - рд░рд╛рдХреНрд╖рд╕ unleahshed.DevKitConfigs
рд░рд╣рддрд╛ рд╣реИ unleahshed.DevKitConfigs
ред рдФрд░ рдЕрдЪрд╛рдирдХ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╣рд░ рдЬрдЧрд╣ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдУрд╡рд░рд▓реЗ рдереЗ рдЬреЛ рдХрд┐ рдорд╛рдкрджрдВрдбреЛрдВ рджреНрд╡рд╛рд░рд╛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛрдбрд╝реЗ рдЧрдП рдереЗред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╢рд╛рдпрдж рдмрд╣реБрдд рд▓рдЪреАрд▓рд╛ рдФрд░ рд╡рд┐рдиреНрдпрд╛рд╕ рдпреЛрдЧреНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ ... рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╣реА рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдЖрд╕рд╛рди-рдмреИрд╕рд╛рдЦреА рд╣реИ? .. рдлрд┐рд░ рдореИрдВ vera.iofpga.FPGAChip
рдЖрдпрд╛ рдерд╛ FPGAs рдХреЗ рд▓рд┐рдП рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдореА рдФрд░ рдПрдХрджрдо рд╕реЗ рдЙрджреНрдзрд░рдгреЛрдВ рдореЗрдВ рдЦреАрдВрдЪ рд▓рд┐рдпрд╛ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдпрд╣рд╛рдВ рд▓рд╛рдн рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреВрд░реЗ "рдорджрд░рдмреЛрд░реНрдб рд▓реЗрдЖрдЙрдЯ" рд╕реЗ рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рд╣реИред
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдкрдХреЛ рд╕рд┐рд░реНрдл System.scala
рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
class System(implicit p: Parameters) extends RocketSubsystem ... with HasPeripherySPI with HasPeripheryUART ... { val tlclock = new FixedClockResource("tlclk", p(DevKitFPGAFrequencyKey)) ... } class SystemModule[+L <: System](_outer: L) extends RocketSubsystemModuleImp(_outer) ... with HasPeripheryUARTModuleImp with HasPeripheryGPIOModuleImp ...
System
рдХреНрд▓рд╛рд╕ рдХреЗ рд╢рд░реАрд░ рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдЙрд╕ рдЖрд╡реГрддреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЬреЛрдбрд╝рддреА рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╣рдорд╛рд░реЗ SoC рдХрд╛ рдпрд╣ рднрд╛рдЧ dts рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдбреАрдЯреАрдПрд╕ / рдбреАрдЯреАрдмреА рдПрдореНрдмреЗрдбреЗрдб рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧ-рдПрдВрдб-рдкреНрд▓реЗ рдЯреЗрдХреНрдиреЛрд▓реЙрдЬреА рдХрд╛ рдПрдХ рд╕реНрдерд┐рд░ рдПрдирд╛рд▓реЙрдЧ рд╣реИ: рдбреАрдЯреНрд╕-рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрд╢рди рдЯреНрд░реА рдХреЛ рдПрдХ рдмрд╛рдЗрдирд░реА рдбреАрдЯреАрдмреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд▓реЛрдбрд░ рджреНрд╡рд╛рд░рд╛ рдЗрд╕реЗ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЛ рдареАрдХ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХреЗред рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, tlclock
рд╕рд╛рде рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рдмрд┐рдирд╛ рд╕рдм рдХреБрдЫ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрд╢реНрд▓реЗрд╖рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмреВрдЯрд░реЙрдо рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ (рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдм рдпрд╣ sdboot
рд╣реЛрдЧрд╛) - рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рдпрд╣ sdboot
рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ TL_CLK
рдореИрдХреНрд░реЛ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реЗрдбрд░ рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЖрд╡реГрддреНрддрд┐ рдбрд┐рд╡рд╛рдЗрдбрд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдмрд╛рд╣рд░реА рдЗрдВрдЯрд░рдлреЗрд╕ред
рдЖрдкрдХреЛ рд╡рд╛рдпрд░рд┐рдВрдЧ рдХреЛ рдереЛрдбрд╝рд╛ рдареАрдХ рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:
Platform.scala:
class PlatformIO(implicit val p: Parameters) extends Bundle { ...
рд╕реНрд░реЛрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдХреБрдЫ рдЕрдиреНрдп рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛ рд░рдЬрд┐рд╕реНрдЯрд░ рдЪреЗрди рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдореЗрдЯрд╛рд╕реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рд╕реЗ рдмрдЪрд╛рд╡ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╢рд╛рдпрдж рдХреБрдЫ рдмреНрд▓реЙрдХреЛрдВ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдиреА рд╕реБрд░рдХреНрд╖рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдореИрдВ рдХрдо рд╕реЗ рдХрдо "рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░" рдЪрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ MISO рдФрд░ MOSI рдЕрд▓рдЧ-рдЕрд▓рдЧ dq
рдкрд░ рдХреНрдпреЛрдВ рд▓рдЯрдХреЗ рд╣реИрдВ? рдореБрдЭреЗ рдЕрднреА рднреА рдЗрд╕рдХрд╛ рдЬрд╡рд╛рдм рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╛рдХреА рдХреЛрдб рдХреА рдЧрд┐рдирддреА рдРрд╕реЗ рд╣реА рдПрдХ рдХрдиреЗрдХреНрд╢рди рдкрд░ рд╣реЛ рд░рд╣реА рд╣реИред
рд╢рд╛рд░реАрд░рд┐рдХ рд░реВрдк рд╕реЗ, рдореИрдВрдиреЗ рдЕрднреА рдмреНрд▓реЙрдХ рдкрд░ рдвреАрд▓реЗ рд╕рдВрдкрд░реНрдХреЛрдВ рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдирд┐рд╖реНрдХрд░реНрд╖ рд╕реМрдВрдкрд╛ рдФрд░ рд╡реЛрд▓реНрдЯреЗрдЬ рдЪрдпрди рдЬрдореНрдкрд░ рдХреЛ 3.3V рдореЗрдВ рдкреБрди: рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ред
рдПрд╕рдбреА рдПрдбрд╛рдкреНрдЯрд░рд╢реАрд░реНрд╖ рджреГрд╢реНрдп:

рдиреАрдЪреЗ рдХрд╛ рджреГрд╢реНрдп:

рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рднрд╛рдЧ рдбрд┐рдмрдЧрд┐рдВрдЧ: рдЙрдкрдХрд░рдг
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдЙрдкрд▓рдмреНрдз рдбрд┐рдмрдЧрд┐рдВрдЧ рдЯреВрд▓ рдФрд░ рдЙрдирдХреА рд╕реАрдорд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред
minicom
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рдмреВрдЯрд▓реЛрдбрд░ рдФрд░ рдХрд░реНрдиреЗрд▓ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдкрдврд╝рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓рд┐рдирдХреНрд╕ рдкрд░ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд░рд╛рд╕реНрдкрдмреЗрд░реАрдкреА рдкрд░ рдПрдХ), рд╣рдореЗрдВ рдорд┐рдирд┐рдХреЙрдо рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рд╕реАрд░рд┐рдпрд▓ рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА рдХрд╛рд░реНрдпрдХреНрд░рдо рдЙрдкрдпреБрдХреНрдд рд╣реИред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдореЗрдВ, рдкреЛрд░реНрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдирд╛рдо -D /dev/ttyS0
- -D
рд╡рд┐рдХрд▓реНрдк рдХреЗ рдмрд╛рдж рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЦреИрд░, рдореБрдЦреНрдп рдЬрд╛рдирдХрд╛рд░реА: рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, Ctrl-A, X
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рдерд╛ рдЬрд╣рд╛рдВ рдпрд╣ рд╕рдВрдпреЛрдЬрди рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ - рдлрд┐рд░ рдЖрдк рдмрд╕ рдЖрд╕рдиреНрди SSH рд╕рддреНрд░ рд╕реЗ killall -KILL minicom
рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд░рд╛рд╕реНрдкрдмреЗрд░реАрдкреА рдкрд░ рджреЛ рдпреВрдПрдЖрд░рдЯреА рд╣реИрдВ, рдФрд░ рджреЛрдиреЛрдВ рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдмреНрд▓реВрдЯреВрде рдХреЗ рд▓рд┐рдП рдПрдХ, рджреВрд╕рд░реЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдХрд░реНрдиреЗрд▓ рдХрдВрд╕реЛрд▓ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕ рдореИрдиреБрдЕрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╛рджрджрд╛рд╢реНрдд рдХреЛ рдХрдо рдХрд░рдирд╛
рдбреАрдмрдЧрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп, рдкрд░рд┐рдХрд▓реНрдкрдирд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдХрднреА-рдХрднреА рдореЗрдЬрдмрд╛рди рд╕реЗ рд╕реАрдзреЗ рдмреВрдЯрд▓реЛрдбрд░ (рд╕реЙрд░реА) рдХреЛ рд░реИрдо рдореЗрдВ рд▓реЛрдб рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рдерд╛ред рд╢рд╛рдпрдж рдпрд╣ рд╕реАрдзреЗ рдЬреАрдбреАрдмреА рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ рдореИрдВ рд╕рд░рд▓ рддрд░реАрдХреЗ рд╕реЗ рдЧрдпрд╛: рдореИрдВрдиреЗ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдХреЛ рдЖрд╡рд╢реНрдпрдХ рдлрд╝рд╛рдЗрд▓ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдИ, рдПрд╕рдПрд╕рдПрдЪ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреЛрд░реНрдЯ 4444 (рдУрдкрдирдУрд╕реАрдбреА рд╕реЗ рдЯреЗрд▓рдиреЗрдЯ) рднреА рднреЗрдЬрд╛ рдФрд░ load_image
рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдЬрдм рдЖрдк рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдЬрдореЗ рд╣реБрдП рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рдпрд╣ рд╕реЛрддрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдмрд╕ рдзреАрд░реЗ-рдзреАрд░реЗ рдЭрдкрдХреА рд▓реЗрддрд╛ рд╣реИ" : рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдмрд╕ рдЗрд╕реЗ рдХреБрдЫ рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдХреА рдЧрддрд┐ рд╕реЗ рдХрд░рддрд╛ рд╣реИред
рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ
рд╕рдВрднрд╡рддрдГ, рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдбреАрдмрдЧ рдХрд░рддреЗ рд╕рдордп рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ рд╣рдореЗрд╢рд╛ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдореЗрдВ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдХрднреА-рдХрднреА рдПрдХ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╕реАрдзреЗ рдорд╢реАрди рдХреЛрдб рдореЗрдВ рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдирд┐рд░реНрджреЗрд╢ рд▓рд┐рдЦрдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╣реИ рдХрд┐ GDB рдореЗрдВ рдореЗрд░реЗ рдорд╛рдирдХ b
рдХрдорд╛рдВрдб рдиреЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ред рдпрд╣рд╛рдБ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
- рдЖрдк рдмреВрдЯреЙрдо рдХреЗ рдЕрдВрджрд░ рдПрдХ рдмрд┐рдВрджреБ рдирд╣реАрдВ рд░рдЦ рд╕рдХрддреЗ, рдХреНрдпреЛрдВрдХрд┐ рд░реЛрдо
- рдЖрдк рдПрд╕рдбреА рдХрд╛рд░реНрдб рд╕реЗ рд░реИрдо рдореЗрдВ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдХреЛрдб рдкрд░ рдПрдХ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЗрд╕реЗ рд▓реЛрдб рд╣реЛрдиреЗ рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЕрдиреНрдпрдерд╛, рд╣рдо рдХреЛрдб рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рд▓рд┐рдЦреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд▓реЛрдбрд░ рд╣рдорд╛рд░реЗ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗрдЧрд╛
рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЙрдирдХреА рд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рд╣реИред
рдХреНрд╡рд┐рдХ рдмреВрдЯреЙрдо рд╕реНрд╡реИрдк
рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдг рдореЗрдВ, рдЕрдХреНрд╕рд░ рдмреВрдЯреНрд░реЛрдо рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдФрд░ рдлрд┐рд░ рд╕реЗ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ: BootROM, FPGA рдореЗрдВ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рд╕рдВрд╢реНрд▓реЗрд╖рдг рдХрдИ рдорд┐рдирдЯреЛрдВ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ (рдФрд░ рдпрд╣ рд▓рдЧрднрдЧ рддреБрд░рдВрдд BootROM рдЫрд╡рд┐ рдХреЛ C рдФрд░ рдЕрд╕реЗрдВрдмрд▓рд░ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣реИ ...)ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рддреЗрдЬ рд╣реИ : рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдХреНрд░рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
- regenerate bootrom.mif (рдореИрдВрдиреЗ рдПрдЪрдИрдПрдХреНрд╕ рдХреЗ рдмрдЬрд╛рдп MIF рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ HEX рдХреЗ рд╕рд╛рде рдореБрдЭреЗ рд╣рдореЗрд╢рд╛ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВ, рдФрд░ MIF рджреЗрд╢реА рдСрд▓реНрдЯрд░ рдкреНрд░рд╛рд░реВрдк рд╣реИ)
- Quartus рдореЗрдВ
Processing -> Update Memory Initialization File
- рдЕрд╕реЗрдВрдмрд▓рд░ (рдЯрд╛рд╕реНрдХ рдХреЗ рдмрд╛рдПрдВ рдХреЙрд▓рдо рдореЗрдВ) рдкрд░, рдлрд┐рд░ рд╕реЗ рд╕реНрдЯрд╛рд░реНрдЯ рдХрд░реЗрдВ
рд╕рдм рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдм рдХреБрдЫ рдХреЗ рд▓рд┐рдП - рджрд╕рд┐рдпреЛрдВ рд╕реЗрдХрдВрдб рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗред
рдПрд╕рдбреА рдХрд╛рд░реНрдб рдХреА рддреИрдпрд╛рд░реА
рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдзреИрд░реНрдп рд░рдЦрдиреЗ рдФрд░ рд▓рдЧрднрдЧ 14 рдЬреАрдмреА рдбрд┐рд╕реНрдХ рд╕реНрдерд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
git clone https://github.com/sifive/freedom-u-sdk git submodule update --recursive --init make
рдлрд┐рд░ рдЖрдкрдХреЛ рдПрдХ рд╕рд╛рдл, рдпрд╛ рдмрд▓реНрдХрд┐ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рдЪреАрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдПрд╕рдбреА рдХрд╛рд░реНрдб, рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
sudo make DISK=/dev/sdX format-boot-loader
... рдЬрд╣рд╛рдВ sdX
рдХрд╛рд░реНрдб рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рдЙрдкрдХрд░рдг рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ: рдХрд╛рд░реНрдб рдкрд░ рдбреЗрдЯрд╛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рдореЗрдВ! рдпрд╣ рд╢рд╛рдпрдж рд╣реА sudo
рддрд╣рдд рдкреВрд░реА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рддрдм рд╕рднреА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХрд╛ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд╣реЛрдЧрд╛, рдФрд░ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЛ sudo
рд╕рдордп sudo
рддрд╣рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ред
рдкрд░рд┐рдгрд╛рдо рдЪрд╛рд░ рдЦрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде GPT рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдПрдХ рдХрд╛рд░реНрдб рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ uEnv.txt
рд╕рд╛рде FAT рдФрд░ FIT рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЪрд┐рддреНрд░ рд╣реИ (рдЗрд╕рдореЗрдВ рдХрдИ рдЙрдк-рдЫрд╡рд┐рдпрд╛рдВ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдбрд╛рдЙрдирд▓реЛрдб рдкрддреЗ рдХреЗ рд╕рд╛рде), рджреВрд╕рд░рд╛ рдЦрдВрдб рд░рд┐рдХреНрдд рд╣реИ, рдЗрд╕реЗ Ext4 рдореЗрдВ рд╕реНрд╡рд░реВрдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдПред рджреЛ рдФрд░ рдЦрдВрдб рдЧреБрдкреНрдд рд╣реИрдВ : рдпреВ-рдмреВрдЯ рдПрдХ рдкрд░ рд░рд╣рддрд╛ рд╣реИ (рдЗрд╕рдХреА рднрд░рдкрд╛рдИ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдЗрд╕реЗ рдмреВрдЯреНрд░реЛрдо рдореЗрдВ рд╡рд╛рдпрд░реНрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ), рджреВрд╕рд░реЗ рдкрд░, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд░рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рддрдХ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред
рд╕реНрддрд░ рдПрдХ, рдмреВрдЯреНрд░реЛрдо
рд▓реЛрдХ рдЬреНрдЮрд╛рди рдХрд╣рддрд╛ рд╣реИ: "рдпрджрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдПрдХ рдирдЦрд░реЗ рдХреЗ рд╕рд╛рде рдиреГрддреНрдп рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХреНрд╕ рдореЗрдВ - рдПрдХ рдЖрдЧ рдмреБрдЭрд╛рдиреЗ рд╡рд╛рд▓реЗ рдпрдВрддреНрд░ рдХреЗ рд╕рд╛рде рднреАред" рдпрд╣ рднреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдХ рдмрд╛рд░ рдореИрдВрдиреЗ рдмреЛрд░реНрдб рдХреЛ рд▓рдЧрднрдЧ рдЬрд▓рд╛ рджрд┐рдпрд╛ рдерд╛, рдпрд╣ рддрдп рдХрд░рддреЗ рд╣реБрдП рдХрд┐ "рдареАрдХ рд╣реИ, рдЬреАрдПрдирдбреА рдПрдХ рд╣реА рдирд┐рдореНрди рд╕реНрддрд░ рд╣реИ" (рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд░реЛрдХрдиреЗрд╡рд╛рд▓рд╛ рдЕрднреА рднреА рдЪреЛрдЯ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрд╛рдПрдЧрд╛ ...) рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рд╛рде рд╡рд╣рд╛рдВ рд╕реЗ рдирд╣реАрдВ рдмрдврд╝рддреЗ рд╣реИрдВ, рддрдм рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХреНрд╕ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░рдирд╛ рдмрдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ: рдЬрдм рдореИрдВрдиреЗ рдмреЛрд░реНрдб рдкрд░ рдХрдиреЗрдХреНрдЯрд░ рдХреЛ рдорд┐рд▓рд╛рдпрд╛, рддреЛ рдореИрдВ рдЕрднреА рднреА рд╕рдВрдкрд░реНрдХреЛрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рднрдВрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ - рд╡реАрдбрд┐рдпреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдорд┐рд▓рд╛рдк рд╕реАрдзреЗ рдкреВрд░реЗ рдХрдиреЗрдХреНрд╢рди рдореЗрдВ рдХреИрд╕реЗ рдлреИрд▓рддрд╛ рд╣реИ, рдмрд╕ рдЯрд╛рдВрдХрд╛ рд▓рдЧрд╛рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрд╣реЗ рдХреЛ рдЕрдВрджрд░ рдбрд╛рд▓ рджрд┐рдпрд╛, рдпрд╣ рдореЗрд░реЗ рдиреАрдЪреЗ рд╣реЛ рдЧрдпрд╛ред рдХрд┐рд╕реА рднреА рддрд░рд╣ред рдЦреИрд░, рд╢рд╛рдпрдж рдорд┐рд▓рд╛рдк рдЯрд╛рдВрдХрд╛ рд▓рдЧрд╛рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрд╣реЗ рдХреЗ рддрд╛рдкрдорд╛рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рдерд╛, рд╢рд╛рдпрдж рдХреБрдЫ рдФрд░ ... рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЬрдм рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рджрд░реНрдЬрди рд╕рдВрдкрд░реНрдХ рдереЗ, рдореИрдВрдиреЗ рдереВрдХ рджрд┐рдпрд╛, рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдФрд░ рдлрд┐рд░ рдПрдХ рд░рд╣рд╕реНрдпрдордп рдмрд╛рдд рд╢реБрд░реВ рд╣реБрдИ: рдореИрдВрдиреЗ UART рд╕реЗ RX / TX рдХрдиреЗрдХреНрдЯ рдХрд┐рдпрд╛, рдореИрдВ рдлрд░реНрдорд╡реЗрдпрд░ рд▓реЛрдб рдХрд░рддрд╛ рд╣реВрдВ - рдпрд╣ рд▓рд┐рдЦрддрд╛ рд╣реИ
INIT CMD0 ERROR
рдЦреИрд░, рд╕рдм рдХреБрдЫ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ - рдореИрдВрдиреЗ рдПрд╕рдбреА рдХрд╛рд░реНрдб рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рд╣рдо рд╕реНрдерд┐рддрд┐ рдХреЛ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ, рдлрд╝рд░реНрдорд╡реЗрдпрд░ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ ... рдФрд░ рдореМрди ... рдореИрдВрдиреЗ рдмрд╕ рдЕрдкрдирд╛ рджрд┐рдорд╛рдЧ рдирд╣реАрдВ рдмрджрд▓рд╛, рдФрд░ рдХрд╛рд╕реНрдХреЗрдЯ рдЕрднреА рдЦреЛрд▓рд╛: рдореЙрдбреНрдпреВрд▓ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╡реАрд╕реАрд╕реА рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдерд╛ред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореЙрдбреНрдпреВрд▓ рдиреЗ рдмрд┐рдЬрд▓реА рдХреЗ рд▓рд┐рдП 5 рд╡реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рджреЛ рдмрд╛рд░ рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд┐рдирд╛, рдореИрдВрдиреЗ рдмреЛрд░реНрдб рд╕реЗ рд╡рд┐рдкрд░реАрдд рджрд┐рд╢рд╛ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдПрдХ рддрд╛рд░ рдЦреАрдВрдЪ рджрд┐рдпрд╛ред рдирддреАрдЬрддрди, рдХреБрдЯрд┐рд▓ рдорд┐рд▓рд╛рдк рд╡рд╛рд▓реЗ рдХрдиреЗрдХреНрдЯрд░ рдореБрдбрд╝ рдЧрдП, рдФрд░ UART рд╕рдВрдкрд░реНрдХ рдмрд╕ рдЦреЛ рдЧрдпрд╛ред facepalm.jpg рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, "рдПрдХ рдмреБрд░рд╛ рд╕рд┐рд░ рдкреИрд░реЛрдВ рдХреЛ рдЖрд░рд╛рдо рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ", рдФрд░ рдХреБрдЯрд┐рд▓ рд╣рд╛рде - рд╕рд┐рд░ рдХреЛ ...
рдЕрдВрдд рдореЗрдВ, рдореИрдВрдиреЗ рдорд┐рдирд┐рдХреЙрдо рдкрд░ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд┐рдд рджреЗрдЦрд╛
INIT CMD0 CMD8 ACMD41 CMD58 CMD16 CMD18 LOADING /
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЪрд▓рддрд╛ рд╣реИ рд▓реЛрдбрд┐рдВрдЧ рдЗрдВрдбрд┐рдХреЗрдЯрд░ рдХрддрд╛рдИ рд╣реИред рдореБрдЭреЗ рд╕реАрдзреЗ рд╕реНрдХреВрд▓ рдХреЗ рд╡рд░реНрд╖реЛрдВ рдФрд░ рдПрдХ рдлреНрд▓реЙрдкреА рдбрд┐рд╕реНрдХ рд╕реЗ MinuetOS рдХреЗ рдЗрддреНрдореАрдирд╛рди рд╕реЗ рдмреВрдЯ рдХреА рдпрд╛рдж рдЖрддреА рд╣реИред рдЬрдм рддрдХ рдХрд┐ рдбреНрд░рд╛рдЗрд╡ рдкреАрд╕ рди рд╣реЛ рдЬрд╛рдПред
рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ BOOT рд╕рдВрджреЗрд╢ рдХреЗ рдмрд╛рдж рдХреБрдЫ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рддреЛ, рдпрд╣ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд░ OpenOCD рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ, рдЗрд╕реЗ рд╣реЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП GDB, рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, GDB рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рдиреЗ рд╕реЗ рддреБрд░рдВрдд рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ $pc
(рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛рдЙрдВрдЯрд░, рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдкрддрд╛) 0x0
рдЙрдбрд╝рд╛рди рднрд░рддрд╛ рд╣реИ - рдпрд╣ рд╕рдВрднрд╡рддрдГ рдПрдХ рдорд▓реНрдЯреАрдкрд▓ рдПрд░рд░ рдХреЗ рдмрд╛рдж рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, BOOT
рд╕рдВрджреЗрд╢ рдЬрд╛рд░реА рд╣реЛрдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рд╣рдо рдПрдХ рдЕрдирдВрдд рд▓реВрдк рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдпрд╣ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рдЙрд╕реЗ рджреЗрд░реА рдХрд░реЗрдЧрд╛ ...
diff --git a/bootrom/sdboot/sd.cb/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
рдкрд░ рд╕реНрдерд┐рдд рд╣реИ)ред

рдпрд╣ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдФрд░ рдХреНрдпрд╛ рдЙрдореНрдореАрдж рд╣реИ - рдПрдХ рдХрдареЛрд░ рдПрдореНрдмреЗрдбреЗрдб, рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рд╕реНрд░реЛрдд рд╣реИред рд▓реЗрдХрд┐рди рдЖрдЦрд┐рд░рдХрд╛рд░, рдЙрд╕ рд▓реЗрдЦ рдореЗрдВ, рд▓реЗрдЦрдХ рдиреЗ рдХреЛрдб рдХреЛ рдбреАрдмрдЧ рдХрд┐рдпрд╛ ... Krex-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.

рдХреЗрд╡рд▓ рдЖрдкрдХреЛ MIF рдлрд╝рд╛рдЗрд▓ рдФрд░ рдмрд┐рди рдирд╣реАрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдИрдПрд▓рдПрдл рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдгред
рдЕрдм, рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреЗ рд╕рд╛рде, рдЬрд╣рд╛рдВ рдирд┐рд╖реНрдкрд╛рджрди рдЬрд╛рд░реА рд░рд╣реЗрдЧрд╛ (рдпрд╣ рдПрдХ рдФрд░ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд▓реВрдк рдЕрдирдВрдд рд╣реИ)ред рдЯреАрдо
set variable $pc=0xADDR
рдЖрдкрдХреЛ рдЬрд╛рдиреЗ рдкрд░ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдореВрд▓реНрдп рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдкрддрд╛)ред рдЗрд╕рдХреА рдорджрдж рд╕реЗ, рдЖрдк рдореЗрдореЛрд░реА (рдФрд░ рдореЗрдореЛрд░реА-рдореИрдкреНрдб рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ) рдореЗрдВ рджрд░реНрдЬ рдорд╛рдиреЛрдВ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдЖрдпрд╛ (рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕рд╣реА рд╣реИ) рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ "рдЧрд▓рдд рд╕рд┐рд╕реНрдЯрдо рдХреА рдПрд╕рдбреА рдХрд╛рд░реНрдб рдЫрд╡рд┐ рд╣реИ", рдФрд░ рд╣рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреА рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ 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
рд╢рд╛рдпрдж рдпрд╣ рдЗрд╕ рддрдереНрдп рд╕реЗ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рдерд╛ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрдирд╛рд╡рд╢реНрдпрдХ 4Gb рдХрд╛рд░реНрдб рдирд╣реАрдВ рдерд╛, рдореИрдВрдиреЗ рдЗрд╕реЗ 2Gb рдкрд░ рд▓реЗ рд▓рд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ DEMO_END=11718750
рд╕рд╛рде DEMO_END=3078900
рд╕рд╛рде Makefile рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ (рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореВрд▓реНрдп рдореЗрдВ рдЕрд░реНрде рдХреА рддрд▓рд╛рд╢ рди рдХрд░реЗрдВ - рдпрд╣ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдЕрдм рдЫрд╡рд┐ рдХреЛ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ) рдХрд╛рд░реНрдб рдХреЗ рд▓рд┐рдП)ред
рд▓реЗрд╡рд▓ рдЯреВ, рдпреВ-рдмреВрдЯ
рдЕрдм рд╣рдо рдЕрднреА рднреА "рдЧрд┐рд░ рд░рд╣реЗ рд╣реИрдВ", рд▓реЗрдХрд┐рди рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 0x0000000080089a84
рдкрддреЗ рдкрд░ рд╣реИрдВред рдпрд╣рд╛рдВ рдореБрдЭреЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛: рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкреНрд░рд╕реНрддреБрддрд┐ "рд╕рднреА рд╕реНрдЯреЙрдкреНрд╕ рдХреЗ рд╕рд╛рде" рдирд╣реАрдВ рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ "рдмрд╛рдж рдореЗрдВ" рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдорд╛рд░реЗ SoC рд╕реЗ рд╕рд╣реА dtb рдлрд╝рд╛рдЗрд▓ рдбрд╛рд▓рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛, HiFive_U-Boot
CONFIG_SYS_TEXT_BASE=0x80089800
рдореЗрдВ 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
(рдпреВ-рдмреВрдЯ рдПрдВрдЯреНрд░реА рдкреЙрдЗрдВрдЯ) рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рд╣рдо рдЖрд╢рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдХреНрд░рдордг рд╕реЗ рдкрд╣рд▓реЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреА рд╕рд╣реА рд╕реЗрдЯрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред ... рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИ:
(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
рдЗрд╕рд▓рд┐рдП, рд╕реНрдЯреИрдХ рдкреЙрдЗрдВрдЯрд░, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмреЛрд▓рдирд╛: рдпрд╣ рдЖрдо рддреМрд░ рдкрд░ рд░реИрдо рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ (рдЬрдм рддрдХ рдХрд┐ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдЕрдиреБрд╡рд╛рдж рд╣реИ, рд▓реЗрдХрд┐рди рдЪрд▓реЛ рдПрдХ рд╕рд░рд▓ рд╡рд┐рдХрд▓реНрдк рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ)ред
рдЖрдЗрдП 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
рдкрд░ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ 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 %08lx\n", fmt@entry=0x800d4458 "exception code: %d , %s , epc %08x , ra %08lx\n", 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 %08lx\n", 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 %08lx\n", args=args@entry=0x881cc188) at lib/vsprintf.c:717 #5 0x00000000800ccb50 in printf (fmt=fmt@entry=0x800d4458 "exception code: %d , %s , epc %08x , ra %08lx\n") 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
ред рдХрд╛рд░рдг, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдБ рд╣реИ
рдореЗрд╣рд░рд╛рдм / riscv / рд╕реАрдкреАрдпреВ / 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.hb/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\0" /* 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 <anatoly.trosinenko@gmail.com> 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 рдмреЛрд░реНрдб рдкрд░, рдХреБрдЫ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрддреЗ рд╣реИрдВред рдпрд╣ рднреА рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдпреВ-рдмреВрдЯ рдХреЛрдиреНрдХрдлрд┐рдЧ рддрдВрддреНрд░ рджреНрд╡рд╛рд░рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк make menuconfig
рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдк рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкрд╛рда рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджреЗрдЦреЗрдВрдЧреЗ ?
рдЖрджрд┐ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рджреЛ рдмреЛрд░реНрдбреЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рддреАрд╕рд░реЗ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рдЕрдВрдзрд╛ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд╣рд╛рдВ рд╕реЗ рдХрд┐рд╕реА рднреА рдкрд╛рдереЛрд╕ рдкреАрдПрд▓рдПрд▓ рдкреБрди: рд╕рдВрдпреЛрдЬрди рдХреЛ рдмрд╛рд╣рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ (рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдХрд┐рд╕реА рддрд░рд╣ рдореЗрдЬрдмрд╛рди рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ PCIe рдирд┐рдпрдВрддреНрд░рдг рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдЯреАрдХ рдирд╣реАрдВ рд╣реИ), рдореБрдЭреЗ рдХреБрдЫ рдлрд░реНрдорд╡реЗрдпрд░ рдорд┐рд▓рд╛, рдЬреЛ рдХрд┐, рдпрджрд┐ рдордВрдЧрд▓ рдкрд░ рдореМрд╕рдо рд╕рд╣реА рд╣реИ рдЗрд╕рдиреЗ рдореБрдЭреЗ рдПрдХ UART рдореИрд╕реЗрдЬ рджрд┐рдпрд╛ рдХрд┐ рдХрд┐рд╕ рд╣реИрд╢ рд╕реЗ рдЗрд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдХрд┐рддрдирд╛ DRAM рд╣реИ (рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╣реЗрдбрд░ рдореЗрдВ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рджрд░реНрдЬ рднреА рдХреА рдереА)ред
рдпрд╣ рдЕрдлрд╝рд╕реЛрд╕ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рдж рдмреЛрд░реНрдб рдЖрдорддреМрд░ рдкрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ JTAG рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ, рдФрд░ SD рдХрд╛рд░реНрдб рд╕реЗ рдмреВрдЯ рдХрд░рдирд╛, рдЕрдлрд╕реЛрд╕, рдореЗрд░реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рддреЗрдЬрд╝ рдирд╣реАрдВ рд╣реИред рджреВрд╕рд░реА рдУрд░, рдХрднреА-рдХрднреА BootROM рдиреЗ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛, рдЬреЛ ERROR
рдмреВрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛, рдФрд░ U- рдмреВрдЯ рддреБрд░рдВрдд рдкреЙрдк рдЕрдк рд╣реЛ рдЧрдпрд╛ред рдпрд╣ рддрдм рдерд╛ рдХрд┐ рдпрд╣ рдореБрдЭ рдкрд░ рд╣рд╛рд╡реА рд╣реЛ рдЧрдпрд╛ рдерд╛: рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдмрд┐рдЯрд╕реНрдЯреНрд░реАрдо рдХреЛ рд░рд┐рдмреВрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореЗрдореЛрд░реА рдХреЛ 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
тАФ , environment. , ┬л ┬╗? ! : U-Boot 2^24 SD-, , , , , 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: if (c == '\e') { *esc = 1; *key = KEY_NONE; } break; case 1: if (c == '[') { ...
, : :
case DTSTimebase => BigInt(0)
тАж , ┬л тАФ 0┬╗. WithNBigCores
1MHz (, , U-Boot). , , : , 25MHz! . ┬л┬╗ ...
Hit any key to stop autoboot: 0 MMC_SPI: 0 at 0:1 hz 20000000 mode 0 ## Unknown partition table type 0 libfdt fdt_path_offset() returned FDT_ERR_NOTFOUND ** No partition table - mmc 0 ** ## Info: input data size = 34 = 0x22 Running uEnv.txt boot2... ## Error: "boot2" not defined HiFive-Unleashed #
! , , , , mmc_spi 1 10000000 0; mmc part
, SPI 20MHz 10MHz. рдХреНрдпреЛрдВ? , 20MHz, . , , , , : ( тАФ 25MHz) , . , 115200Hz UART- , , 25000000 20000000 1, .. 25MHz. , , , , - ( )тАж , тАФ , , . 25MHz тАФ 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
, , . . 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
тАФ host interface, tethered- ( ARM), - standalone. , , , :
void poweroff(uint16_t code) { printm("Power off\r\n"); finisher_exit(code); if (htif) { htif_poweroff(); } else { send_ipi_many(0, IPI_HALT); while (1) { asm volatile ("wfi\n"); } } }
:
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))
Linux kernel
, :
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 trap- тАФ .
Program received signal SIGTRAP, Trace/breakpoint trap. 0xffffffe0000024ca in ?? () (gdb) bt #0 0xffffffe0000024ca in ?? () Backtrace stopped: previous frame identical to this frame (corrupt stack?) (gdb) file work/linux/vmlinux A program is being debugged already. Are you sure you want to change the file? (y or n) y Reading symbols from work/linux/vmlinux...done. (gdb) bt #0 0xffffffe0000024ca in setup_smp () at /hdd/trosinenko/fpga/freedom-u-sdk/linux/arch/riscv/kernel/smpboot.c:75 #1 0x0000000000000000 in ?? () Backtrace stopped: frame did not save the PC
freedom-u-sdk/linux/arch/riscv/kernel/smpboot.c:
void __init setup_smp(void) { struct device_node *dn = NULL; int hart; bool found_boot_cpu = false; int cpuid = 1; while ((dn = of_find_node_by_type(dn, "cpu"))) { hart = riscv_of_processor_hartid(dn); if (hart < 0) continue; if (hart == cpuid_to_hartid_map(0)) { BUG_ON(found_boot_cpu); found_boot_cpu = 1; continue; } cpuid_to_hartid_map(cpuid) = hart; set_cpu_possible(cpuid, true); set_cpu_present(cpuid, true); cpuid++; } BUG_ON(!found_boot_cpu);
, CPU not found, running software emulation . running. .
atomic_t hart_lottery; unsigned long boot_cpu_hartid;
linux/arch/riscv/kernel/setup.c тАФ . , - , ...
.
. , , singlestep-.
( ):
