{"id":36075,"date":"2019-10-31T22:09:28","date_gmt":"2019-10-31T19:09:28","guid":{"rendered":"https:\/\/prohoster.info\/blog\/chast-3-pochti-chto-gruzim-linux-s-sd-karty-na-rocketchip\/"},"modified":"2019-10-31T22:09:28","modified_gmt":"2019-10-31T19:09:28","slug":"chast-3-pochti-chto-gruzim-linux-s-sd-karty-na-rocketchip","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/chast-3-pochti-chto-gruzim-linux-s-sd-karty-na-rocketchip","title":{"rendered":"Parte 3: Carichiamo quasi Linux da una scheda SD su RocketChip","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"\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\" src=\"\/wp-content\/uploads\/2019\/07\/f9aac235c5de88ac24cbd983d80b9a2c.jpg\" style=\"display:block;margin: 0 auto;\" \/> \u0412 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/456172\/\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438<\/a><\/noindex> \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><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/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 \u0442\u0443\u0442 \u0436\u0435 \u0440\u0430\u0441\u0442\u0430\u0449\u0438\u043b \u043d\u0430 \u0446\u0438\u0442\u0430\u0442\u044b \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\n...\n  with HasPeripherySPI\n  with HasPeripheryUART\n...\n{\n  val tlclock = new FixedClockResource(\"tlclk\", p(DevKitFPGAFrequencyKey))\n  ...\n}\n\nclass SystemModule[+L &lt;: System](_outer: L)\n  extends RocketSubsystemModuleImp(_outer)\n...\n    with HasPeripheryUARTModuleImp\n    with HasPeripheryGPIOModuleImp\n...<\/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 {\n\n...\n\n  \/\/ UART\n  io.uart_tx := sys.uart(0).txd\n  sys.uart(0).rxd := RegNext(RegNext(io.uart_rx))\n\n  \/\/ SD card\n  io.sd_cs := sys.spi(0).cs(0)\n  io.sd_sck := sys.spi(0).sck\n  io.sd_mosi := sys.spi(0).dq(0).o\n  sys.spi(0).dq(0).i := false.B\n  sys.spi(0).dq(1).i := RegNext(RegNext(io.sd_miso))\n  sys.spi(0).dq(2).i := false.B\n  sys.spi(0).dq(3).i := false.B\n}<\/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 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/317514\/\">\u043c\u0435\u0442\u0430\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/a><\/noindex>. \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>\n<b class=\"spoiler_title\">SD-\u0430\u0434\u0430\u043f\u0442\u0435\u0440<\/b><\/p>\n<p>\u0412\u0438\u0434 \u0441\u0432\u0435\u0440\u0445\u0443:<\/p>\n<p>\n<img decoding=\"async\" alt=\"\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\" src=\"\/wp-content\/uploads\/2019\/07\/b66ab5e6ffc79be5065194e7c9c0dafd.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\u0412\u0438\u0434 \u0441\u043d\u0438\u0437\u0443:<\/p>\n<p>\n<img decoding=\"async\" alt=\"\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\" src=\"\/wp-content\/uploads\/2019\/07\/bc030528dee5bc3470c64c3f0141f902.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/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 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.raspberrypi.org\/documentation\/configuration\/uart.md\">\u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u043c\u0430\u043d\u0443\u0430\u043b\u0443<\/a><\/noindex>.<\/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\ngit submodule update --recursive --init\nmake<\/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\nCMD0\nERROR<\/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\nCMD0\nCMD8\nACMD41\nCMD58\nCMD16\nCMD18\nLOADING \/<\/code><\/pre>\n<p><\/p>\n<p>\u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u043e\u043d\u043e \u0448\u0435\u0432\u0435\u043b\u0438\u0442\u0441\u044f \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\nindex c6b5ede..bca1b7f 100644\n--- a\/bootrom\/sdboot\/sd.c\n+++ b\/bootrom\/sdboot\/sd.c\n@@ -224,6 +224,8 @@ int main(void)\n\n        kputs(\"BOOT\");\n\n+    while(*(volatile char *)0x10000){}\n+\n        __asm__ __volatile__ (\"fence.i\" : : : \"memory\");\n        return 0;\n }<\/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\" alt=\"\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\" src=\"\/wp-content\/uploads\/2019\/07\/91167378e5c18e90dba115d9a3d2ba50.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/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 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/454208\/\">\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a><\/noindex> \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\nA program is being debugged already.\nAre you sure you want to change the file? (y or n) y\nReading symbols from builds\/zeowaa-e115\/sdboot.elf...done.<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\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\" src=\"\/wp-content\/uploads\/2019\/07\/e05c51925036630b458eeb90956937c9.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/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\nindex 14fa740..2a6c944 100644\n--- a\/bootrom\/sdboot\/head.S\n+++ b\/bootrom\/sdboot\/head.S\n@@ -13,7 +13,7 @@ _prog_start:\n   smp_resume(s1, s2)\n   csrr a0, mhartid\n   la a1, dtb\n-  li s1, PAYLOAD_DEST\n+  li s1, (PAYLOAD_DEST + 0x89800)\n   jr s1\n\n   .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 \u043a\u0430\u0440\u0442\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \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\n(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\n   \u2502305      * trap entry                                    \u2502\n   \u2502306      *\/                                              \u2502\n   \u2502307     trap_entry:                                      \u2502\n   \u2502308         addi sp, sp, -32*REGBYTES                    \u2502\n  &gt;\u2502309         SREG x1, 1*REGBYTES(sp)                      \u2502\n   \u2502310         SREG x2, 2*REGBYTES(sp)                      \u2502\n   \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\nBreakpoint 1 at 0x80089a80: file \/hdd\/trosinenko\/fpga\/freedom-u-sdk\/HiFive_U-Boot\/arch\/riscv\/cpu\/HiFive\/start.S, line 308.\n(gdb) set variable $pc=0x80089800\n(gdb) c\nContinuing.\n\nBreakpoint 1, trap_entry () at \/hdd\/trosinenko\/fpga\/freedom-u-sdk\/HiFive_U-Boot\/arch\/riscv\/cpu\/HiFive\/start.S:308\n(gdb) p\/x $sp\n$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\n   0x800cb068 &lt;strnlen+12&gt;:     lbu     a4,0(a5)\n   0x800cb06c &lt;strnlen+16&gt;:     bnez    a4,0x800cb078 &lt;strnlen+28&gt;\n   0x800cb070 &lt;strnlen+20&gt;:     sub     a0,a5,a0\n   0x800cb074 &lt;strnlen+24&gt;:     ret\n   0x800cb078 &lt;strnlen+28&gt;:     addi    a5,a5,1\n   0x800cb07c &lt;strnlen+32&gt;:     j       0x800cb064 &lt;strnlen+8&gt;\n   0x800cb080 &lt;strdup&gt;: addi    sp,sp,-32\n   0x800cb084 &lt;strdup+4&gt;:       sd      s0,16(sp)\n   0x800cb088 &lt;strdup+8&gt;:       sd      ra,24(sp)\n   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\n#0  strnlen (s=s@entry=0x10060000 \"\", count=18446744073709551615) at lib\/string.c:283\n#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\n#2  0x00000000800cc63c in vsnprintf_internal (buf=buf@entry=0x881cbd38 \"exception code: 5 , \", size=size@entry=1060, fmt=0x800d446e \"s , epc %08x , ra %08lxn\", fmt@entry=0x800d4458 \"exception code: %d , %s , epc %08x , ra %08lxn\", args=0x881cc1a0,\n    args@entry=0x881cc188) at lib\/vsprintf.c:619\n#3  0x00000000800cca54 in vsnprintf (buf=buf@entry=0x881cbd38 \"exception code: 5 , \", size=size@entry=1060, fmt=fmt@entry=0x800d4458 \"exception code: %d , %s , epc %08x , ra %08lxn\", args=args@entry=0x881cc188) at lib\/vsprintf.c:710\n#4  0x00000000800cca68 in vscnprintf (buf=buf@entry=0x881cbd38 \"exception code: 5 , \", size=size@entry=1060, fmt=fmt@entry=0x800d4458 \"exception code: %d , %s , epc %08x , ra %08lxn\", args=args@entry=0x881cc188) at lib\/vsprintf.c:717\n#5  0x00000000800ccb50 in printf (fmt=fmt@entry=0x800d4458 \"exception code: %d , %s , epc %08x , ra %08lxn\") at lib\/vsprintf.c:792\n#6  0x000000008008a9f0 in _exit_trap (regs=&lt;optimized out&gt;, epc=2148315240, code=&lt;optimized out&gt;) at arch\/riscv\/lib\/interrupts.c:92\n#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\n#8  0x0000000080089b10 in trap_entry () at \/hdd\/trosinenko\/fpga\/freedom-u-sdk\/HiFive_U-Boot\/arch\/riscv\/cpu\/HiFive\/start.S:343\nBacktrace 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 <noindex><a rel=\"nofollow\" href=\"https:\/\/riscv.org\/specifications\/privileged-isa\/\">\u0437\u0434\u0435\u0441\u044c<\/a><\/noindex> \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:\n    li  t0, -16\n    li  t1, CONFIG_SYS_INIT_SP_ADDR\n    and sp, t1, t0  \/* force 16 byte alignment *\/\n\n#ifdef CONFIG_DEBUG_UART\n    jal debug_uart_init\n#endif\n\ncall_board_init_f_0:\n    mv  a0, sp\n    jal board_init_f_alloc_reserve\n    mv  sp, a0\n    jal board_init_f_init_reserve\n\n    mv  a0, zero    \/* a0 &lt;-- boot_flags = 0 *\/\n    la t5, board_init_f\n    jr t5       \/* jump to board_init_f() *\/\n<\/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\nindex ca89383..245542c 100644\n--- a\/include\/configs\/HiFive-U540.h\n+++ b\/include\/configs\/HiFive-U540.h\n@@ -65,12 +65,9 @@\n #define CONFIG_SYS_SDRAM_BASE  PHYS_SDRAM_0\n #endif\n #if 1\n-\/*#define CONFIG_NR_DRAM_BANKS 1*\/\n+#define CONFIG_NR_DRAM_BANKS   1\n #define PHYS_SDRAM_0   0x80000000              \/* SDRAM Bank #1 *\/\n-#define PHYS_SDRAM_1   \n-       (PHYS_SDRAM_0 + PHYS_SDRAM_0_SIZE)      \/* SDRAM Bank #2 *\/\n-#define PHYS_SDRAM_0_SIZE      0x80000000      \/* 2 GB *\/\n-#define PHYS_SDRAM_1_SIZE      0x10000000      \/* 256 MB *\/\n+#define PHYS_SDRAM_0_SIZE      0x40000000      \/* 1 GB *\/\n #define CONFIG_SYS_SDRAM_BASE  PHYS_SDRAM_0\n #endif\n \/*\n@@ -81,7 +78,7 @@\n #define CONSOLE_ARG                            \"console=ttyS0,115200 \"\n\n \/* Init Stack Pointer *\/\n-#define CONFIG_SYS_INIT_SP_ADDR                (0x08000000 + 0x001D0000 - \n+#define CONFIG_SYS_INIT_SP_ADDR                (0x80000000 + 0x001D0000 - \n                                        GENERATED_GBL_DATA_SIZE)\n\n #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 \u043a\u043e\u0441\u0442\u044b\u043b\u0435\u0439 <noindex><a rel=\"nofollow\" 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><\/noindex> \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>\n<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<pre><code class=\"plaintext\">trosinenko@trosinenko-pc:\/hdd\/trosinenko\/fpga\/freedom-u-sdk\/HiFive_U-Boot$ git show --name-status\ncommit 39cd67d59c16ac87b46b51ac1fb58f16f1eb1048 (HEAD -&gt; zeowaa-1gb)\nAuthor: Anatoly Trosinenko &lt;anatoly.trosinenko@gmail.com&gt;\nDate:   Tue Jul 2 17:13:16 2019 +0300\n\n    Initial support for Zeowaa A-E115FB board\n\nM       arch\/riscv\/Kconfig\nA       arch\/riscv\/cpu\/zeowaa-1gb\/Makefile\nA       arch\/riscv\/cpu\/zeowaa-1gb\/cpu.c\nA       arch\/riscv\/cpu\/zeowaa-1gb\/start.S\nA       arch\/riscv\/cpu\/zeowaa-1gb\/timer.c\nA       arch\/riscv\/cpu\/zeowaa-1gb\/u-boot.lds\nM       arch\/riscv\/dts\/Makefile\nA       arch\/riscv\/dts\/zeowaa-1gb.dts\nA       board\/Zeowaa\/zeowaa-1gb\/Kconfig\nA       board\/Zeowaa\/zeowaa-1gb\/MAINTAINERS\nA       board\/Zeowaa\/zeowaa-1gb\/Makefile\nA       board\/Zeowaa\/zeowaa-1gb\/Zeowaa-A-E115FB.c\nA       configs\/zeowaa-1gb_defconfig\nA       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 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/atrosinenko\/HiFive_U-Boot\/commit\/352b5d1e7891f5e6dbbc77b9c96f5e62ef28fbc2\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a><\/noindex>.<\/p>\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\nError:   dmcontrol=0x80000001\nError:   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\nCMD0\nCMD8\nACMD41\nCMD58\nCMD16\nCMD18\nLOADING\nBOOT\n\nU-Boot 2018.09-g39cd67d-dirty (Jul 03 2019 - 13:50:33 +0300)\n\nDRAM:  1 GiB\nMMC:\nBEFORE LOAD ENVBEFORE FDTCONTROLADDRBEFORE LOADADDRIn:    serial\nOut:   serial\nErr:   serial\nHit 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 \u043a\u0443\u0434\u0430 \u043f\u043e\u0434\u0430\u043b\u044c\u0448\u0435 \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\n0x200bff8:      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\n(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\nMMC_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,\n        enum bootmenu_key *key, int *esc)\n{\n    int c;\n\n    while (!tstc()) {\n        WATCHDOG_RESET();\n        mdelay(10);\n    }\n\n    c = getc();\n\n    switch (*esc) {\n    case 0:\n        \/* First char of ANSI escape sequence 'e' *\/\n        if (c == 'e') {\n            *esc = 1;\n            *key = KEY_NONE;\n        }\n        break;\n    case 1:\n        \/* Second char of ANSI '[' *\/\n        if (c == '[') {\n...<\/code><\/pre>\n<p><\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0432 \u0442\u043e\u043c, \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\nMMC_SPI: 0 at 0:1 hz 20000000 mode 0\n## Unknown partition table type 0\nlibfdt fdt_path_offset() returned FDT_ERR_NOTFOUND\n** No partition table - mmc 0 **\n## Info: input data size = 34 = 0x22\nRunning uEnv.txt boot2...\n## Error: \"boot2\" not defined\nHiFive-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>\n<b class=\"spoiler_title\">\u0412\u044b\u0432\u043e\u0434 \u043a\u043e\u043d\u0441\u043e\u043b\u0438<\/b><\/p>\n<pre><code class=\"plaintext\">HiFive-Unleashed # env edit mmcsetup\nedit: mmc_spi 1 10000000 0; mmc part\nHiFive-Unleashed # boot\nMMC_SPI: 1 at 0:1 hz 10000000 mode 0\n\nPartition Map for MMC device 0  --   Partition Type: EFI\n\nPart    Start LBA       End LBA         Name\n        Attributes\n        Type GUID\n        Partition GUID\n  1     0x00000800      0x0000ffde      \"Vfat Boot\"\n        attrs:  0x0000000000000000\n        type:   ebd0a0a2-b9e5-4433-87c0-68b6b72699c7\n        type:   data\n        guid:   76bd71fd-1694-4ff3-8197-bfa81699c2fb\n  2     0x00040800      0x002efaf4      \"root\"\n        attrs:  0x0000000000000000\n        type:   0fc63daf-8483-4772-8e79-3d69d8477de4\n        type:   linux\n        guid:   9f3adcc5-440c-4772-b7b7-283124f38bf3\n  3     0x0000044c      0x000007e4      \"uboot\"\n        attrs:  0x0000000000000000\n        type:   5b193300-fc78-40cd-8002-e86c45580b47\n        guid:   bb349257-0694-4e0f-9932-c801b4d76fa3\n  4     0x00000400      0x0000044b      \"uboot-env\"\n        attrs:  0x0000000000000000\n        type:   a09354ac-cd63-11e8-9aff-70b3d592f0fa\n        guid:   4db442d0-2109-435f-b858-be69629e7dbf\nlibfdt fdt_path_offset() returned FDT_ERR_NOTFOUND\n2376 bytes read in 0 ms\nRunning uEnv.txt boot2...\n15332118 bytes read in 0 ms\n## Loading kernel from FIT Image at 90000000 ...\n   Using 'config-1' configuration\n   Trying 'bbl' kernel subimage\n     Description:  BBL\/SBI\/riscv-pk\n     Type:         Kernel Image\n     Compression:  uncompressed\n     Data Start:   0x900000d4\n     Data Size:    74266 Bytes = 72.5 KiB\n     Architecture: RISC-V\n     OS:           Linux\n     Load Address: 0x80000000\n     Entry Point:  0x80000000\n     Hash algo:    sha256\n     Hash value:   28972571467c4ad0cf08a81d9cf92b9dffc5a7cb2e0cd12fdbb3216cf1f19cbd\n   Verifying Hash Integrity ... sha256+ OK\n## Loading fdt from FIT Image at 90000000 ...\n   Using 'config-1' configuration\n   Trying 'fdt' fdt subimage\n     Description:  unavailable\n     Type:         Flat Device Tree\n     Compression:  uncompressed\n     Data Start:   0x90e9d31c\n     Data Size:    6911 Bytes = 6.7 KiB\n     Architecture: RISC-V\n     Load Address: 0x81f00000\n     Hash algo:    sha256\n     Hash value:   10b0244a5a9205357772ea1c4e135a4f882409262176d8c7191238cff65bb3a8\n   Verifying Hash Integrity ... sha256+ OK\n   Loading fdt from 0x90e9d31c to 0x81f00000\n   Booting using the fdt blob at 0x81f00000\n## Loading loadables from FIT Image at 90000000 ...\n   Trying 'kernel' loadables subimage\n     Description:  Linux kernel\n     Type:         Kernel Image\n     Compression:  uncompressed\n     Data Start:   0x900123e8\n     Data Size:    10781356 Bytes = 10.3 MiB\n     Architecture: RISC-V\n     OS:           Linux\n     Load Address: 0x80200000\n     Entry Point:  unavailable\n     Hash algo:    sha256\n     Hash value:   72a9847164f4efb2ac9bae736f86efe7e3772ab1f01ae275e427e2a5389c84f0\n   Verifying Hash Integrity ... sha256+ OK\n   Loading loadables from 0x900123e8 to 0x80200000\n## Loading loadables from FIT Image at 90000000 ...\n   Trying 'ramdisk' loadables subimage\n     Description:  buildroot initramfs\n     Type:         RAMDisk Image\n     Compression:  gzip compressed\n     Data Start:   0x90a5a780\n     Data Size:    4467411 Bytes = 4.3 MiB\n     Architecture: RISC-V\n     OS:           Linux\n     Load Address: 0x82000000\n     Entry Point:  unavailable\n     Hash algo:    sha256\n     Hash value:   883dfd33ca047e3ac10d5667ffdef7b8005cac58b95055c2c2beda44bec49bd0\n   Verifying Hash Integrity ... sha256+ OK\n   Loading loadables from 0x90a5a780 to 0x82000000<\/code><\/pre>\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\n# 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 \u0432\u044b\u0432\u043e\u0434 \u043a\u0443\u0434\u0430-\u0442\u043e \u043f\u043e PCIe:<\/p>\n<p><\/p>\n<pre><code class=\"diff\">-bootargs=console=ttySIF0,921600 debug\n+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\">...\n   Verifying Hash Integrity ... md5+ OK\n   Loading loadables from 0x90a5a758 to 0x82000000\nlibfdt fdt_check_header(): FDT_ERR_BADMAGIC\nchosen {\n        linux,initrd-end = &lt;0x00000000 0x83000000&gt;;\n        linux,initrd-start = &lt;0x00000000 0x82000000&gt;;\n        riscv,kernel-end = &lt;0x00000000 0x80a00000&gt;;\n        riscv,kernel-start = &lt;0x00000000 0x80200000&gt;;\n        bootargs = \"debug console=tty0 console=ttyS0,125200 root=\/dev\/mmcblk0p2 rootwait\";\n};\nlibfdt fdt_path_offset() returned FDT_ERR_NOTFOUND\nchosen {\n        linux,initrd-end = &lt;0x00000000 0x83000000&gt;;\n        linux,initrd-start = &lt;0x00000000 0x82000000&gt;;\n        riscv,kernel-end = &lt;0x00000000 0x80a00000&gt;;\n        riscv,kernel-start = &lt;0x00000000 0x80200000&gt;;\n        bootargs = \"debug console=tty0 console=ttyS0,125200 root=\/dev\/mmcblk0p2 rootwait\";\n};\n   Loading Kernel Image ... OK\nBooting kernel in\n3<\/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\n0x200bff8:      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 ?? ()\n(gdb) set variable *0x0200bff8=1000000\n(gdb) c\nContinuing.\n^C\nProgram received signal SIGINT, Interrupt.\n0x00000000bff6dbb0 in ?? ()\n(gdb) set variable *0x0200bff8=2000000\n(gdb) c\nContinuing.\n^C\nProgram received signal SIGINT, Interrupt.\n0x00000000bff6dbb0 in ?? ()\n(gdb) set variable *0x0200bff8=3000000\n(gdb) c\nContinuing.<\/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\nBooting kernel in\n3\n2\n1\n0\n## 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;:\n    80001c20:   1141                    addi    sp,sp,-16\n    80001c22:   e022                    sd      s0,0(sp)\n    80001c24:   842a                    mv      s0,a0\n    80001c26:   00005517                auipc   a0,0x5\n    80001c2a:   0ca50513                addi    a0,a0,202 # 80006cf0 &lt;softfloat_countLeadingZeros8+0x558&gt;\n    80001c2e:   e406                    sd      ra,8(sp)\n    80001c30:   f7fff0ef                jal     ra,80001bae &lt;printm&gt;\n    80001c34:   8522                    mv      a0,s0\n    80001c36:   267000ef                jal     ra,8000269c &lt;finisher_exit&gt;\n    80001c3a:   00010797                auipc   a5,0x10\n    80001c3e:   41e78793                addi    a5,a5,1054 # 80012058 &lt;htif&gt;\n    80001c42:   639c                    ld      a5,0(a5)\n    80001c44:   c399                    beqz    a5,80001c4a &lt;poweroff+0x2a&gt;\n    80001c46:   72c000ef                jal     ra,80002372 &lt;htif_poweroff&gt;\n    80001c4a:   45a1                    li      a1,8\n    80001c4c:   4501                    li      a0,0\n    80001c4e:   dc7ff0ef                jal     ra,80001a14 &lt;send_ipi_many&gt;\n    80001c52:   10500073                wfi\n    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)\n{\n  printm(\"Power offrn\");\n  finisher_exit(code);\n  if (htif) {\n    htif_poweroff();\n  } else {\n    send_ipi_many(0, IPI_HALT);\n    while (1) { asm volatile (\"wfin\"); }\n  }\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 {\n      val rtcTick = Bool(INPUT)\n    })\n\n    val time = RegInit(UInt(0, width = timeWidth))\n    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 :)\n  val mhzInt = p(DevKitFPGAFrequencyKey).toInt\n  \/\/ \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\n  rtcDivider := Mux(rtcDivider === (mhzInt - 1).U, 0.U, rtcDivider + 1.U)\n  outer.clintOpt.foreach { clint =&gt;\n    clint.module.io.rtcTick := rtcDivider === 0.U\n  }<\/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\nwith the flag --with-payload=PATH, then rebuild bbl. Alternatively,\nbbl can be used in firmware-only mode by adding device-tree nodes\nfor 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 {\n      #address-cells = &lt;1&gt;;\n      #size-cells = &lt;0&gt;;\n      ...\n}<\/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: \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.<\/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>\n<b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b><\/p>\n<pre><code class=\"plaintext\">   Verifying Hash Integrity ... md5+ OK\n   Loading loadables from 0x90a5a758 to 0x82000000\nlibfdt fdt_check_header(): FDT_ERR_BADMAGIC\nchosen {\n        linux,initrd-end = &lt;0x83000000&gt;;\n        linux,initrd-start = &lt;0x82000000&gt;;\n        riscv,kernel-end = &lt;0x80a00000&gt;;\n        riscv,kernel-start = &lt;0x80200000&gt;;\n        #address-cells = &lt;0x00000001&gt;;\n        #size-cells = &lt;0x00000000&gt;;\n        bootargs = \"debug console=tty0 console=ttyS0,125200 root=\/dev\/mmcblk0p2 rootwait\";\n        stdout-path = \"uart0:38400n8\";\n};\nlibfdt fdt_path_offset() returned FDT_ERR_NOTFOUND\nchosen {\n        linux,initrd-end = &lt;0x83000000&gt;;\n        linux,initrd-start = &lt;0x82000000&gt;;\n        riscv,kernel-end = &lt;0x80a00000&gt;;\n        riscv,kernel-start = &lt;0x80200000&gt;;\n        #address-cells = &lt;0x00000001&gt;;\n        #size-cells = &lt;0x00000000&gt;;\n        bootargs = \"debug console=tty0 console=ttyS0,125200 root=\/dev\/mmcblk0p2 rootwait\";\n        stdout-path = \"uart0:38400n8\";\n};\n   Loading Kernel Image ... OK\nBooting kernel in\n3\n2\n1\n0\n## Starting application at 0x80000000 ...\nbbl loader\n\n                SIFIVE, INC.\n\n         5555555555555555555555555\n        5555                   5555\n       5555                     5555\n      5555                       5555\n     5555       5555555555555555555555\n    5555       555555555555555555555555\n   5555                             5555\n  5555                               5555\n 5555                                 5555\n5555555555555555555555555555          55555\n 55555           555555555           55555\n   55555           55555           55555\n     55555           5           55555\n       55555                   55555\n         55555               55555\n           55555           55555\n             55555       55555\n               55555   55555\n                 555555555\n                   55555\n                     5\n\n           SiFive RISC-V Core IP\n[    0.000000] OF: fdt: Ignoring memory range 0x80000000 - 0x80200000\n[    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\n[    0.000000] bootconsole [early0] enabled\n[    0.000000] Initial ramdisk at: 0x(____ptrval____) (16777216 bytes)\n[    0.000000] Zone ranges:\n[    0.000000]   DMA32    [mem 0x0000000080200000-0x00000000bfffffff]\n[    0.000000]   Normal   [mem 0x00000000c0000000-0x00000bffffffffff]\n[    0.000000] Movable zone start for each node\n[    0.000000] Early memory node ranges\n[    0.000000]   node   0: [mem 0x0000000080200000-0x00000000bfffffff]\n[    0.000000] Initmem setup node 0 [mem 0x0000000080200000-0x00000000bfffffff]\n[    0.000000] On node 0 totalpages: 261632\n[    0.000000]   DMA32 zone: 3577 pages used for memmap\n[    0.000000]   DMA32 zone: 0 pages reserved\n[    0.000000]   DMA32 zone: 261632 pages, LIFO batch:63\n[    0.000000] software IO TLB: mapped [mem 0xbb1fc000-0xbf1fc000] (64MB)<\/code><\/pre>\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.\n0xffffffe0000024ca in ?? ()\n(gdb) bt\n#0  0xffffffe0000024ca in ?? ()\nBacktrace stopped: previous frame identical to this frame (corrupt stack?)\n(gdb) file work\/linux\/vmlinux\nA program is being debugged already.\nAre you sure you want to change the file? (y or n) y\nReading symbols from work\/linux\/vmlinux...done.\n(gdb) bt\n#0  0xffffffe0000024ca in setup_smp () at \/hdd\/trosinenko\/fpga\/freedom-u-sdk\/linux\/arch\/riscv\/kernel\/smpboot.c:75\n#1  0x0000000000000000 in ?? ()\nBacktrace 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)\n{\n    struct device_node *dn = NULL;\n    int hart;\n    bool found_boot_cpu = false;\n    int cpuid = 1;\n\n    while ((dn = of_find_node_by_type(dn, \"cpu\"))) {\n        hart = riscv_of_processor_hartid(dn);\n        if (hart &lt; 0)\n            continue;\n\n        if (hart == cpuid_to_hartid_map(0)) {\n            BUG_ON(found_boot_cpu);\n            found_boot_cpu = 1;\n            continue;\n        }\n\n        cpuid_to_hartid_map(cpuid) = hart;\n        set_cpu_possible(cpuid, true);\n        set_cpu_present(cpuid, true);\n        cpuid++;\n    }\n\n    BUG_ON(!found_boot_cpu); \/\/ &lt; \u0412\u042b \u041d\u0410\u0425\u041e\u0414\u0418\u0422\u0415\u0421\u042c \u0417\u0414\u0415\u0421\u042c\n}<\/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 *\/\natomic_t hart_lottery;\nunsigned 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 \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/asciinema.org\/a\/h22F5eCMXYF9n7n89CY6NJNEi\"><img decoding=\"async\" alt=\"\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\" src=\"\/wp-content\/uploads\/2019\/07\/e46e0748807008921351a650d01a903d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/458482\/\">habr.com<\/a><\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \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 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":26975,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-36075","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \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\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/chast-3-pochti-chto-gruzim-linux-s-sd-karty-na-rocketchip\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\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 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/chast-3-pochti-chto-gruzim-linux-s-sd-karty-na-rocketchip\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:09:28+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:09:28+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Parte 3: Quasi carichiamo Linux dalla scheda SD su RocketChip | ProHoster","description":"Nella parte precedente \u00e8 stato implementato un controller di memoria che funziona pi\u00f9 o meno, e pi\u00f9 precisamente \u2014 un wrapper sopra l'IP Core di Quartus, che funge da adattatore a TileLink. Oggi, nella rubrica 'Portiamo RocketChip su una scheda cinese poco conosciuta con Cyclone', vedrete una console funzionante. Il processo si \u00e8 prolungato un po': pensavo di avviare Linux rapidamente e andare avanti, ma non","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/chast-3-pochti-chto-gruzim-linux-s-sd-karty-na-rocketchip","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\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 | ProHoster","og:description":"\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \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","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/chast-3-pochti-chto-gruzim-linux-s-sd-karty-na-rocketchip","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:09:28+00:00","article:modified_time":"2019-10-31T19:09:28+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"36075","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 01:54:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:51:22","updated":"2026-01-22 01:54:19"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/36075","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=36075"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/36075\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/26975"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=36075"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=36075"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=36075"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}