readme.txt 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. Sipeed MAIX-Go Board
  2. ====================
  3. The Sipeed MAXI-Go board is a dual-core RISC-V 64-bits board based on the
  4. Canaan Kendryte K210 SoC.
  5. Prerequisite
  6. ------------
  7. In order to use the kflash utility to program this board, the user must have
  8. access to the board USB serial device file. The simplest way to do this is to
  9. add your user to the same group as this device file. Assume the device file is
  10. /dev/ttyUSB0, first identify the device group name. In most cases, it is
  11. either "dialout" or "uucp". Also verify that read-write access is enabled for
  12. the group:
  13. ```
  14. $ ls -l /dev/ttyUSB0
  15. crw-rw---- 1 root dialout 188, 0 May 26 13:48 /dev/ttyUSB0
  16. ```
  17. Then add yourself to that group (dialout in this example):
  18. ```
  19. $ sudo usermod -a -G dialout $(whoami)
  20. ```
  21. To enable the above, it is sometimes necessary to logout and login again.
  22. Buildroot Configuration
  23. -----------------------
  24. Two buildroot configuration files are provided:
  25. (1) Direct Linux Kernel Boot
  26. This is defined by the sipeed_maix_go_defconfig configuration. This
  27. configuration allows building a bootable kernel image with a built-in initramfs
  28. root file system (the board SD card is not used). The built kernel image can be
  29. flashed directly to the board ROM for direct booting. No boot loader is
  30. required.
  31. (2) U-Boot SD-Card Boot
  32. The sipeed_maix_go_sdcard_defconfig configuration allows building a kernel
  33. image with the root file system on the board SD card. U-Boot is used as the
  34. boot loader.
  35. Note: U-Boot does not natively support the Sipeed MAIX-Go board. However, the
  36. board and device tree differences with the Sipeed MAIX-bit board are small
  37. enough for U-Boot to work.
  38. Both configuration files will also compile and install the kflash and
  39. pyserial-miniterm host utilities to program bootable image files to the board
  40. and open a serial terminal console.
  41. Direct Linux Kernel Boot
  42. -------------------------
  43. Using the sipeed_maix_go_defconfig configuration, the bootable kernel binary
  44. image is built as follows.
  45. ```
  46. $ make sipeed_maix_go_defconfig
  47. $ make
  48. ```
  49. The bootable binary image is the output/images/loader.bin file. This image file
  50. can be written to the board boot flash using the kflash utility.
  51. ```
  52. $ output/host/bin/kflash -b 1500000 -p /dev/ttyUSB0 -t output/images/loader.bin
  53. ```
  54. Once the kernel image file is fully programmed, a terminal console is open and
  55. the board can be rebooted by pressing the reset button on the board (if it does
  56. not reboot automatically).
  57. The output will be similar to the following.
  58. ```
  59. [ 0.000000] Linux version 5.17.0 (foo@bar.com) (riscv64-buildroot-linux-uclibc-gcc.br_real (Buildroot 2022.02-560-g6a2b542a09-dirty) 10.3.0, GNU ld (GNU Binutils) 2.32) #2 SMP Thu Apr 21 16:09:24 JST 2022
  60. [ 0.000000] Machine model: SiPeed MAIX GO
  61. [ 0.000000] earlycon: sifive0 at MMIO 0x0000000038000000 (options '115200n8')
  62. [ 0.000000] printk: bootconsole [sifive0] enabled
  63. [ 0.000000] Zone ranges:
  64. [ 0.000000] DMA32 [mem 0x0000000080000000-0x00000000807fffff]
  65. [ 0.000000] Normal empty
  66. [ 0.000000] Movable zone start for each node
  67. [ 0.000000] Early memory node ranges
  68. [ 0.000000] node 0: [mem 0x0000000080000000-0x00000000807fffff]
  69. [ 0.000000] Initmem setup node 0 [mem 0x0000000080000000-0x00000000807fffff]
  70. [ 0.000000] riscv: ISA extensions acdfim
  71. [ 0.000000] riscv: ELF capabilities acdfim
  72. [ 0.000000] percpu: max_distance=0x16000 too large for vmalloc space 0x0
  73. [ 0.000000] percpu: Embedded 11 pages/cpu s15264 r0 d29792 u45056
  74. [ 0.000000] percpu: wasting 10 pages per chunk
  75. [ 0.000000] Built 1 zonelists, mobility grouping off. Total pages: 2020
  76. [ 0.000000] Kernel command line: earlycon console=ttySIF0
  77. [ 0.000000] Dentry cache hash table entries: 1024 (order: 1, 8192 bytes, linear)
  78. [ 0.000000] Inode-cache hash table entries: 512 (order: 0, 4096 bytes, linear)
  79. [ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
  80. [ 0.000000] Memory: 5980K/8192K available (964K kernel code, 137K rwdata, 205K rodata, 546K init, 66K bss, 2212K reserved, 0K cma-reserved)
  81. [ 0.000000] rcu: Hierarchical RCU implementation.
  82. [ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.
  83. [ 0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
  84. [ 0.000000] riscv-intc: 64 local interrupts mapped
  85. [ 0.000000] plic: interrupt-controller@c000000: mapped 65 interrupts with 2 handlers for 4 contexts.
  86. [ 0.000000] k210-clk: clock-controller: CPU running at 390 MHz
  87. [ 0.000000] clint: timer@2000000: timer running at 7800000 Hz
  88. [ 0.000000] clocksource: clint_clocksource: mask: 0xffffffffffffffff max_cycles: 0x3990be68b, max_idle_ns: 881590404272 ns
  89. [ 0.000001] sched_clock: 64 bits at 7MHz, resolution 128ns, wraps every 4398046511054ns
  90. [ 0.008193] Calibrating delay loop (skipped), value calculated using timer frequency.. 15.60 BogoMIPS (lpj=31200)
  91. [ 0.018250] pid_max: default: 4096 minimum: 301
  92. [ 0.022862] Mount-cache hash table entries: 512 (order: 0, 4096 bytes, linear)
  93. [ 0.029971] Mountpoint-cache hash table entries: 512 (order: 0, 4096 bytes, linear)
  94. [ 0.040239] rcu: Hierarchical SRCU implementation.
  95. [ 0.045118] smp: Bringing up secondary CPUs ...
  96. [ 0.050204] smp: Brought up 1 node, 2 CPUs
  97. [ 0.054336] devtmpfs: initialized
  98. [ 0.071519] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
  99. [ 0.080591] pinctrl core: initialized pinctrl subsystem
  100. [ 0.121163] clocksource: Switched to clocksource clint_clocksource
  101. [ 0.133221] workingset: timestamp_bits=62 max_order=11 bucket_order=0
  102. [ 0.180960] k210-sysctl 50440000.syscon: K210 system controller
  103. [ 0.196811] k210-rst 50440000.syscon:reset-controller: K210 reset controller
  104. [ 0.204879] cacheinfo: Unable to detect cache hierarchy for CPU 0
  105. [ 0.214087] i2c_dev: i2c /dev entries driver
  106. [ 0.222736] k210-fpioa 502b0000.pinmux: K210 FPIOA pin controller
  107. [ 0.236173] 38000000.serial: ttySIF0 at MMIO 0x38000000 (irq = 1, base_baud = 115200) is a SiFive UART v0
  108. [ 0.245104] printk: console [ttySIF0] enabled
  109. [ 0.245104] printk: console [ttySIF0] enabled
  110. [ 0.253726] printk: bootconsole [sifive0] disabled
  111. [ 0.253726] printk: bootconsole [sifive0] disabled
  112. [ 0.265588] panel@0 enforce active low on chipselect handle
  113. [ 0.282358] Freeing unused kernel image (initmem) memory: 540K
  114. [ 0.287492] This architecture does not have kernel memory protection.
  115. [ 0.293926] Run /init as init process
  116. __ _
  117. / / (_) ____ _ _ __ __
  118. / / | || _ \ | | | |\ \/ /
  119. / /___| || | | || |_| | > <
  120. /_____/|_||_| |_| \____|/_/\_\
  121. 64-bits RISC-V Kendryte K210 NOMMU
  122. / #
  123. ```
  124. To open a terminal console without re-flashing the board, the pyserial-miniterm
  125. host tool can be used.
  126. ```
  127. $ output/host/bin/pyserial-miniterm --raw --eol=LF /dev/ttyUSB0 115200
  128. ```
  129. The options "--raw" and "--eol=LF" are added here to avoid a double carriage
  130. return each time a command is entered.
  131. U-Boot SD-Card Boot
  132. -------------------
  133. The build procedure is similar to the built-in initramfs case.
  134. ```
  135. $ make sipeed_maix_go_sdcard_defconfig
  136. $ make
  137. ```
  138. The build process will generate two files under the output/images directory.
  139. * sdcard.img: The image file for the SD card filesystem. This image has 2
  140. partitions. The first partition is a vfat partition containing the kernel
  141. uImage and the board device tree binary. The second partition is the root
  142. filesystem with busybox installed. The second partition is formatted using
  143. ext2 (rev1).
  144. * uboot.bin: U-Boot bootable binary to load and boot the kernel from the SD
  145. card.
  146. The SD card can be prepared by writing the sdcard.img file, as follows.
  147. ```
  148. $ sudo dd if=output/images/sdcard.img of=/dev/sdX bs=1M
  149. $ sync
  150. $ eject /dev/sdX
  151. ```
  152. Where /dev/sdX is the device file name of the SD card. Once completed, the SD
  153. card can be inserted into the board and the U-Boot binary image written to the
  154. board boot flash using the kflash utility.
  155. ```
  156. $ output/host/bin/kflash -b 1500000 -p /dev/ttyUSB0 -t output/images/u-boot.bin
  157. ```
  158. The above command will program U-Boot image to the board boot ROM and open a
  159. terminal console once the u-boot.bin file is fully programmed. Reboot into the
  160. newly programmed environment by pressing the board reset button.
  161. The output will be similar to the following.
  162. ```
  163. U-Boot 2022.04 (Apr 21 2022 - 16:28:58 +0900)
  164. DRAM: 8 MiB
  165. Core: 34 devices, 17 uclasses, devicetree: separate
  166. WDT: Not starting watchdog@50400000
  167. MMC: spi@53000000:slot@0: 0
  168. Loading Environment from SPIFlash... SF: Detected gd25lq128 with page size 256 Bytes, erase size 4 KiB, total 16 MiB
  169. *** Warning - bad CRC, using default environment
  170. In: serial@38000000
  171. Out: serial@38000000
  172. Err: serial@38000000
  173. Hit any key to stop autoboot: 0
  174. 1717730 bytes read in 956 ms (1.7 MiB/s)
  175. 10502 bytes read in 11 ms (931.6 KiB/s)
  176. ## Booting kernel from Legacy Image at 80060000 ...
  177. Image Name: Linux
  178. Image Type: RISC-V Linux Kernel Image (uncompressed)
  179. Data Size: 1717666 Bytes = 1.6 MiB
  180. Load Address: 80000000
  181. Entry Point: 80000000
  182. Verifying Checksum ... OK
  183. ## Flattened Device Tree blob at 80400000
  184. Booting using the fdt blob at 0x80400000
  185. Loading Kernel Image
  186. Loading Device Tree to 00000000803fa000, end 00000000803ff905 ... OK
  187. Starting kernel ...
  188. [ 0.000000] Linux version 5.17.0 (foo@bar.com) (riscv64-buildroot-linux-uclibc-gcc.br_real (Buildroot 2022.02-560-g6a2b542a09-dirty) 10.3.0, GNU ld (GNU Binutils) 2.32) #1 SMP Thu Apr 21 16:29:10 JST 2022
  189. [ 0.000000] Machine model: SiPeed MAIX GO
  190. [ 0.000000] earlycon: sifive0 at MMIO 0x0000000038000000 (options '115200n8')
  191. [ 0.000000] printk: bootconsole [sifive0] enabled
  192. [ 0.000000] Zone ranges:
  193. [ 0.000000] DMA32 [mem 0x0000000080000000-0x00000000807fffff]
  194. [ 0.000000] Normal empty
  195. [ 0.000000] Movable zone start for each node
  196. [ 0.000000] Early memory node ranges
  197. [ 0.000000] node 0: [mem 0x0000000080000000-0x00000000807fffff]
  198. [ 0.000000] Initmem setup node 0 [mem 0x0000000080000000-0x00000000807fffff]
  199. [ 0.000000] riscv: ISA extensions acdfim
  200. [ 0.000000] riscv: ELF capabilities acdfim
  201. [ 0.000000] percpu: max_distance=0x16000 too large for vmalloc space 0x0
  202. [ 0.000000] percpu: Embedded 11 pages/cpu s15392 r0 d29664 u45056
  203. [ 0.000000] percpu: wasting 10 pages per chunk
  204. [ 0.000000] Built 1 zonelists, mobility grouping off. Total pages: 2020
  205. [ 0.000000] Kernel command line: earlycon console=ttySIF0 root=/dev/mmcblk0p2 rootwait ro
  206. [ 0.000000] Dentry cache hash table entries: 1024 (order: 1, 8192 bytes, linear)
  207. [ 0.000000] Inode-cache hash table entries: 512 (order: 0, 4096 bytes, linear)
  208. [ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
  209. [ 0.000000] Memory: 6156K/8192K available (1180K kernel code, 151K rwdata, 239K rodata, 102K init, 69K bss, 2036K reserved, 0K cma-reserved)
  210. [ 0.000000] rcu: Hierarchical RCU implementation.
  211. [ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.
  212. [ 0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
  213. [ 0.000000] riscv-intc: 64 local interrupts mapped
  214. [ 0.000000] plic: interrupt-controller@c000000: mapped 65 interrupts with 2 handlers for 4 contexts.
  215. [ 0.000000] k210-clk: clock-controller: CPU running at 390 MHz
  216. [ 0.000000] clint: timer@2000000: timer running at 7800000 Hz
  217. [ 0.000000] clocksource: clint_clocksource: mask: 0xffffffffffffffff max_cycles: 0x3990be68b, max_idle_ns: 881590404272 ns
  218. [ 0.000001] sched_clock: 64 bits at 7MHz, resolution 128ns, wraps every 4398046511054ns
  219. [ 0.008201] Calibrating delay loop (skipped), value calculated using timer frequency.. 15.60 BogoMIPS (lpj=31200)
  220. [ 0.018256] pid_max: default: 4096 minimum: 301
  221. [ 0.022875] Mount-cache hash table entries: 512 (order: 0, 4096 bytes, linear)
  222. [ 0.029983] Mountpoint-cache hash table entries: 512 (order: 0, 4096 bytes, linear)
  223. [ 0.040405] rcu: Hierarchical SRCU implementation.
  224. [ 0.045387] smp: Bringing up secondary CPUs ...
  225. [ 0.050501] smp: Brought up 1 node, 2 CPUs
  226. [ 0.054662] devtmpfs: initialized
  227. [ 0.072840] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
  228. [ 0.081918] pinctrl core: initialized pinctrl subsystem
  229. [ 0.124601] clocksource: Switched to clocksource clint_clocksource
  230. [ 0.137869] workingset: timestamp_bits=62 max_order=11 bucket_order=0
  231. [ 0.183507] k210-sysctl 50440000.syscon: K210 system controller
  232. [ 0.199987] k210-rst 50440000.syscon:reset-controller: K210 reset controller
  233. [ 0.209219] cacheinfo: Unable to detect cache hierarchy for CPU 0
  234. [ 0.221062] i2c_dev: i2c /dev entries driver
  235. [ 0.232254] k210-fpioa 502b0000.pinmux: K210 FPIOA pin controller
  236. [ 0.245342] 38000000.serial: ttySIF0 at MMIO 0x38000000 (irq = 1, base_baud = 115200) is a SiFive UART v0
  237. [ 0.254281] printk: console [ttySIF0] enabled
  238. [ 0.254281] printk: console [ttySIF0] enabled
  239. [ 0.262908] printk: bootconsole [sifive0] disabled
  240. [ 0.262908] printk: bootconsole [sifive0] disabled
  241. [ 0.274939] panel@0 enforce active low on chipselect handle
  242. [ 0.308760] mmc_spi spi3.0: SD/MMC host mmc0, no WP, no poweroff, cd polling
  243. [ 0.321220] Waiting for root device /dev/mmcblk0p2...
  244. [ 0.344805] mmc0: host does not support reading read-only switch, assuming write-enable
  245. [ 0.352142] mmc0: new SDHC card on SPI
  246. [ 0.358622] mmcblk0: mmc0:0000 SA16G 14.5 GiB
  247. [ 0.366636] random: fast init done
  248. [ 0.371323] mmcblk0: p1 p2
  249. [ 0.392887] random: get_random_bytes called from 0x000000008009b7d2 with crng_init=1
  250. [ 0.394338] VFS: Mounted root (ext2 filesystem) readonly on device 179:2.
  251. [ 0.411277] devtmpfs: mounted
  252. [ 0.413836] Freeing unused kernel image (initmem) memory: 96K
  253. [ 0.419267] This architecture does not have kernel memory protection.
  254. [ 0.425683] Run /sbin/init as init process
  255. [ 0.594251] random: crng init done
  256. __ _
  257. / / (_) ____ _ _ __ __
  258. / / | || _ \ | | | |\ \/ /
  259. / /___| || | | || |_| | > <
  260. /_____/|_||_| |_| \____|/_/\_\
  261. 64-bits RISC-V Kendryte K210 NOMMU
  262. / #
  263. ```
  264. Of note is that the kernel mounts the SD card as read-only by default to avoid
  265. corruptions of the ext2 root file system when the board is powered down. This
  266. is recommended as this board does not support clean shutdown or halt.
  267. Similarly to the initramfs build case, a console can be open without
  268. re-flashing the board using the host tool pyserial-miniterm.
  269. ```
  270. $ output/host/bin/pyserial-miniterm --raw --eol=LF /dev/ttyUSB0 115200
  271. ```