{"id":291755,"date":"2019-07-07T21:00:32","date_gmt":"2019-07-07T21:00:32","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=291755"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=291755","title":{"rendered":"\u0427\u0430\u0441\u0442\u044c 3: \u041f\u043e\u0447\u0442\u0438 \u0447\u0442\u043e \u0433\u0440\u0443\u0437\u0438\u043c Linux \u0441 SD-\u043a\u0430\u0440\u0442\u044b \u043d\u0430 RocketChip"},"content":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\">\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/4j\/fu\/lu\/4jfulumeapi32exqv7d6vnseaho.png\" width=\"45%\" align=\"left\"> \u0412 <a href=\"https:\/\/habr.com\/ru\/post\/456172\/\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438<\/a> \u0431\u044b\u043b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u0430\u043c\u044f\u0442\u0438, \u0430 \u0442\u043e\u0447\u043d\u0435\u0435 \u2014 \u043e\u0431\u0451\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 IP Core \u0438\u0437 Quartus, \u044f\u0432\u043b\u044f\u044e\u0449\u0430\u044f\u0441\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u043c \u043d\u0430 TileLink. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0436\u0435 \u0432 \u0440\u0443\u0431\u0440\u0438\u043a\u0435 \u00ab\u041f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c RocketChip \u043d\u0430 \u043c\u0430\u043b\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0443\u044e \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0443\u044e \u043f\u043b\u0430\u0442\u0443 \u0441 \u0426\u0438\u043a\u043b\u043e\u043d\u043e\u043c\u00bb \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0443\u044e \u043a\u043e\u043d\u0441\u043e\u043b\u044c. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0442\u044f\u043d\u0443\u043b\u0441\u044f: \u044f \u0443\u0436\u0435 \u0431\u044b\u043b\u043e \u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u043e-\u0431\u044b\u0441\u0442\u0440\u043e\u043c\u0443 \u0437\u0430\u043f\u0443\u0449\u0443 Linux, \u0438 \u043f\u043e\u0439\u0434\u0451\u043c \u0434\u0430\u043b\u044c\u0448\u0435, \u043d\u043e \u043d\u0435 \u0442\u0443\u0442 \u0442\u043e \u0431\u044b\u043b\u043e. \u0412 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 U-Boot, BBL, \u0438 \u0440\u043e\u0431\u043a\u0438\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 Linux kernel \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u041d\u043e \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0435\u0441\u0442\u044c \u2014 U-Boot-\u043e\u0432\u0441\u043a\u0430\u044f, \u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e-\u0442\u0430\u043a\u0438 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u0430\u044f, \u0438\u043c\u0435\u044e\u0449\u0430\u044f \u043c\u043d\u043e\u0433\u043e\u0435 \u0438\u0437 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432\u044b \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0435 \u043e\u0442 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u043a\u043e\u043d\u0441\u043e\u043b\u0438.<\/p>\n<p>  <\/p>\n<p>\u0412 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0441\u044f SD-\u043a\u0430\u0440\u0442\u0430, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u0430\u044f \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 SPI, \u0430 \u0442\u0430\u043a\u0436\u0435 UART. \u0412 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 BootROM \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043c\u0435\u043d\u0451\u043d \u0441 <code>xip<\/code> \u043d\u0430 <code>sdboot<\/code> \u0438, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0430\u0434\u0438\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 (\u043d\u0430 SD-\u043a\u0430\u0440\u0442\u0435).<\/p>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<h2 id=\"dopilivanie-apparatnoy-chasti\">\u0414\u043e\u043f\u0438\u043b\u0438\u0432\u0430\u043d\u0438\u0435 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/h2>\n<p>  <\/p>\n<p>\u0418\u0442\u0430\u043a, \u0437\u0430\u0434\u0430\u0447\u0430: \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u00ab\u0431\u043e\u043b\u044c\u0448\u043e\u0435\u00bb \u044f\u0434\u0440\u043e \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c UART (\u043e\u0442 Raspberry) \u0438 SD-\u0430\u0434\u0430\u043f\u0442\u0435\u0440 (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043d\u0435\u043a\u0430\u044f \u043f\u043b\u0430\u0442\u043a\u0430 \u043e\u0442 Catalex \u0441 \u0448\u0435\u0441\u0442\u044c\u044e \u043f\u0438\u043d\u0430\u043c\u0438: GND, VCC, MISO, MOSI, SCK, CS).<\/p>\n<p>  <\/p>\n<p>\u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u0432\u0441\u0451 \u0431\u044b\u043b\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e. \u041d\u043e \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u044d\u0442\u043e \u043e\u0441\u043e\u0437\u043d\u0430\u0442\u044c, \u043c\u0435\u043d\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0431\u0440\u043e\u0441\u0430\u043b\u043e \u0438\u0437 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443: \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0440\u0430\u0437\u0430 \u044f \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u0441\u043d\u043e\u0432\u0430 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0434\u043c\u0435\u0448\u0430\u0442\u044c \u0432 <code>System<\/code> \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435 <code>HasPeripheryUART<\/code> (\u0438 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e), \u0442\u043e \u0436\u0435 \u0434\u043b\u044f SD-\u043a\u0430\u0440\u0442\u044b \u2014 \u0438 \u0432\u0441\u0451 \u0431\u0443\u0434\u0435\u0442 \u0433\u043e\u0442\u043e\u0432\u043e. \u041f\u043e\u0442\u043e\u043c \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0430 \u043a\u0430\u043a \u0436\u0435 \u043e\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0432 \u00ab\u0441\u0435\u0440\u044c\u0451\u0437\u043d\u043e\u043c\u00bb \u0434\u0438\u0437\u0430\u0439\u043d\u0435. \u0422\u0430\u043a, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0442\u0443\u0442 \u0438\u0437 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u043e\u0433\u043e? Arty, \u0432\u0438\u0434\u0438\u043c\u043e, \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u2014 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043c\u043e\u043d\u0441\u0442\u0440 <code>unleahshed.DevKitConfigs<\/code>. \u0418 \u0432\u0434\u0440\u0443\u0433 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0442\u0430\u043c \u043f\u043e\u0432\u0441\u044e\u0434\u0443 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043e\u0432\u0435\u0440\u043b\u0435\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e \u043a\u043b\u044e\u0447\u0430\u043c. \u042f \u0434\u043e\u0433\u0430\u0434\u044b\u0432\u0430\u044e\u0441\u044c, \u0447\u0442\u043e \u044d\u0442\u043e, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u043e\u0447\u0435\u043d\u044c \u0433\u0438\u0431\u043a\u043e \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u043c\u043e, \u043d\u043e \u043c\u043d\u0435 \u0431\u044b \u0445\u043e\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u2026 <em>\u0410 \u0443 \u0432\u0430\u0441 \u043d\u0435\u0442 \u0442\u0430\u043a\u043e\u0433\u043e \u0436\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043f\u0440\u043e\u0449\u0435-\u043f\u043e\u043a\u043e\u0441\u0442\u044b\u043b\u044c\u043d\u0435\u0435?..<\/em> \u0422\u0443\u0442-\u0442\u043e \u044f \u0438 \u043d\u0430\u0442\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430 <code>vera.iofpga.FPGAChip<\/code> \u0434\u043b\u044f \u041f\u041b\u0418\u0421 Microsemi \u0438 <del>\u0442\u0443\u0442 \u0436\u0435 \u0440\u0430\u0441\u0442\u0430\u0449\u0438\u043b \u043d\u0430 \u0446\u0438\u0442\u0430\u0442\u044b<\/del> \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438, \u0431\u043b\u0430\u0433\u043e \u0442\u0443\u0442 \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0432\u0441\u044f \u00ab\u0440\u0430\u0437\u0432\u043e\u0434\u043a\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u044b\u00bb \u0432 \u043e\u0434\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435.<\/p>\n<p>  <\/p>\n<p>\u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 <code>System.scala<\/code> \u0441\u0442\u0440\u043e\u0447\u043a\u0438<\/p>\n<p>  <\/p>\n<pre><code class=\"scala\">class System(implicit p: Parameters) extends RocketSubsystem ...   with HasPeripherySPI   with HasPeripheryUART ... {   val tlclock = new FixedClockResource(\"tlclk\", p(DevKitFPGAFrequencyKey))   ... }  class SystemModule[+L &lt;: System](_outer: L)   extends RocketSubsystemModuleImp(_outer) ...     with HasPeripheryUARTModuleImp     with HasPeripheryGPIOModuleImp ...<\/code><\/pre>\n<p>  <\/p>\n<p>\u0421\u0442\u0440\u043e\u0447\u043a\u0430 \u0432 \u0442\u0435\u043b\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 <code>System<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0447\u0430\u0441\u0442\u043e\u0442\u0435, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u044d\u0442\u0430 \u0447\u0430\u0441\u0442\u044c \u043d\u0430\u0448\u0435\u0433\u043e SoC, \u0432 dts-\u0444\u0430\u0439\u043b. \u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044f \u043f\u043e\u043d\u0438\u043c\u0430\u044e, DTS\/DTB \u2014 \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u043e\u0433 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 plug-and-play \u0434\u043b\u044f \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432: \u0434\u0435\u0440\u0435\u0432\u043e dts-\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 dtb-\u0444\u0430\u0439\u043b \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u043e\u043c \u044f\u0434\u0440\u0443, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u043e \u043c\u043e\u0433\u043b\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u0443. \u0427\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0431\u0435\u0437 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u0441 <code>tlclock<\/code> \u0432\u0441\u0451 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u043d\u043e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c BootROM (\u043d\u0430\u043f\u043e\u043c\u043d\u044e, \u0442\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u0436\u0435 <code>sdboot<\/code>) \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u2014 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043e\u043d \u043f\u0430\u0440\u0441\u0438\u0442 dts-\u0444\u0430\u0439\u043b \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0445\u0435\u0434\u0435\u0440 \u0441 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u043c <code>TL_CLK<\/code>, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043e\u043d \u0441\u043c\u043e\u0436\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0438 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0434\u043b\u044f \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432.<\/p>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u00ab\u0440\u0430\u0437\u0432\u043e\u0434\u043a\u0443\u00bb:<\/p>\n<p>  <\/p>\n<p><strong>Platform.scala:<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"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 }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0426\u0435\u043f\u043e\u0447\u043a\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, \u0447\u0435\u0441\u0442\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u0430\u0449\u0438\u0449\u0430\u0442\u044c \u043e\u0442 <a href=\"https:\/\/habr.com\/ru\/post\/317514\/\">\u043c\u0435\u0442\u0430\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/a>. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432 <em>\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445<\/em> \u0431\u043b\u043e\u043a\u0430\u0445 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u044f \u0437\u0430\u0449\u0438\u0442\u0430, \u043d\u043e \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u00ab\u043d\u0430 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435\u00bb. \u0411\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0432\u043e\u043f\u0440\u043e\u0441 \u2014 \u043f\u043e\u0447\u0435\u043c\u0443 MISO \u0438 MOSI \u0432\u0438\u0441\u044f\u0442 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 <code>dq<\/code>? \u041e\u0442\u0432\u0435\u0442\u0430 \u044f \u043f\u043e\u043a\u0430 \u0442\u0430\u043a \u0438 \u043d\u0435 \u043d\u0430\u0448\u0451\u043b, \u043d\u043e, \u043f\u043e\u0445\u043e\u0436\u0435, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u0434 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u0442\u0430\u043a\u043e\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>  <\/p>\n<p>\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438, \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u043b \u0432\u044b\u0432\u043e\u0434\u044b \u0434\u0438\u0437\u0430\u0439\u043d\u0430 \u043d\u0430 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b \u043d\u0430 \u043a\u043e\u043b\u043e\u0434\u043a\u0435 \u0438 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0432\u0438\u043b \u0434\u0436\u0430\u043c\u043f\u0435\u0440 \u0432\u044b\u0431\u043e\u0440\u0430 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u0432 3.3V.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">SD-\u0430\u0434\u0430\u043f\u0442\u0435\u0440<\/b><\/p>\n<div class=\"spoiler_text\">\n<p>\u0412\u0438\u0434 \u0441\u0432\u0435\u0440\u0445\u0443:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/su\/zf\/q4\/suzfq4lwejcelmwt3rpk5w_min0.jpeg\">  <\/p>\n<p>\u0412\u0438\u0434 \u0441\u043d\u0438\u0437\u0443:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/y0\/__\/qq\/y0__qqavfhkikpsorvmzqhbamlw.jpeg\"><\/div>\n<\/div>\n<p>  <\/p>\n<h2 id=\"otladka-programmnoy-chasti-instrumenty\">\u041e\u0442\u043b\u0430\u0434\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438: \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b<\/h2>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e\u0431 \u0438\u043c\u0435\u044e\u0449\u0438\u0445\u0441\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0445 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0438 \u0438\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u0445.<\/p>\n<p>  <\/p>\n<h3 id=\"minicom\">Minicom<\/h3>\n<p>  <\/p>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043d\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u043d\u0443\u0436\u043d\u043e \u043a\u0430\u043a-\u0442\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0438 \u044f\u0434\u0440\u043e. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430 Linux (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 \u043d\u0430 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430 RaspberryPi) \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 Minicom. \u0412\u043e\u043e\u0431\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 \u043b\u044e\u0431\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b \u043f\u043e\u0440\u0442\u043e\u043c.<\/p>\n<p>  <\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0438\u043c\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u043e\u0440\u0442\u0430 \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u043a <code>-D \/dev\/ttyS0<\/code> \u2014 \u043f\u043e\u0441\u043b\u0435 \u043e\u043f\u0446\u0438\u0438 <code>-D<\/code>. \u041d\u0443 \u0438 \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f: \u0434\u043b\u044f \u0432\u044b\u0445\u043e\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 <code>Ctrl-A, X<\/code>. \u0423 \u043c\u0435\u043d\u044f \u043f\u0440\u0430\u0432\u0434\u0430 \u0431\u044b\u043b \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u0430 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u2014 \u0442\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0438\u0437 \u0441\u043e\u0441\u0435\u0434\u043d\u0435\u0433\u043e \u0441\u0435\u0430\u043d\u0441\u0430 SSH \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c <code>killall -KILL minicom<\/code>.<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u0442\u044c \u0438 \u0435\u0449\u0451 \u043e\u0434\u043d\u0430 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c. \u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u043d\u0430 RaspberryPi \u0435\u0441\u0442\u044c \u0434\u0432\u0430 UART, \u0438 \u043e\u0431\u0430 \u043f\u043e\u0440\u0442\u0430 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0443\u0436\u0435 \u0434\u043b\u044f \u0447\u0435\u0433\u043e-\u0442\u043e \u043f\u0440\u0438\u0441\u043f\u043e\u0441\u043e\u0431\u043b\u0435\u043d\u044b: \u043e\u0434\u0438\u043d \u0434\u043b\u044f Bluetooth, \u0447\u0435\u0440\u0435\u0437 \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u044f\u0434\u0440\u0430. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u044d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c <a href=\"https:\/\/www.raspberrypi.org\/documentation\/configuration\/uart.md\">\u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u043c\u0430\u043d\u0443\u0430\u043b\u0443<\/a>.<\/p>\n<p>  <\/p>\n<h3 id=\"perepisyvanie-pamyati\">\u041f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438<\/h3>\n<p>  <\/p>\n<p>\u041f\u0440\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0435, \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u044b \u043c\u043d\u0435 \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c <em>\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a<\/em> (\u0438\u0437\u0432\u0438\u043d\u0438\u0442\u0435) \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441 \u0445\u043e\u0441\u0442\u0430. \u041c\u043e\u0436\u0435\u0442, \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u044f\u043c\u043e \u0438\u0437 GDB, \u043d\u043e \u044f \u0432 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u0448\u0451\u043b \u043f\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u043c\u0443 \u043f\u0443\u0442\u0438: \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b \u043d\u0430 Raspberry \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0444\u0430\u0439\u043b, \u043f\u0440\u043e\u0431\u0440\u043e\u0441\u0438\u043b \u0447\u0435\u0440\u0435\u0437 SSH \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0440\u0442 4444 (telnet \u043e\u0442 OpenOCD) \u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>load_image<\/code>. \u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u0435\u0451 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0435, \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0447\u0442\u043e \u0432\u0441\u0451 \u0437\u0430\u0432\u0438\u0441\u043b\u043e, \u043d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 <em>\u00ab\u043e\u043d\u043e \u043d\u0435 \u0441\u043f\u0438\u0442, \u043e\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u043c\u043e\u0440\u0433\u0430\u0435\u0442\u00bb<\/em>: \u043e\u043d\u043e \u0433\u0440\u0443\u0437\u0438\u0442 \u0444\u0430\u0439\u043b, \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u0441\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0430\u0440\u0443 \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443.<\/p>\n<p>  <\/p>\n<h3 id=\"osobennosti-ustanovki-breakpoint-ov\">\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 breakpoint-\u043e\u0432<\/h3>\n<p>  <\/p>\n<p>\u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u043c\u043d\u043e\u0433\u0438\u043c \u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0435 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u043d\u043e \u0442\u043e\u0447\u043a\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u0442\u0430\u0432\u044f\u0442\u0441\u044f \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e. \u0418\u043d\u043e\u0433\u0434\u0430 \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 breakpoint-\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0432 \u043d\u0443\u0436\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e <strong>\u043f\u0440\u044f\u043c\u043e \u0432 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u043a\u043e\u0434<\/strong>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043a \u0443 \u043c\u0435\u043d\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <code>b<\/code> \u0432 GDB. \u0412\u043e\u0442, \u0447\u0442\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u043d\u0435\u043b\u044c\u0437\u044f \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u0447\u043a\u0443 \u0432\u043d\u0443\u0442\u0440\u0438 BootROM, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e ROM<\/li>\n<li>\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u0447\u043a\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 \u043d\u0430 \u043a\u043e\u0434, \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0439 \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043a\u0443 \u0441 SD-\u043a\u0430\u0440\u0442\u044b, \u043c\u043e\u0436\u043d\u043e, \u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435 \u043c\u044b \u043f\u0435\u0440\u0435\u043f\u0438\u0448\u0435\u043c \u043a\u0443\u0441\u043e\u0447\u0435\u043a \u043a\u043e\u0434\u0430, \u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u043f\u0435\u0440\u0435\u043f\u0438\u0448\u0435\u0442 \u043d\u0430\u0448 breakpoint<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0423\u0432\u0435\u0440\u0435\u043d, \u043c\u043e\u0436\u043d\u043e \u044f\u0432\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430, \u043d\u043e \u0438\u0445 \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e.<\/p>\n<p>  <\/p>\n<h3 id=\"bystraya-podmena-bootrom\">\u0411\u044b\u0441\u0442\u0440\u0430\u044f \u043f\u043e\u0434\u043c\u0435\u043d\u0430 BootROM<\/h3>\n<p>  <\/p>\n<p>\u041d\u0430 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043d\u0435\u0440\u0435\u0434\u043a\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c BootROM \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0435\u0449\u0451 \u0440\u0430\u0437\u043e\u043a. \u041d\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: BootROM \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u0434\u0438\u0437\u0430\u0439\u043d\u0430, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u043e\u0433\u043e \u0432 \u041f\u041b\u0418\u0421, \u0430 \u0435\u0433\u043e \u0441\u0438\u043d\u0442\u0435\u0437 \u2014 \u0434\u0435\u043b\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u0438\u043d\u0443\u0442 (\u0438 \u044d\u0442\u043e-\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0447\u0442\u0438 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0441\u0430\u043c\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430 BootROM \u0438\u0437 C \u0438 Assembler&#8230;). \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432\u0441\u0451 <strong>\u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435<\/strong>: \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0442\u0430\u043a\u0430\u044f:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u043f\u0435\u0440\u0435\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c bootrom.mif (\u044f \u043f\u0435\u0440\u0435\u0448\u0451\u043b \u043d\u0430 MIF \u0432\u043c\u0435\u0441\u0442\u043e HEX, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441 HEX \u0443 \u043c\u0435\u043d\u044f \u0432\u0435\u0447\u043d\u043e \u0431\u044b\u043b\u0438 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u0430 MIF \u2014 \u0440\u043e\u0434\u043d\u043e\u0439 \u0410\u043b\u044c\u0442\u0435\u0440\u043e\u0432\u0441\u043a\u0438\u0439 \u0444\u043e\u0440\u043c\u0430\u0442)<\/li>\n<li>\u0432 Quartus \u0441\u043a\u0430\u0437\u0430\u0442\u044c <code>Processing -&gt; Update Memory Initialization File<\/code><\/li>\n<li>\u043d\u0430 \u043f\u0443\u043d\u043a\u0442\u0435 Assembler (\u0432 \u043b\u0435\u0432\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 Tasks) \u0441\u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0432\u0430\u0442\u044c Start again<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041d\u0430 \u0432\u0441\u0451 \u043f\u0440\u043e \u0432\u0441\u0451 \u2014 \u043f\u0430\u0440\u0430 \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0441\u0435\u043a\u0443\u043d\u0434.<\/p>\n<p>  <\/p>\n<h2 id=\"podgotovka-sd-karty\">\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 SD-\u043a\u0430\u0440\u0442\u044b<\/h2>\n<p>  <\/p>\n<p>\u0422\u0443\u0442 \u0432\u0441\u0451 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e, \u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0430\u0441\u0442\u0438\u0441\u044c \u0442\u0435\u0440\u043f\u0435\u043d\u0438\u0435\u043c \u0438 \u043e\u043a\u043e\u043b\u043e 14Gb \u043c\u0435\u0441\u0442\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">git clone https:\/\/github.com\/sifive\/freedom-u-sdk git submodule update --recursive --init make<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0447\u0438\u0441\u0442\u0443\u044e, \u0430 \u0442\u043e\u0447\u043d\u0435\u0435, \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0443\u044e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e\u0433\u043e, SD-\u043a\u0430\u0440\u0442\u0443, \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">sudo make DISK=\/dev\/sdX format-boot-loader<\/code><\/pre>\n<p>  <\/p>\n<p>\u2026 \u0433\u0434\u0435 <code>sdX<\/code> \u2014 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u043e\u0435 \u043a\u0430\u0440\u0442\u0435. <strong>\u0412\u041d\u0418\u041c\u0410\u041d\u0418\u0415: \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043a\u0430\u0440\u0442\u0435 \u0431\u0443\u0434\u0443\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u044b, \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0438 \u0432\u043e\u043e\u0431\u0449\u0435!<\/strong> \u0412\u0440\u044f\u0434 \u043b\u0438 \u0441\u0442\u043e\u0438\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u044e \u0441\u0431\u043e\u0440\u043a\u0443 \u0438\u0437-\u043f\u043e\u0434 <code>sudo<\/code>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0442\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b \u0441\u0431\u043e\u0440\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442\u044c <code>root<\/code>, \u0438 \u0441\u0431\u043e\u0440\u043a\u0443 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0437-\u043f\u043e\u0434 <code>sudo<\/code> \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e.<\/p>\n<p>  <\/p>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430, \u0440\u0430\u0437\u043c\u0435\u0447\u0435\u043d\u043d\u0430\u044f \u0432 GPT \u0441 \u0447\u0435\u0442\u044b\u0440\u044c\u043c\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0430\u043c\u0438, \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 FAT \u0441 <code>uEnv.txt<\/code> \u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 FIT (\u043e\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0437\u043e\u0432, \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438), \u0434\u0440\u0443\u0433\u043e\u0439 \u0440\u0430\u0437\u0434\u0435\u043b \u2014 \u0447\u0438\u0441\u0442\u044b\u0439, \u0435\u0433\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 Ext4 \u0434\u043b\u044f \u041b\u0438\u043d\u0443\u043a\u0441\u0430. \u0415\u0449\u0451 \u0434\u0432\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u2014 <em>\u0437\u0430\u0433\u0430\u0434\u043e\u0447\u043d\u044b\u0435<\/em>: \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0436\u0438\u0432\u0451\u0442 U-Boot (\u0435\u0433\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044f \u043f\u043e\u043d\u0438\u043c\u0430\u044e, \u0437\u0430\u0448\u0438\u0442\u043e \u0432 BootROM), \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c, \u043f\u043e\u0445\u043e\u0436\u0435, \u0436\u0438\u0432\u0443\u0442 \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f, \u043d\u043e \u044f \u0438\u0445 \u043f\u043e\u043a\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e.<\/p>\n<p>  <\/p>\n<h2 id=\"uroven-pervyy-bootrom\">\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u0435\u0440\u0432\u044b\u0439, BootROM<\/h2>\n<p>  <\/p>\n<p>\u041d\u0430\u0440\u043e\u0434\u043d\u0430\u044f \u043c\u0443\u0434\u0440\u043e\u0441\u0442\u044c \u0433\u043b\u0430\u0441\u0438\u0442: \u00ab\u0415\u0441\u043b\u0438 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0431\u044b\u0432\u0430\u044e\u0442 \u043f\u043b\u044f\u0441\u043a\u0438 \u0441 \u0431\u0443\u0431\u043d\u043e\u043c, \u0442\u043e \u0432 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u0435 \u2014 \u0435\u0449\u0451 \u0438 \u0441 \u043e\u0433\u043d\u0435\u0442\u0443\u0448\u0438\u0442\u0435\u043b\u0435\u043c\u00bb. \u0420\u0435\u0447\u044c \u0434\u0430\u0436\u0435 \u043d\u0435 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u044f \u0447\u0443\u0442\u044c \u043d\u0435 \u0441\u043f\u0430\u043b\u0438\u043b \u043f\u043b\u0430\u0442\u0443, \u0440\u0435\u0448\u0438\u0432, \u0447\u0442\u043e \u00ab\u041d\u0443 GND \u2014 \u044d\u0442\u043e \u0436\u0435 \u0442\u043e\u0442 \u0436\u0435 \u043d\u0438\u0437\u043a\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c\u00bb <em>(\u0432\u0438\u0434\u0438\u043c\u043e, \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043d\u0435 \u043f\u043e\u043c\u0435\u0448\u0430\u043b \u0431\u044b&#8230;)<\/em> \u0420\u0435\u0447\u044c \u0441\u043a\u043e\u0440\u0435\u0435 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0440\u0443\u043a\u0438 \u0440\u0430\u0441\u0442\u0443\u0442 \u043d\u0435 \u043e\u0442\u0442\u0443\u0434\u0430, \u0442\u043e \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u0430 \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0451\u0442 \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u0442\u044c \u0441\u044e\u0440\u043f\u0440\u0438\u0437\u044b: \u043f\u0440\u0438\u043f\u0430\u0438\u0432\u0430\u044f \u0440\u0430\u0437\u044a\u0451\u043c \u043d\u0430 \u043f\u043b\u0430\u0442\u0443, \u044f \u0442\u0430\u043a \u0438 \u043d\u0435 \u0441\u0443\u043c\u0435\u043b \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u043f\u0430\u044f\u0442\u044c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b \u2014 \u043d\u0430 \u0432\u0438\u0434\u0435\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442, \u043a\u0430\u043a \u043f\u0440\u0438\u043f\u043e\u0439 \u043f\u0440\u044f\u043c\u043e \u0441\u0430\u043c \u0440\u0430\u0441\u0442\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044e, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u044f\u043b\u044c\u043d\u0438\u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0438, \u0443 \u043c\u0435\u043d\u044f \u0436\u0435 \u043e\u043d \u00ab\u043d\u0430\u0448\u043b\u0451\u043f\u044b\u0432\u0430\u043b\u0441\u044f\u00bb \u043a\u0430\u043a \u043f\u043e\u043f\u0430\u043b\u043e. \u041d\u0443, \u043c\u043e\u0436\u0435\u0442, \u043f\u0440\u0438\u043f\u043e\u0439 \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u043b \u0434\u043b\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u043f\u0430\u044f\u043b\u044c\u043d\u0438\u043a\u0430, \u043c\u043e\u0436\u0435\u0442, \u0435\u0449\u0451 \u0447\u0442\u043e\u2026 \u0412 \u043e\u0431\u0449\u0435\u043c, \u0443\u0432\u0438\u0434\u0435\u0432, \u0447\u0442\u043e \u0434\u0435\u0441\u044f\u0442\u043e\u043a \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 \u0443 \u043c\u0435\u043d\u044f \u0443\u0436\u0435 \u0435\u0441\u0442\u044c, \u044f \u043f\u043b\u044e\u043d\u0443\u043b, \u0438 \u043d\u0430\u0447\u0430\u043b \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c. \u0418 \u0442\u0443\u0442 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c <em>\u0437\u0430\u0433\u0430\u0434\u043e\u0447\u043d\u043e\u0435<\/em>: \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b RX\/TX \u043e\u0442 UART-\u0430, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u2014 \u043e\u043d\u043e \u043f\u0438\u0448\u0435\u0442<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">INIT CMD0 ERROR<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u0443, \u0432\u0441\u0451 \u043b\u043e\u0433\u0438\u0447\u043d\u043e \u2014 \u043c\u043e\u0434\u0443\u043b\u044c SD-\u043a\u0430\u0440\u0442\u044b \u044f \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b. \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u0433\u0440\u0443\u0437\u0438\u043c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443\u2026 \u0418 \u0442\u0438\u0448\u0438\u043d\u0430\u2026 \u0427\u0435\u0433\u043e \u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0443\u043c\u0430\u043b, \u0430 \u043b\u0430\u0440\u0447\u0438\u043a-\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u043b\u0441\u044f: \u043e\u0434\u0438\u043d \u0438\u0437 \u0432\u044b\u0432\u043e\u0434\u043e\u0432 \u043c\u043e\u0434\u0443\u043b\u044f \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u0430 VCC. \u0412 \u043c\u043e\u0451\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043e\u0434\u0443\u043b\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b 5V \u0434\u043b\u044f \u043f\u0438\u0442\u0430\u043d\u0438\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f, \u043d\u0435\u0434\u043e\u043b\u0433\u043e \u0434\u0443\u043c\u0430\u044f, \u0432\u043e\u0442\u043a\u043d\u0443\u043b \u043f\u0440\u043e\u0432\u043e\u0434, \u0442\u044f\u043d\u0443\u0432\u0448\u0438\u0439\u0441\u044f \u043e\u0442 \u043c\u043e\u0434\u0443\u043b\u044f, \u043d\u0430 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u043f\u043b\u0430\u0442\u044b. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043a\u0440\u0438\u0432\u043e \u043f\u0440\u043e\u043f\u0430\u044f\u043d\u043d\u044b\u0439 \u0440\u0430\u0437\u044a\u0451\u043c \u043f\u0435\u0440\u0435\u043a\u043e\u0441\u0438\u043b\u0441\u044f, \u0438 <strong>\u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0442\u0435\u0440\u044f\u043b\u0441\u044f \u043a\u043e\u043d\u0442\u0430\u043a\u0442 UART.<\/strong> <em>facepalm.jpg<\/em> \u0412 \u043e\u0431\u0449\u0435\u043c, \u00ab\u0434\u0443\u0440\u043d\u0430\u044f \u0433\u043e\u043b\u043e\u0432\u0430 \u043d\u043e\u0433\u0430\u043c \u043f\u043e\u043a\u043e\u044f \u043d\u0435 \u0434\u0430\u0451\u0442\u00bb, \u0430 \u043a\u0440\u0438\u0432\u044b\u0435 \u0440\u0443\u043a\u0438 \u2014 \u0433\u043e\u043b\u043e\u0432\u0435&#8230;<\/p>\n<p>  <\/p>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u044f \u0443\u0432\u0438\u0434\u0438\u043b \u0432 Minicom \u0434\u043e\u043b\u0433\u043e\u0436\u0434\u0430\u043d\u043d\u043e\u0435<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">INIT CMD0 CMD8 ACMD41 CMD58 CMD16 CMD18 LOADING \/<\/code><\/pre>\n<p>  <\/p>\n<p>\u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, <del>\u043e\u043d\u043e \u0448\u0435\u0432\u0435\u043b\u0438\u0442\u0441\u044f<\/del> \u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438. \u041f\u0440\u044f\u043c\u043e \u0432\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u0448\u043a\u043e\u043b\u044c\u043d\u044b\u0435 \u0433\u043e\u0434\u044b \u0438 \u043d\u0435\u0441\u043f\u0435\u0448\u043d\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 MinuetOS \u0441 \u0434\u0438\u0441\u043a\u0435\u0442\u044b. \u0420\u0430\u0437\u0432\u0435 \u0447\u0442\u043e \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0434 \u043d\u0435 \u0441\u043a\u0440\u0435\u0436\u0435\u0449\u0435\u0442.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f BOOT \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0438\u0447\u0435\u0433\u043e. \u0417\u043d\u0430\u0447\u0438\u0442, \u0441\u0430\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u0447\u0435\u0440\u0435\u0437 OpenOCD \u043d\u0430 Raspberry, \u043a \u043d\u0435\u043c\u0443 GDB \u043d\u0430 \u0445\u043e\u0441\u0442\u0435, \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u0436\u0435 \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435.<\/p>\n<p>  <\/p>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e GDB \u0442\u0443\u0442 \u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e, \u0447\u0442\u043e <code>$pc<\/code> (program counter, \u0430\u0434\u0440\u0435\u0441 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438) \u0443\u043b\u0435\u0442\u0430\u0435\u0442 \u0432 <code>0x0<\/code> \u2014 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0441\u043b\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0434\u0430\u0447\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f <code>BOOT<\/code> \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0446\u0438\u043a\u043b. <em>\u042d\u0442\u043e \u0435\u0433\u043e \u043d\u0435\u043d\u0430\u0434\u043e\u043b\u0433\u043e \u0437\u0430\u0434\u0435\u0440\u0436\u0438\u0442&#8230;<\/em><\/p>\n<p>  <\/p>\n<pre><code class=\"diff\">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;  }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u043e\u0439 \u0445\u0438\u0442\u0440\u044b\u0439 \u043a\u043e\u0434 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u00ab\u0434\u043b\u044f \u043d\u0430\u0434\u0451\u0436\u043d\u043e\u0441\u0442\u0438\u00bb: \u044f \u0433\u0434\u0435-\u0442\u043e \u0441\u043b\u044b\u0448\u0430\u043b, \u0447\u0442\u043e, \u0432\u0440\u043e\u0434\u0435 \u0431\u044b, \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u2014 \u044d\u0442\u043e Undefined Behavior, \u0430 \u0442\u0443\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0432\u0440\u044f\u0434 \u043b\u0438 \u0434\u043e\u0433\u0430\u0434\u0430\u0435\u0442\u0441\u044f (\u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e, \u0447\u0442\u043e \u043f\u043e <code>0x10000<\/code> \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f BootROM).<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/wj\/xw\/a9\/wjxwa9m9hqoghtvy79zsbysctr0.png\" alt=\"\u041e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u0435\u0441\u0442\u044c, \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 \u043d\u0435\u0442\"><\/p>\n<p>  <\/p>\n<p>\u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u0430 \u0447\u0442\u043e \u0435\u0449\u0451 \u043e\u0436\u0438\u0434\u0430\u0442\u044c \u2014 \u0441\u0443\u0440\u043e\u0432\u044b\u0439 embedded, \u043a\u0430\u043a\u0438\u0435 \u0443\u0436 \u0442\u0443\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438. \u041d\u043e \u0432\u0435\u0434\u044c \u0432 <a href=\"https:\/\/habr.com\/ru\/post\/454208\/\">\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u0430\u0432\u0442\u043e\u0440 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u043b \u0441\u0438\u0448\u043d\u044b\u0439 \u043a\u043e\u0434\u2026 \u041a\u0440\u0435\u043a\u0441-\u0444\u0435\u043a\u0441-\u043f\u0435\u043a\u0441:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">(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.<\/code><\/pre>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ya\/08\/zp\/ya08zpufla55qz02j5fhwcoijy4.png\" alt=\"\u0415\u0441\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438!\"><\/p>\n<p>  <\/p>\n<p>\u0422\u043e\u043b\u044c\u043a\u043e \u043d\u0443\u0436\u043d\u043e \u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043d\u0435 MIF-\u0444\u0430\u0439\u043b \u0438 \u043d\u0435 bin, \u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 ELF.<\/p>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0441 \u044d\u043d\u043d\u043e\u0439 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0443\u0433\u0430\u0434\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441, \u0433\u0434\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0441\u044f (\u044d\u0442\u043e \u0435\u0449\u0451 \u043e\u0434\u043d\u0430 \u043f\u0440\u0438\u0447\u0438\u043d\u0430, \u043f\u043e\u0447\u0435\u043c\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u043b \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0446\u0438\u043a\u043b \u2014 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439). \u041a\u043e\u043c\u0430\u043d\u0434\u0430<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">set variable $pc=0xADDR<\/code><\/pre>\n<p>  <\/p>\n<p>\u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u043d\u0430 \u0445\u043e\u0434\u0443 (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 \u0430\u0434\u0440\u0435\u0441 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438). \u0421 \u0435\u0451 \u0436\u0435 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c (\u0438 memory-mapped \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b).<\/p>\n<p>  <\/p>\n<p>\u0412 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u044f \u043f\u0440\u0438\u0448\u0451\u043b \u043a \u0432\u044b\u0432\u043e\u0434\u0443 (\u043d\u0435 \u0443\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c\u0443), \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u00ab\u043e\u0431\u0440\u0430\u0437 sd-\u043a\u0430\u0440\u0442\u044b \u043d\u0435 \u0442\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b\u00bb, \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u043e \u043d\u0435 \u043d\u0430 \u0441\u0430\u043c\u043e\u0435 \u043d\u0430\u0447\u0430\u043b\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 \u043d\u0430 <code>0x89800<\/code> \u0431\u0430\u0439\u0442\u043e\u0432 \u0434\u0430\u043b\u044c\u0448\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"diff\">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<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0430 \u044d\u0442\u043e\u043c \u0442\u0430\u043a\u0436\u0435 \u0441\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0442\u043e, \u0447\u0442\u043e \u043d\u0435 \u0438\u043c\u0435\u044f \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439 \u043d\u0435\u043d\u0443\u0436\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u043d\u0430 4Gb, \u044f \u0432\u0437\u044f\u043b \u043d\u0430 2Gb \u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0442\u044b\u043a\u0430 \u0437\u0430\u043c\u0435\u043d\u0438\u043b \u0432 Makefile <code>DEMO_END=11718750<\/code> \u043d\u0430 <code>DEMO_END=3078900<\/code> (\u043d\u0435 \u0438\u0449\u0438\u0442\u0435 \u0441\u043c\u044b\u0441\u043b \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u2014 \u0435\u0433\u043e \u043d\u0435\u0442, \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u0431\u0440\u0430\u0437 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443).<\/p>\n<p>  <\/p>\n<h2 id=\"uroven-vtoroy-u-boot\">\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u0432\u0442\u043e\u0440\u043e\u0439, U-Boot<\/h2>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0432\u0441\u0451 \u0435\u0449\u0451 \u00ab\u043f\u0430\u0434\u0430\u0435\u043c\u00bb, \u043d\u043e \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u0441\u044f \u0443\u0436\u0435 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <code>0x0000000080089a84<\/code>. \u0422\u0443\u0442 \u044f \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d \u043f\u0440\u0438\u0437\u043d\u0430\u0442\u044c\u0441\u044f: \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0438\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u0434\u0451\u0442 \u043d\u0435 \u00ab\u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\u043c\u0438\u00bb, \u0430 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u0443\u0436\u0435 \u00ab\u043e\u043f\u043e\u0441\u043b\u044f\u00bb, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0434\u0435\u0441\u044c \u044f \u0443\u0436\u0435 \u0443\u0441\u043f\u0435\u043b \u043f\u043e\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 dtb-\u0444\u0430\u0439\u043b \u043e\u0442 \u043d\u0430\u0448\u0435\u0433\u043e SoC, \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 <code>HiFive_U-Boot<\/code> \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>CONFIG_SYS_TEXT_BASE=0x80089800<\/code> (\u0432\u043c\u0435\u0441\u0442\u043e <code>0x08000000<\/code>), \u0447\u0442\u043e\u0431\u044b \u0430\u0434\u0440\u0435\u0441 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u043b \u0441 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c. \u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0442\u0435\u043f\u0435\u0440\u044c \u0443\u0436\u0435 <del>\u043a\u0430\u0440\u0442\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f<\/del> \u0434\u0440\u0443\u0433\u043e\u0439 \u043e\u0431\u0440\u0430\u0437:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">(gdb) file ..\/freedom-u-sdk\/work\/HiFive_U-Boot\/u-boot (gdb) tui en<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418 \u0432\u0438\u0434\u0438\u043c:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">   \u2502304     \/*                                               \u2502    \u2502305      * trap entry                                    \u2502    \u2502306      *\/                                              \u2502    \u2502307     trap_entry:                                      \u2502    \u2502308         addi sp, sp, -32*REGBYTES                    \u2502   &gt;\u2502309         SREG x1, 1*REGBYTES(sp)                      \u2502    \u2502310         SREG x2, 2*REGBYTES(sp)                      \u2502    \u2502311         SREG x3, 3*REGBYTES(sp)                      \u2502<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u0438\u0447\u0451\u043c \u043c\u044b \u043f\u0440\u044b\u0433\u0430\u0435\u043c \u043c\u0435\u0436\u0434\u0443 \u0441\u0442\u0440\u043e\u0447\u043a\u0430\u043c\u0438 308 \u0438 309. \u0418 \u043d\u0435\u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f, \u0447\u0442\u043e \u0432 <code>$sp<\/code> \u043b\u0435\u0436\u0438\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>0xfffffffe31cdc0a0<\/code>. \u0423\u0432\u044b, \u043e\u043d\u043e \u0435\u0449\u0451 \u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u00ab\u0443\u0431\u0435\u0433\u0430\u0435\u0442\u00bb \u0438\u0437-\u0437\u0430 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 307. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u0447\u043a\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 \u043d\u0430 <code>trap_entry<\/code>, \u0430 \u043f\u043e\u0442\u043e\u043c \u0441\u043d\u043e\u0432\u0430 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 <code>0x80089800<\/code> (\u0442\u043e\u0447\u043a\u0443 \u0432\u0445\u043e\u0434\u0430 U-Boot), \u0438 \u0431\u0443\u0434\u0435\u043c \u043d\u0430\u0434\u0435\u044f\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043e\u043d\u043e \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043f\u0435\u0440\u0435\u0434 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u043c\u2026 \u041f\u043e\u0445\u043e\u0436\u0435, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">(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<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0430\u043a \u0441\u0435\u0431\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0441\u0442\u0435\u043a\u0430, \u043f\u0440\u044f\u043c\u043e \u0441\u043a\u0430\u0436\u0435\u043c: \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435 \u043c\u0438\u043c\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043a\u0438 (\u0435\u0441\u043b\u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0443 \u043d\u0430\u0441 \u0435\u0449\u0451 \u043d\u0435\u0442 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u0430\u0434\u0440\u0435\u0441\u043e\u0432, \u043d\u043e \u0431\u0443\u0434\u0435\u043c \u043d\u0430\u0434\u0435\u044f\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442).<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 <code>0x881cf950<\/code>. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043c \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e <code>handle_trap<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0443\u0445\u043e\u0434\u0438\u043c \u0432 <code>_exit_trap<\/code> \u0441 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c <code>epc=2148315240<\/code> (\u0432 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u043e\u043c \u0432\u0438\u0434\u0435):<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">(gdb) x\/10i 2148315240    0x800cb068 &lt;strnlen+12&gt;:     lbu     a4,0(a5)    0x800cb06c &lt;strnlen+16&gt;:     bnez    a4,0x800cb078 &lt;strnlen+28&gt;    0x800cb070 &lt;strnlen+20&gt;:     sub     a0,a5,a0    0x800cb074 &lt;strnlen+24&gt;:     ret    0x800cb078 &lt;strnlen+28&gt;:     addi    a5,a5,1    0x800cb07c &lt;strnlen+32&gt;:     j       0x800cb064 &lt;strnlen+8&gt;    0x800cb080 &lt;strdup&gt;: addi    sp,sp,-32    0x800cb084 &lt;strdup+4&gt;:       sd      s0,16(sp)    0x800cb088 &lt;strdup+8&gt;:       sd      ra,24(sp)    0x800cb08c &lt;strdup+12&gt;:      li      s0,0<\/code><\/pre>\n<p>  <\/p>\n<p>\u0421\u0442\u0430\u0432\u0438\u043c breakpoint \u043d\u0430 <code>strnlen<\/code>, \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0438 \u0432\u0438\u0434\u0438\u043c:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">(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=&lt;optimized out&gt;, precision=&lt;optimized out&gt;, flags=&lt;optimized out&gt;) 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=&lt;optimized out&gt;, epc=2148315240, code=&lt;optimized out&gt;) at arch\/riscv\/lib\/interrupts.c:92 #7  handle_trap (mcause=&lt;optimized out&gt;, epc=&lt;optimized out&gt;, regs=&lt;optimized out&gt;) 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<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u0445\u043e\u0436\u0435, <code>_exit_trap<\/code> \u0445\u043e\u0447\u0435\u0442 \u0432\u044b\u0434\u0430\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u0440\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u0435\u0434\u0448\u0435\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, <em>\u043d\u043e \u0443 \u043d\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f<\/em>. \u0422\u0430\u043a, \u0447\u0442\u043e-\u0442\u043e \u0443 \u043d\u0430\u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043e\u043f\u044f\u0442\u044c \u043d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f. <code>set directories ..\/freedom-u-sdk\/HiFive_U-Boot\/<\/code> \u041e! \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f!<\/p>\n<p>  <\/p>\n<p>\u0427\u0442\u043e \u0436\u0435, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0435\u0449\u0451 \u0440\u0430\u0437, \u0438 \u0443\u0432\u0438\u0434\u0438\u043c \u043f\u043e \u0441\u0442\u0435\u043a-\u0442\u0440\u0435\u0439\u0441\u0443 \u043f\u0440\u0438\u0447\u0438\u043d\u0443 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u0432\u044b\u0437\u0432\u0430\u0432\u0448\u0435\u0439 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 (<code>mcause == 5<\/code>). \u0415\u0441\u043b\u0438 \u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e <a href=\"https:\/\/riscv.org\/specifications\/privileged-isa\/\">\u0437\u0434\u0435\u0441\u044c<\/a> \u043d\u0430 \u0441\u0442\u0440. 37, \u0442\u043e \u044d\u0442\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 <code>Load access fault<\/code>. \u041f\u0440\u0438\u0447\u0438\u043d\u0430, \u043f\u043e-\u0432\u0438\u0434\u0438\u043c\u043e\u043c\u0443, \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u043e\u0442 \u0437\u0434\u0435\u0441\u044c<\/p>\n<p>  <\/p>\n<p><strong>arch\/riscv\/cpu\/HiFive\/start.S:<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">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 &lt;-- boot_flags = 0 *\/     la t5, board_init_f     jr t5       \/* jump to board_init_f() *\/ <\/code><\/pre>\n<p>  <\/p>\n<p><code>$sp<\/code> \u0438\u043c\u0435\u0435\u0442 \u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0438 \u0432\u043d\u0443\u0442\u0440\u0438 <code>board_init_f_init_reserve<\/code> \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0430. \u041f\u043e\u0445\u043e\u0436\u0435, \u0432\u043e\u0442 \u0438 \u0432\u0438\u043d\u043e\u0432\u043d\u0438\u043a: \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0441 \u043d\u0435\u0434\u0432\u0443\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <code>CONFIG_SYS_INIT_SP_ADDR<\/code>. \u041e\u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 \u0432 \u0444\u0430\u0439\u043b\u0435 <code>HiFive_U-Boot\/include\/configs\/HiFive-U540.h<\/code>. \u0412 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u0434\u0430\u0436\u0435 \u043f\u043e\u0434\u0443\u043c\u0430\u043b, \u0430 \u043c\u043e\u0436\u0435\u0442, \u043d\u0443 \u0435\u0433\u043e, \u0434\u043e\u043f\u0438\u043b\u0438\u0432\u0430\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u043f\u043e\u0434 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u2014 \u043c\u043e\u0436\u0435\u0442, \u043b\u0435\u0433\u0447\u0435 \u0447\u0443\u0442\u044c \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440? \u041d\u043e \u043f\u043e\u0442\u043e\u043c \u044f \u0443\u0432\u0438\u0434\u0435\u043b, \u0447\u0442\u043e \u044d\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442 \u043e\u0442 \u043d\u0435 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u0437\u0430-<code>#if 0<\/code>-\u0435\u043d\u043d\u044b\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043f\u043e\u0434 \u0434\u0440\u0443\u0433\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043f\u0430\u043c\u044f\u0442\u0438, \u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a:<\/p>\n<p>  <\/p>\n<pre><code class=\"diff\">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\\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 *\/<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e <del>\u043a\u043e\u0441\u0442\u044b\u043b\u0435\u0439<\/del> <a href=\"https:\/\/bash.im\/quote\/443602\">\u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043a\u0440\u0435\u043f\u0435\u0436\u0430<\/a> \u0434\u043e\u0441\u0442\u0438\u0433\u043b\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u0442\u043c\u0435\u0442\u043a\u0438. \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043c\u0443\u0447\u0430\u0432\u0448\u0438\u0441\u044c, \u044f \u043f\u0440\u0438\u0448\u0451\u043b \u043a \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u043f\u043e\u0440\u0442 \u043d\u0430 \u0441\u0432\u043e\u044e \u043f\u043b\u0430\u0442\u0443. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0434 \u043d\u0430\u0448\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0444\u0430\u0439\u043b\u043e\u0432.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041d\u0443, \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0432\u043e\u0442 \u0441\u0442\u043e\u043b\u0435\u0447\u043a\u043e<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"plaintext\">trosinenko@trosinenko-pc:\/hdd\/trosinenko\/fpga\/freedom-u-sdk\/HiFive_U-Boot$ git show --name-status commit 39cd67d59c16ac87b46b51ac1fb58f16f1eb1048 (HEAD -&gt; zeowaa-1gb) Author: Anatoly Trosinenko &lt;anatoly.trosinenko@gmail.com&gt; 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<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 <a href=\"https:\/\/github.com\/atrosinenko\/HiFive_U-Boot\/commit\/352b5d1e7891f5e6dbbc77b9c96f5e62ef28fbc2\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a>.<\/p>\n<\/div>\n<\/div>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u043d\u0430 \u044d\u0442\u043e\u0439 SiFive-\u043e\u0432\u0441\u043a\u043e\u0439 \u043f\u043b\u0430\u0442\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0438\u043c\u0435\u044e\u0442 \u0434\u0440\u0443\u0433\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430. \u0410 \u0435\u0449\u0451 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e U-Boot \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0443\u0436\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u043c \u043f\u043e \u044f\u0434\u0440\u0443 Linux \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u043c Kconfig \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0432\u0430\u0442\u044c <code>make menuconfig<\/code>, \u0438 \u043f\u0435\u0440\u0435\u0434 \u0432\u0430\u043c\u0438 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0441 \u043f\u043e\u043a\u0430\u0437\u043e\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u043e <code>?<\/code> \u0438 \u0442.\u0434. \u0412 \u043e\u0431\u0449\u0435\u043c, \u0441\u043b\u0435\u043f\u0438\u0432 \u0438\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0439 \u0434\u0432\u0443\u0445 \u043f\u043b\u0430\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u0440\u0435\u0442\u044c\u0435\u0439, \u0432\u044b\u043a\u0438\u043d\u0443\u0432 \u043e\u0442\u0442\u0443\u0434\u0430 \u0432\u0441\u044f\u043a\u0438\u0435 \u043f\u0430\u0444\u043e\u0441\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 PLL (\u0432\u0438\u0434\u0438\u043c\u043e, \u044d\u0442\u043e \u043a\u0430\u043a-\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0441 \u0445\u043e\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u043f\u043e PCIe, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0442\u043e\u0447\u043d\u043e), \u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0433\u043e\u0434\u0435 \u043d\u0430 \u041c\u0430\u0440\u0441\u0435 \u0432\u044b\u0434\u0430\u0432\u0430\u043b\u0430 \u043c\u043d\u0435 \u043f\u043e UART \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e \u0442\u043e\u043c, \u0438\u0437 \u043a\u0430\u043a\u043e\u0433\u043e \u0445\u0435\u0448\u0430 \u043a\u043e\u043c\u043c\u0438\u0442\u0430 \u043e\u043d\u0430 \u0441\u043e\u0431\u0440\u0430\u043d\u0430, \u0438 \u043e \u0442\u043e\u043c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443 \u043c\u0435\u043d\u044f DRAM (\u043d\u043e \u044d\u0442\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u044f \u0441\u0430\u043c \u0436\u0435 \u0432 \u0445\u0435\u0434\u0435\u0440\u0435 \u0438 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043b).<\/p>\n<p>  <\/p>\n<p>\u0416\u0430\u043b\u044c \u0442\u043e\u043b\u044c\u043a\u043e, \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u043b\u0430\u0442\u0430 \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0432\u0430\u043b\u0430 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u043f\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u043e\u043c\u0443 JTAG, \u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441 SD-\u043a\u0430\u0440\u0442\u044b \u2014 \u0434\u0435\u043b\u043e, \u0443\u0432\u044b, \u0432 \u043c\u043e\u0435\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043d\u0435 \u0431\u044b\u0441\u0442\u0440\u043e\u0435. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0438\u043d\u043e\u0433\u0434\u0430 BootROM \u0432\u044b\u0434\u0430\u0432\u0430\u043b \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u0447\u0442\u043e <code>ERROR<\/code>, \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f, \u0438 \u0442\u0443\u0442 \u0436\u0435 \u0432\u044b\u0441\u043a\u0430\u043a\u0438\u0432\u0430\u043b U-Boot. \u0422\u0443\u0442-\u0442\u043e \u0434\u043e \u043c\u0435\u043d\u044f \u0438 \u0434\u043e\u0448\u043b\u043e: \u0432\u0438\u0434\u0438\u043c\u043e, \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 bitstream \u0432 \u041f\u041b\u0418\u0421 \u043f\u0430\u043c\u044f\u0442\u044c \u043d\u0435 \u043f\u0435\u0440\u0435\u0442\u0438\u0440\u0430\u0435\u0442\u0441\u044f, \u043d\u0435 \u0443\u0441\u043f\u0435\u0432\u0430\u0435\u0442 \u00ab\u0440\u0430\u0441\u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f\u00bb \u0438 \u0442.\u0434. \u041a\u043e\u0440\u043e\u0447\u0435, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f <code>LOADING \/<\/code> \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u043e\u043c \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0432\u0430\u0442\u044c <code>set variable $pc=0x80089800<\/code>, \u043c\u0438\u043d\u0443\u044f \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u044d\u0442\u0443 \u0434\u043e\u043b\u0433\u0443\u044e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 (\u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438, \u0447\u0442\u043e \u043e\u043d\u043e \u0432 \u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u0440\u0430\u0437 \u0441\u043b\u043e\u043c\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0430\u043d\u043e, \u0438 \u043d\u0435 \u0443\u0441\u043f\u0435\u043b\u043e \u043f\u043e\u0432\u0435\u0440\u0445 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0447\u0442\u043e-\u0442\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c).<\/p>\n<p>  <\/p>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438, \u0430 \u044d\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u043d\u0430\u043f\u0440\u043e\u0447\u044c \u0432\u0438\u0441\u043d\u0435\u0442, \u0438 \u043a \u043d\u0435\u043c\u0443 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f JTAG-\u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u0441 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">Error: unable to halt hart 0 Error:   dmcontrol=0x80000001 Error:   dmstatus =0x00030c82<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0430\u043a, \u043f\u043e\u0441\u0442\u043e\u0439\u0442\u0435! \u042f \u044d\u0442\u043e \u0443\u0436\u0435 \u0432\u0438\u0434\u0435\u043b! \u0427\u0442\u043e-\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438 \u0434\u0435\u0434\u043b\u043e\u043a\u0435 TileLink, \u0430 \u0430\u0432\u0442\u043e\u0440\u0443 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 \u044f \u043a\u0430\u043a-\u0442\u043e \u043d\u0435 \u0434\u043e\u0432\u0435\u0440\u044f\u044e \u2014 \u0441\u0430\u043c \u0436\u0435 \u043f\u0438\u0441\u0430\u043b\u2026 \u0412\u043d\u0435\u0437\u0430\u043f\u043d\u043e, \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u0436\u0435 \u0443\u0434\u0430\u0447\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u044f \u0443\u0432\u0438\u0434\u0435\u043b:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">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<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u0430 \u044d\u0442\u0443 \u0441\u0442\u0440\u0430\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u043f\u0435\u0440\u0435\u0434 <code>In: serial<\/code> \u043d\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0439\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u2014 \u044d\u0442\u043e \u044f \u043f\u044b\u0442\u0430\u043b\u0441\u044f \u043d\u0430 \u0432\u0438\u0441\u043d\u0443\u0449\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435 \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043b\u0438 \u043e\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 environment. \u0427\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u00ab\u0423\u0436\u0435 \u0434\u0435\u0441\u044f\u0442\u044c \u043c\u0438\u043d\u0443\u0442 \u0442\u0430\u043a \u0432\u0438\u0441\u0438\u0442\u00bb? \u041e\u043d\u043e \u0445\u043e\u0442\u044f \u0431\u044b \u0441\u0443\u043c\u0435\u043b\u043e \u0440\u0435\u043b\u043e\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u043e\u043c\u0443 \u043c\u0435\u043d\u044e! \u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435: \u0445\u043e\u0442\u044c U-Boot \u0438 \u0433\u0440\u0443\u0437\u0438\u0442\u0441\u044f \u0432 \u0447\u0438\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u044b\u0445 2^24 \u0431\u0430\u0439\u0442 \u0441 SD-\u043a\u0430\u0440\u0442\u044b, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0432\u0448\u0438\u0441\u044c, \u043e\u043d \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0441\u0435\u0431\u044f <del>\u043a\u0443\u0434\u0430 \u043f\u043e\u0434\u0430\u043b\u044c\u0448\u0435<\/del> \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443, \u0442\u043e \u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u043c\u0443 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u0445\u0435\u0434\u0435\u0440\u0435, \u0442\u043e \u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0432 \u0441\u0442\u0430\u0440\u0448\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u0440\u0435\u043b\u043e\u043a\u0430\u0446\u0438\u044e ELF-\u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0442\u0443\u0434\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435. \u0422\u0430\u043a \u0432\u043e\u0442: \u043f\u043e\u0445\u043e\u0436\u0435, \u044d\u0442\u043e\u0442 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u0440\u043e\u0448\u043b\u0438 \u0438 \u0431\u043e\u043d\u0443\u0441\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440, \u043d\u0435 \u0432\u0438\u0441\u043d\u0443\u0449\u0438\u0439 \u043d\u0430\u043c\u0435\u0440\u0442\u0432\u043e \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e.<\/p>\n<p>  <\/p>\n<p>\u0418\u0442\u0430\u043a, \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0430\u0439\u043c\u0435\u0440? \u041f\u043e\u0445\u043e\u0436\u0435, \u0447\u0430\u0441\u044b \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u043d\u0435 \u0438\u0434\u0443\u0442&#8230;<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">(gdb) x\/x 0x0200bff8 0x200bff8:      0x00000000<\/code><\/pre>\n<p>  <\/p>\n<p>\u0410 \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u0441\u0442\u0440\u0435\u043b\u043a\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u043e\u043a\u0440\u0443\u0442\u0438\u0442\u044c?<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">(gdb) set variable *0x0200bff8=310000000 (gdb) c<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u043e\u0433\u0434\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">Hit any key to stop autoboot:  0 MMC_SPI: 0 at 0:1 hz 20000000 mode 0<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412\u044b\u0432\u043e\u0434: \u0447\u0430\u0441\u044b \u043d\u0435 \u0438\u0434\u0443\u0442. \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0436\u0435 \u0438 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0432\u043e\u0434 \u0441 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b:<\/p>\n<p>  <\/p>\n<p><strong>HiFive_U-Boot\/cmd\/bootmenu.c:<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">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 == '[') { ...<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 <abbr title=\"\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0435\u0442, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u044d\u0442\u043e\u043c, \u0441\u043c. \u0434\u0430\u043b\u044c\u0448\u0435\">\u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0432 \u0442\u043e\u043c<\/abbr>, \u0447\u0442\u043e \u044f \u043c\u0430\u043b\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0443\u0434\u0440\u0438\u043b: \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0432 \u043a\u043e\u043d\u0444\u0438\u0433 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u043a\u043b\u044e\u0447:<\/p>\n<p>  <\/p>\n<pre><code class=\"scala\">  case DTSTimebase =&gt; BigInt(0)<\/code><\/pre>\n<p>  <\/p>\n<p>\u2026 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u044f\u0441\u044c \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0431\u044b\u043b\u043e \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u00ab\u0435\u0441\u043b\u0438 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442\u0435 \u2014 \u043e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 0\u00bb. \u0418 \u0432\u0435\u0434\u044c <code>WithNBigCores<\/code> \u043a\u0430\u043a \u0440\u0430\u0437 \u043f\u0440\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u043e \u0435\u0433\u043e \u0432 1MHz (\u043a\u0430\u043a, \u043a\u0441\u0442\u0430\u0442\u0438, \u0438 \u0431\u044b\u043b\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435 U-Boot). \u041d\u043e \u044f \u0436\u0435, \u0431\u043b\u0438\u043d, \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u044b\u0439 \u0438 \u0434\u043e\u0442\u043e\u0448\u043d\u044b\u0439: \u0442\u0430\u043c \u044f \u043d\u0435 \u0437\u043d\u0430\u044e, \u0442\u0443\u0442 25MHz! \u0412 \u0438\u0442\u043e\u0433\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0423\u0431\u0440\u0430\u043b \u0441\u0432\u043e\u0438 \u00ab\u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f\u00bb \u0438&#8230;<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">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 #<\/code><\/pre>\n<p>  <\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u0434\u0430\u0436\u0435 \u0432\u0432\u043e\u0434\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b! \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043a\u043e\u0432\u044b\u0440\u044f\u0432\u0448\u0438\u0441\u044c, \u043c\u043e\u0436\u043d\u043e, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f \u0432\u0432\u0435\u0441\u0442\u0438 <code>mmc_spi 1 10000000 0; mmc part<\/code>, \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0432 \u0447\u0430\u0441\u0442\u043e\u0442\u0443 SPI \u0441 20MHz \u0434\u043e 10MHz. \u041f\u043e\u0447\u0435\u043c\u0443? \u041d\u0443, \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435 \u0431\u044b\u043b\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430 20MHz, \u043e\u043d\u0430 \u0436\u0435 \u0442\u0430\u043c \u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430. \u041d\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044f \u043f\u043e\u043d\u044f\u043b, \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u0437\u0434\u0435\u0441\u044c, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0442\u0430\u043a: \u043a\u043e\u0434 \u0434\u0435\u043b\u0438\u0442 \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 (\u0443 \u043c\u0435\u043d\u044f \u2014 \u0432\u0435\u0437\u0434\u0435 25MHz) \u043d\u0430 \u0446\u0435\u043b\u0435\u0432\u0443\u044e, \u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0435\u0435\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0434\u043b\u044f 115200Hz UART-\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e, \u0442\u043e \u0435\u0441\u043b\u0438 \u043d\u0430\u0446\u0435\u043b\u043e \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c 25000000 \u043d\u0430 20000000 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f 1, \u0442.\u0435. \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0430 25MHz. \u041c\u043e\u0436\u0435\u0442, \u044d\u0442\u043e \u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u043d\u043e \u0435\u0441\u043b\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442, \u0437\u043d\u0430\u0447\u0438\u0442, \u044d\u0442\u043e \u043a\u043e\u043c\u0443-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0443\u0436\u043d\u043e (\u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0442\u043e\u0447\u043d\u043e)\u2026 \u0412 \u043e\u0431\u0449\u0435\u043c, \u043b\u0435\u0433\u0447\u0435 \u043f\u0440\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438 \u043f\u043e\u0439\u0442\u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u2014 \u0434\u0430\u043b\u0435\u043a\u043e \u0438, \u0443\u0432\u044b, \u043d\u0430\u0434\u043e\u043b\u0433\u043e. 25MHz \u2014 \u044d\u0442\u043e \u0432\u0430\u043c \u043d\u0435 Core i9.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0412\u044b\u0432\u043e\u0434 \u043a\u043e\u043d\u0441\u043e\u043b\u0438<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"plaintext\">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<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<p>\u041e\u043a\u0435\u0439, \u043c\u044b \u043f\u0440\u043e\u0448\u043b\u0438 \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c, \u043d\u043e \u043e\u043d\u043e \u0432\u0441\u0451 \u0435\u0449\u0451 \u0437\u0430\u0432\u0438\u0441\u0430\u0435\u0442. \u0410 \u0438\u043d\u043e\u0433\u0434\u0430 \u0435\u0449\u0451 \u0438 \u0441\u044b\u043f\u043b\u0435\u0442 \u044d\u043a\u0441\u0435\u043f\u0448\u0435\u043d\u0430\u043c\u0438. \u0423\u0432\u0438\u0434\u0435\u0442\u044c mcause \u043c\u043e\u0436\u043d\u043e, \u043f\u043e\u0434\u043a\u0430\u0440\u0430\u0443\u043b\u0438\u0432 \u043a\u043e\u0434 \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443 <code>$pc<\/code> \u0438 \u043f\u043e\u0441\u043b\u0435 <code>si<\/code> \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043d\u0430 <code>trap_entry<\/code>. \u0421\u0430\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0438\u0437 U-Boot \u0443\u043c\u0435\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f mcause = 0..4, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0433\u043e\u0442\u043e\u0432\u044c\u0442\u0435\u0441\u044c \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435. \u0422\u0443\u0442 \u044f \u043f\u043e\u043b\u0435\u0437 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433, \u0441\u0442\u0430\u043b \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u0436\u0435 \u044f \u043c\u0435\u043d\u044f\u043b, \u0438 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043b: \u0442\u0430\u043c \u0436\u0435 \u0432 <code>conf\/rvboot-fit.txt<\/code> \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">fitfile=image.fit # below much match what's in FIT (ugha)<\/code><\/pre>\n<p>  <\/p>\n<p>\u0427\u0442\u043e \u0436\u0435, \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043c \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435, \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u044f\u0434\u0440\u0430 \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u0430\u043a, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u043d\u0438\u044f, \u0447\u0442\u043e <code>SIF0<\/code> \u2014 \u044d\u0442\u043e <abbr title=\"\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0435\u0442, \u043a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0434\u0430\u043b\u044c\u0448\u0435\">\u0432\u044b\u0432\u043e\u0434 \u043a\u0443\u0434\u0430-\u0442\u043e \u043f\u043e PCIe<\/abbr>:<\/p>\n<p>  <\/p>\n<pre><code class=\"diff\">-bootargs=console=ttySIF0,921600 debug +bootargs=console=ttyS0,125200 debug<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418 \u0434\u043e \u043a\u0443\u0447\u0438 \u043f\u043e\u043c\u0435\u043d\u044f\u0435\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0445\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441 SHA-256 \u043d\u0430 MD5: \u043a\u0440\u0438\u043f\u0442\u043e\u0441\u0442\u043e\u0439\u043a\u043e\u0441\u0442\u0438 \u043c\u043d\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e (\u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435, \u043f\u0440\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0435), \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u043d\u043e \u0436\u0443\u0442\u043a\u043e \u0434\u043e\u043b\u0433\u043e, \u0430 \u0434\u043b\u044f \u043e\u0442\u043b\u043e\u0432\u0430 \u043e\u0448\u0438\u0431\u043e\u043a \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0438 MD5 \u2014 \u0437\u0430 \u0433\u043b\u0430\u0437\u0430. \u0427\u0442\u043e \u0436\u0435 \u0432 \u0438\u0442\u043e\u0433\u0435? \u041f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043c\u044b \u0441\u0442\u0430\u043b\u0438 \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 (\u0437\u0430 \u0441\u0447\u0451\u0442 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0445\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f), \u0438 \u043e\u0442\u043a\u0440\u044b\u043b\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">...    Verifying Hash Integrity ... md5+ OK    Loading loadables from 0x90a5a758 to 0x82000000 libfdt fdt_check_header(): FDT_ERR_BADMAGIC chosen {         linux,initrd-end = &lt;0x00000000 0x83000000&gt;;         linux,initrd-start = &lt;0x00000000 0x82000000&gt;;         riscv,kernel-end = &lt;0x00000000 0x80a00000&gt;;         riscv,kernel-start = &lt;0x00000000 0x80200000&gt;;         bootargs = \"debug console=tty0 console=ttyS0,125200 root=\/dev\/mmcblk0p2 rootwait\"; }; libfdt fdt_path_offset() returned FDT_ERR_NOTFOUND chosen {         linux,initrd-end = &lt;0x00000000 0x83000000&gt;;         linux,initrd-start = &lt;0x00000000 0x82000000&gt;;         riscv,kernel-end = &lt;0x00000000 0x80a00000&gt;;         riscv,kernel-start = &lt;0x00000000 0x80200000&gt;;         bootargs = \"debug console=tty0 console=ttyS0,125200 root=\/dev\/mmcblk0p2 rootwait\"; };    Loading Kernel Image ... OK Booting kernel in 3<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u044b \u043d\u0435 \u0442\u0438\u043a\u0430\u044e\u0442&#8230;<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">(gdb) x\/x 0x0200bff8 0x200bff8:      0x00000000<\/code><\/pre>\n<p>  <\/p>\n<p>\u0423\u043f\u0441, \u043f\u043e\u0445\u043e\u0436\u0435, \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0445\u043e\u0434\u0430 \u0447\u0430\u0441\u043e\u0432 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043f\u043b\u0430\u0446\u0435\u0431\u043e, \u0445\u043e\u0442\u044f \u043c\u043d\u0435 \u0442\u043e\u0433\u0434\u0430 \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043f\u043e\u043c\u043e\u0433\u043b\u043e. \u041d\u0435\u0442, \u043f\u043e\u0447\u0438\u043d\u0438\u0442\u044c, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043d\u0430\u0434\u043e, \u043d\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u043a\u0440\u0443\u0442\u0438\u043c \u0441\u0442\u0440\u0435\u043b\u043a\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">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.<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c&#8230;<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">   Loading Kernel Image ... OK Booting kernel in 3 2 1 0 ## Starting application at 0x80000000 ...<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u0435\u0442 \u0443\u0436, \u043f\u043e\u0439\u0434\u0443 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0445\u043e\u0434 \u0447\u0430\u0441\u043e\u0432 \u2014 \u0430 \u0442\u043e, \u043c\u043e\u0436\u0435\u0442, \u043e\u043d \u0442\u0430\u043c \u0442\u0430\u0439\u043c\u0435\u0440 \u043a\u0430\u043b\u0438\u0431\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0437\u0434\u0443\u043c\u0430\u0435\u0442!<\/p>\n<p>  <\/p>\n<p>\u0410 \u0430\u0434\u0440\u0435\u0441 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0442\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u0443\u0434\u0430-\u0442\u043e \u0432<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">0000000080001c20 &lt;poweroff&gt;:     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 &lt;softfloat_countLeadingZeros8+0x558&gt;     80001c2e:   e406                    sd      ra,8(sp)     80001c30:   f7fff0ef                jal     ra,80001bae &lt;printm&gt;     80001c34:   8522                    mv      a0,s0     80001c36:   267000ef                jal     ra,8000269c &lt;finisher_exit&gt;     80001c3a:   00010797                auipc   a5,0x10     80001c3e:   41e78793                addi    a5,a5,1054 # 80012058 &lt;htif&gt;     80001c42:   639c                    ld      a5,0(a5)     80001c44:   c399                    beqz    a5,80001c4a &lt;poweroff+0x2a&gt;     80001c46:   72c000ef                jal     ra,80002372 &lt;htif_poweroff&gt;     80001c4a:   45a1                    li      a1,8     80001c4c:   4501                    li      a0,0     80001c4e:   dc7ff0ef                jal     ra,80001a14 &lt;send_ipi_many&gt;     80001c52:   10500073                wfi     80001c56:   bff5                    j       80001c52 &lt;poweroff+0x32&gt;<\/code><\/pre>\n<p>  <\/p>\n<p>\u0432\u043d\u0443\u0442\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0432\u0448\u0435\u0433\u043e\u0441\u044f Berkeley Boot Loader. \u041b\u0438\u0447\u043d\u043e \u043c\u0435\u043d\u044f \u0432 \u044d\u0442\u043e\u043c \u0441\u043c\u0443\u0449\u0430\u0435\u0442 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435 <code>htif<\/code> \u2014 host interface, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u0434\u043b\u044f tethered-\u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u044f\u0434\u0440\u0430 (\u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u043a\u043e\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 \u0445\u043e\u0441\u0442\u043e\u0432\u044b\u043c ARM), \u044f-\u0442\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u043b standalone. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0435\u0441\u043b\u0438 \u043d\u0430\u0439\u0442\u0438 \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445, \u0442\u043e \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043d\u0435 \u0432\u0441\u0451 \u0442\u0430\u043a \u043f\u043b\u043e\u0445\u043e:<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">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\"); }   } }<\/code><\/pre>\n<p>  <\/p>\n<h2 id=\"kvest-zapusti-chasy\">\u041a\u0432\u0435\u0441\u0442: \u0437\u0430\u043f\u0443\u0441\u0442\u0438 \u0447\u0430\u0441\u044b<\/h2>\n<p>  <\/p>\n<p>\u041f\u043e\u0438\u0441\u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0432 CLINT \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u043d\u0430\u0441 \u043a<\/p>\n<p>  <\/p>\n<pre><code class=\"scala\">    val io = IO(new Bundle {       val rtcTick = Bool(INPUT)     })      val time = RegInit(UInt(0, width = timeWidth))     when (io.rtcTick) { time := time + UInt(1) }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 RTC, \u043b\u0438\u0431\u043e \u0432 \u0437\u0430\u0433\u0430\u0434\u043e\u0447\u043d\u043e\u043c MockAON, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u0443\u0434\u0438\u043b: \u00ab\u0422\u0430\u043a, \u0447\u0442\u043e \u044d\u0442\u043e \u0443 \u043d\u0430\u0441 \u0442\u0443\u0442? \u041d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e? \u041e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c!\u00bb \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u043d\u0435 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u0437\u0430 \u0442\u0430\u043a\u0442\u043e\u0432\u0430\u044f \u043c\u0430\u0433\u0438\u044f \u0442\u0430\u043c \u0442\u0432\u043e\u0440\u0438\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e \u044d\u0442\u0443 \u043b\u043e\u0433\u0438\u043a\u0443 \u0432 <code>System.scala<\/code>:<\/p>\n<p>  <\/p>\n<pre><code class=\"scala\">  val rtcDivider = RegInit(0.asUInt(16.W)) \/\/ \u043d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0443 \u0434\u043e 16\u0413\u0413\u0446, \u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0441\u0442 :)   val mhzInt = p(DevKitFPGAFrequencyKey).toInt   \/\/ \u041f\u0440\u0435\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0440\u0430\u0432\u043d\u0430 \u0446\u0435\u043b\u043e\u043c\u0443 \u0447\u0438\u0441\u043b\u0443 \u043c\u0435\u0433\u0430\u0433\u0435\u0440\u0446   rtcDivider := Mux(rtcDivider === (mhzInt - 1).U, 0.U, rtcDivider + 1.U)   outer.clintOpt.foreach { clint =&gt;     clint.module.io.rtcTick := rtcDivider === 0.U   }<\/code><\/pre>\n<p>  <\/p>\n<h2 id=\"probirayas-k-linux-kernel\">\u041f\u0440\u043e\u0431\u0438\u0440\u0430\u044f\u0441\u044c \u043a Linux kernel<\/h2>\n<p>  <\/p>\n<p>\u0422\u0443\u0442 \u043f\u043e\u0432\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0436\u0435 \u0438 \u0431\u0435\u0437 \u0442\u043e\u0433\u043e \u0437\u0430\u0442\u044f\u043d\u0443\u043b\u043e\u0441\u044c \u0438 \u0441\u0442\u0430\u043b\u043e \u043c\u0430\u043b\u043e\u0441\u0442\u044c \u043e\u0434\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043f\u0438\u0448\u0443 \u043f\u043e \u0432\u0435\u0440\u0445\u0430\u043c:<\/p>\n<p>  <\/p>\n<p>BBL \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u043b \u043d\u0430\u043b\u0438\u0447\u0438\u0435 FDT \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <code>0xF0000000<\/code>, \u0430 \u044f \u0432\u0435\u0434\u044c \u0443\u0436\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u043b! \u041d\u0443 \u0447\u0442\u043e \u0436\u0435, \u043f\u043e\u0438\u0449\u0435\u043c \u0435\u0449\u0451\u2026 \u041d\u0430\u0448\u0451\u043b \u0432 <strong>HiFive_U-Boot\/arch\/riscv\/lib\/boot.c<\/strong>, \u0437\u0430\u043c\u0435\u043d\u0438\u043b \u043d\u0430 <code>0x81F00000<\/code>, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 U-Boot.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0442\u043e\u043c BBL \u0436\u0430\u043b\u043e\u0432\u0430\u043b\u0441\u044f, \u0447\u0442\u043e \u043d\u0435\u0442 \u043f\u0430\u043c\u044f\u0442\u0438. \u041c\u043e\u0439 \u043f\u0443\u0442\u044c \u043b\u0435\u0436\u0430\u043b \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>mem_prop<\/code>, \u0447\u0442\u043e \u0432 <strong>riscv-pk\/machine\/fdt.c<\/strong>: \u043e\u0442\u0442\u0443\u0434\u0430 \u044f \u0443\u0437\u043d\u0430\u043b, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u0442\u0438\u0442\u044c \u0443\u0437\u0435\u043b fdt ram \u043a\u0430\u043a <code>device_type = \"memory\"<\/code> \u2014 \u043f\u043e\u0442\u043e\u043c, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u043d\u043e \u043f\u043e\u043a\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043f\u0438\u0448\u0443 \u0440\u0443\u043a\u0430\u043c\u0438 \u2014 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u044f \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043b.<\/p>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 (\u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043e \u0432 \u043e\u0442\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435, \u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430\u043c\u0438 \u043a\u0430\u0440\u0435\u0442\u043a\u0438):<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">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.<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412\u0440\u043e\u0434\u0435, \u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u043d\u0443\u0436\u043d\u043e \u043e\u043f\u0446\u0438\u0438 <code>riscv,kernel-start<\/code> \u0438 <code>riscv,kernel-end<\/code> \u0432 DTB, \u043d\u043e \u043f\u0430\u0440\u0441\u044f\u0442\u0441\u044f \u043d\u0443\u043b\u0438. \u041e\u0442\u043b\u0430\u0434\u043a\u0430 <code>query_chosen<\/code> \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430, \u0447\u0442\u043e BBL \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0441\u0438\u0442\u044c 32-\u0431\u0438\u0442\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441, \u0430 \u0435\u043c\u0443 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0430 <code>&lt;0x0 0xADDR&gt;<\/code>, \u0438 \u043f\u0435\u0440\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043f\u043e\u0445\u043e\u0436\u0435, \u043c\u043b\u0430\u0434\u0448\u0438\u0435 \u0440\u0430\u0437\u0440\u044f\u0434\u044b. \u0414\u043e\u043f\u0438\u0441\u0430\u043b \u0432 \u0441\u0435\u043a\u0446\u0438\u044e <code>chosen<\/code><\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">chosen {       #address-cells = &lt;1&gt;;       #size-cells = &lt;0&gt;;       ... }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0438 \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u043b \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439: <abbr title=\"\u041d\u043e \u0435\u0441\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0448\u0435\">\u043d\u0435 \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c <code>0x0<\/code> \u043f\u0435\u0440\u0432\u044b\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c<\/abbr>.<\/p>\n<p>  <\/p>\n<p>\u042d\u0442\u0438 100500 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0448\u0430\u0433\u043e\u0432 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442 \u043b\u0435\u0433\u043a\u043e \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u043f\u0430\u0434\u0430\u0435\u0442 \u043f\u0438\u043d\u0433\u0432\u0438\u043d:<\/p>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"plaintext\">   Verifying Hash Integrity ... md5+ OK    Loading loadables from 0x90a5a758 to 0x82000000 libfdt fdt_check_header(): FDT_ERR_BADMAGIC chosen {         linux,initrd-end = &lt;0x83000000&gt;;         linux,initrd-start = &lt;0x82000000&gt;;         riscv,kernel-end = &lt;0x80a00000&gt;;         riscv,kernel-start = &lt;0x80200000&gt;;         #address-cells = &lt;0x00000001&gt;;         #size-cells = &lt;0x00000000&gt;;         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 = &lt;0x83000000&gt;;         linux,initrd-start = &lt;0x82000000&gt;;         riscv,kernel-end = &lt;0x80a00000&gt;;         riscv,kernel-start = &lt;0x80200000&gt;;         #address-cells = &lt;0x00000001&gt;;         #size-cells = &lt;0x00000000&gt;;         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)<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<p>(\u044d\u043c\u0431\u043b\u0435\u043c\u0443 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 BBL, \u0430 \u0442\u043e \u0447\u0442\u043e \u0441 \u043c\u0435\u0442\u043a\u0430\u043c\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u2014 \u044f\u0434\u0440\u043e).<\/p>\n<p>  <\/p>\n<p>\u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u043d\u0435 \u0437\u043d\u0430\u044e, \u043a\u0430\u043a \u0432\u0435\u0437\u0434\u0435, \u043d\u043e \u043d\u0430 RocketChip \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430 \u043f\u043e JTAG \u043c\u043e\u0436\u043d\u043e \u043b\u043e\u0432\u0438\u0442\u044c trap-\u044b \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u2014 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0440\u043e\u0432\u043d\u043e \u0432 \u044d\u0442\u043e\u0439 \u0442\u043e\u0447\u043a\u0435.<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">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<\/code><\/pre>\n<p>  <\/p>\n<p><strong>freedom-u-sdk\/linux\/arch\/riscv\/kernel\/smpboot.c:<\/strong><\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">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 &lt; 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); \/\/ &lt; \u0412\u042b \u041d\u0410\u0425\u041e\u0414\u0418\u0422\u0415\u0421\u042c \u0417\u0414\u0415\u0421\u042c }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c \u0432 \u0441\u0442\u0430\u0440\u043e\u043c \u0430\u043d\u0435\u043a\u0434\u043e\u0442\u0435, <em>CPU not found, running software emulation<\/em>. \u041d\u0443 \u0438\u043b\u0438 \u043d\u0435 running. \u0417\u0430\u0431\u043b\u0443\u0434\u0438\u043b\u0438\u0441\u044c \u0432 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u044f\u0434\u0440\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430.<\/p>\n<p>  <\/p>\n<pre><code class=\"cpp\">\/* The lucky hart to first increment this variable will boot the other cores *\/ atomic_t hart_lottery; unsigned long boot_cpu_hartid;<\/code><\/pre>\n<p>  <\/p>\n<p>\u0425\u043e\u0440\u043e\u0448\u0438\u0439 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0432 <strong>linux\/arch\/riscv\/kernel\/setup.c<\/strong> \u2014 \u044d\u0442\u0430\u043a\u0430\u044f \u043f\u043e\u043a\u0440\u0430\u0441\u043a\u0430 \u0437\u0430\u0431\u043e\u0440\u0430 \u043f\u043e \u043c\u0435\u0442\u043e\u0434\u0443 \u0422\u043e\u043c\u0430 \u0421\u043e\u0439\u0435\u0440\u0430. \u0412 \u043e\u0431\u0449\u0435\u043c, \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u0435\u0439 \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u043d\u0435 \u043d\u0430\u0448\u043b\u043e\u0441\u044c, \u043f\u0440\u0438\u0437 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0442\u0438\u0440\u0430\u0436&#8230;<\/p>\n<p>  <\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u044c \u0438 \u0431\u0435\u0437 \u0442\u043e\u0433\u043e \u0437\u0430\u0442\u044f\u043d\u0443\u0432\u0448\u0443\u044e\u0441\u044f \u0441\u0442\u0430\u0442\u044c\u044e.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442. \u0412 \u043d\u0451\u043c \u0431\u0443\u0434\u0435\u0442 \u0431\u043e\u0439 \u0441 \u0445\u0438\u0442\u0440\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u0441\u043f\u0435\u0432\u0430\u0435\u0442 \u0441\u043f\u0440\u044f\u0442\u0430\u0442\u044c\u0441\u044f, \u0435\u0441\u043b\u0438 \u043a \u043d\u0435\u0439 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u043f\u043e\u0434\u043a\u0440\u0430\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f singlestep-\u043e\u043c.<\/p>\n<p>  <\/p>\n<p>\u0422\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0441\u043a\u0440\u0438\u043d\u043a\u0430\u0441\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 (\u0432\u043d\u0435\u0448\u043d\u044f\u044f \u0441\u0441\u044b\u043b\u043a\u0430):<br \/>  <a href=\"https:\/\/asciinema.org\/a\/h22F5eCMXYF9n7n89CY6NJNEi\"><img decoding=\"async\" src=\"https:\/\/asciinema.org\/a\/h22F5eCMXYF9n7n89CY6NJNEi.svg\" alt=\"asciicast\"><\/a><\/p>\n<\/div>\n<p>               <script class=\"js-mediator-script\">!function(e){function t(t,n){if(!(n in e)){for(var r,a=e.document,i=a.scripts,o=i.length;o--;)if(-1!==i[o].src.indexOf(t)){r=i[o];break}if(!r){r=a.createElement(\"script\"),r.type=\"text\/javascript\",r.async=!0,r.defer=!0,r.src=t,r.charset=\"UTF-8\";var d=function(){var e=a.getElementsByTagName(\"script\")[0];e.parentNode.insertBefore(r,e)};\"[object Opera]\"==e.opera?a.addEventListener?a.addEventListener(\"DOMContentLoaded\",d,!1):e.attachEvent(\"onload\",d):d()}}}t(\"\/\/mediator.mail.ru\/script\/2820404\/\",\"_mediator\")}(window);<\/script>     <br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/458482\/\"> https:\/\/habr.com\/ru\/post\/458482\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\">\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/4j\/fu\/lu\/4jfulumeapi32exqv7d6vnseaho.png\" width=\"45%\" align=\"left\"> \u0412 <a href=\"https:\/\/habr.com\/ru\/post\/456172\/\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438<\/a> \u0431\u044b\u043b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u0430\u043c\u044f\u0442\u0438, \u0430 \u0442\u043e\u0447\u043d\u0435\u0435 \u2014 \u043e\u0431\u0451\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 IP Core \u0438\u0437 Quartus, \u044f\u0432\u043b\u044f\u044e\u0449\u0430\u044f\u0441\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u043c \u043d\u0430 TileLink. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0436\u0435 \u0432 \u0440\u0443\u0431\u0440\u0438\u043a\u0435 \u00ab\u041f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c RocketChip \u043d\u0430 \u043c\u0430\u043b\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0443\u044e \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0443\u044e \u043f\u043b\u0430\u0442\u0443 \u0441 \u0426\u0438\u043a\u043b\u043e\u043d\u043e\u043c\u00bb \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0443\u044e \u043a\u043e\u043d\u0441\u043e\u043b\u044c. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0442\u044f\u043d\u0443\u043b\u0441\u044f: \u044f \u0443\u0436\u0435 \u0431\u044b\u043b\u043e \u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u043e-\u0431\u044b\u0441\u0442\u0440\u043e\u043c\u0443 \u0437\u0430\u043f\u0443\u0449\u0443 Linux, \u0438 \u043f\u043e\u0439\u0434\u0451\u043c \u0434\u0430\u043b\u044c\u0448\u0435, \u043d\u043e \u043d\u0435 \u0442\u0443\u0442 \u0442\u043e \u0431\u044b\u043b\u043e. \u0412 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 U-Boot, BBL, \u0438 \u0440\u043e\u0431\u043a\u0438\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 Linux kernel \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u041d\u043e \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0435\u0441\u0442\u044c \u2014 U-Boot-\u043e\u0432\u0441\u043a\u0430\u044f, \u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e-\u0442\u0430\u043a\u0438 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u0430\u044f, \u0438\u043c\u0435\u044e\u0449\u0430\u044f \u043c\u043d\u043e\u0433\u043e\u0435 \u0438\u0437 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432\u044b \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0435 \u043e\u0442 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u043a\u043e\u043d\u0441\u043e\u043b\u0438.<\/p>\n<p>  <\/p>\n<p>\u0412 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0441\u044f SD-\u043a\u0430\u0440\u0442\u0430, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u0430\u044f \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 SPI, \u0430 \u0442\u0430\u043a\u0436\u0435 UART. \u0412 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 BootROM \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043c\u0435\u043d\u0451\u043d \u0441 <code>xip<\/code> \u043d\u0430 <code>sdboot<\/code> \u0438, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0430\u0434\u0438\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 (\u043d\u0430 SD-\u043a\u0430\u0440\u0442\u0435).<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-291755","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/291755","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=291755"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/291755\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=291755"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=291755"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=291755"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}