readme.txt 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  1. Sipeed MAIX-Bit Board
  2. =====================
  3. The Sipeed MAXI-Bit 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_bit_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_bit_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. Both configuration files will also compile and install the kflash and
  36. pyserial-miniterm host utilities to program bootable image files to the board
  37. and open a serial terminal console.
  38. Direct Linux Kernel Boot
  39. -------------------------
  40. Using the sipeed_maix_bit_defconfig configuration, the bootable kernel binary
  41. image is built as follows.
  42. ```
  43. $ make sipeed_maix_bit_defconfig
  44. $ make
  45. ```
  46. The bootable binary image is the output/images/loader.bin file. This image file
  47. can be written to the board boot ROM using the kflash utility.
  48. ```
  49. $ output/host/bin/kflash -b 1500000 -p /dev/ttyUSB0 -t output/images/loader.bin
  50. ```
  51. Once the kernel image file is fully programmed, a terminal console is open and
  52. the board can be rebooted by pressing the reset button on the board (if it does
  53. not reboot automatically).
  54. The output will be similar to the following.
  55. ```
  56. [ 0.000000] Linux version 5.18.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 14:30:02 JST 2022
  57. [ 0.000000] Machine model: SiPeed MAIX BiT
  58. [ 0.000000] earlycon: sifive0 at MMIO 0x0000000038000000 (options '115200n8')
  59. [ 0.000000] printk: bootconsole [sifive0] enabled
  60. [ 0.000000] Zone ranges:
  61. [ 0.000000] DMA32 [mem 0x0000000080000000-0x00000000807fffff]
  62. [ 0.000000] Normal empty
  63. [ 0.000000] Movable zone start for each node
  64. [ 0.000000] Early memory node ranges
  65. [ 0.000000] node 0: [mem 0x0000000080000000-0x00000000807fffff]
  66. [ 0.000000] Initmem setup node 0 [mem 0x0000000080000000-0x00000000807fffff]
  67. [ 0.000000] riscv: ISA extensions acdfim
  68. [ 0.000000] riscv: ELF capabilities acdfim
  69. [ 0.000000] percpu: max_distance=0x16000 too large for vmalloc space 0x0
  70. [ 0.000000] percpu: Embedded 11 pages/cpu s15264 r0 d29792 u45056
  71. [ 0.000000] percpu: wasting 10 pages per chunk
  72. [ 0.000000] Built 1 zonelists, mobility grouping off. Total pages: 2020
  73. [ 0.000000] Kernel command line: earlycon console=ttySIF0
  74. [ 0.000000] Dentry cache hash table entries: 1024 (order: 1, 8192 bytes, linear)
  75. [ 0.000000] Inode-cache hash table entries: 512 (order: 0, 4096 bytes, linear)
  76. [ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
  77. [ 0.000000] Memory: 5996K/8192K available (964K kernel code, 137K rwdata, 205K rodata, 530K init, 66K bss, 2196K reserved, 0K cma-reserved)
  78. [ 0.000000] rcu: Hierarchical RCU implementation.
  79. [ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.
  80. [ 0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
  81. [ 0.000000] riscv-intc: 64 local interrupts mapped
  82. [ 0.000000] plic: interrupt-controller@c000000: mapped 65 interrupts with 2 handlers for 4 contexts.
  83. [ 0.000000] k210-clk: clock-controller: CPU running at 390 MHz
  84. [ 0.000000] clint: timer@2000000: timer running at 7800000 Hz
  85. [ 0.000000] clocksource: clint_clocksource: mask: 0xffffffffffffffff max_cycles: 0x3990be68b, max_idle_ns: 881590404272 ns
  86. [ 0.000001] sched_clock: 64 bits at 7MHz, resolution 128ns, wraps every 4398046511054ns
  87. [ 0.008188] Calibrating delay loop (skipped), value calculated using timer frequency.. 15.60 BogoMIPS (lpj=31200)
  88. [ 0.018250] pid_max: default: 4096 minimum: 301
  89. [ 0.022860] Mount-cache hash table entries: 512 (order: 0, 4096 bytes, linear)
  90. [ 0.029972] Mountpoint-cache hash table entries: 512 (order: 0, 4096 bytes, linear)
  91. [ 0.040244] rcu: Hierarchical SRCU implementation.
  92. [ 0.045121] smp: Bringing up secondary CPUs ...
  93. [ 0.050225] smp: Brought up 1 node, 2 CPUs
  94. [ 0.054355] devtmpfs: initialized
  95. [ 0.071168] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
  96. [ 0.080240] pinctrl core: initialized pinctrl subsystem
  97. [ 0.119221] clocksource: Switched to clocksource clint_clocksource
  98. [ 0.131498] workingset: timestamp_bits=62 max_order=11 bucket_order=0
  99. [ 0.176943] k210-sysctl 50440000.syscon: K210 system controller
  100. [ 0.193558] k210-rst 50440000.syscon:reset-controller: K210 reset controller
  101. [ 0.201526] cacheinfo: Unable to detect cache hierarchy for CPU 0
  102. [ 0.211611] i2c_dev: i2c /dev entries driver
  103. [ 0.221375] k210-fpioa 502b0000.pinmux: K210 FPIOA pin controller
  104. [ 0.233591] 38000000.serial: ttySIF0 at MMIO 0x38000000 (irq = 1, base_baud = 115200) is a SiFive UART v0
  105. [ 0.242529] printk: console [ttySIF0] enabled
  106. [ 0.242529] printk: console [ttySIF0] enabled
  107. [ 0.251165] printk: bootconsole [sifive0] disabled
  108. [ 0.251165] printk: bootconsole [sifive0] disabled
  109. [ 0.274348] Freeing unused kernel image (initmem) memory: 524K
  110. [ 0.279504] This architecture does not have kernel memory protection.
  111. [ 0.285908] Run /init as init process
  112. __ _
  113. / / (_) ____ _ _ __ __
  114. / / | || _ \ | | | |\ \/ /
  115. / /___| || | | || |_| | > <
  116. /_____/|_||_| |_| \____|/_/\_\
  117. 64-bits RISC-V Kendryte K210 NOMMU
  118. / #
  119. ```
  120. To open a terminal console without re-flashing the board, the pyserial-miniterm
  121. host tool can be used.
  122. ```
  123. $ output/host/bin/pyserial-miniterm --raw --eol=LF /dev/ttyUSB0 115200
  124. ```
  125. The options "--raw" and "--eol=LF" are added here to avoid a double carriage
  126. return each time a command is entered.
  127. U-Boot SD-Card Boot
  128. -------------------
  129. The build procedure is similar to the direct Linux kernel boot case.
  130. ```
  131. $ make sipeed_maix_bit_sdcard_defconfig
  132. $ make
  133. ```
  134. The build process will generate two files under the output/images directory.
  135. * sdcard.img: The image file for the SD card filesystem. This image has 2
  136. partitions. The first partition is a vfat partition containing the kernel
  137. uImage and the board device tree binary. The second partition is the root
  138. filesystem with busybox installed. The second partition is formatted using
  139. ext2 (rev1).
  140. * uboot.bin: U-Boot bootable binary to load and boot the kernel from the SD
  141. card.
  142. The SD card can be prepared by writing the sdcard.img file, as follows.
  143. ```
  144. $ sudo dd if=output/images/sdcard.img of=/dev/sdX bs=1M
  145. $ sync
  146. $ eject /dev/sdX
  147. ```
  148. Where /dev/sdX is the device file name of the SD card. Once completed, the SD
  149. card can be inserted into the board and the U-Boot binary image written to the
  150. board boot flash using the kflash utility.
  151. ```
  152. $ output/host/bin/kflash -b 1500000 -p /dev/ttyUSB0 -t output/images/u-boot.bin
  153. ```
  154. The above command will program U-Boot image to the board boot ROM and open a
  155. terminal console once the u-boot.bin file is fully programmed. Reboot into the
  156. newly programmed environment by pressing the board reset button.
  157. The output will be similar to the following.
  158. ```
  159. U-Boot 2022.04 (May 24 2022 - 17:08:34 +0900)
  160. DRAM: 8 MiB
  161. Core: 34 devices, 17 uclasses, devicetree: separate
  162. WDT: Not starting watchdog@50400000
  163. MMC: spi@53000000:slot@0: 0
  164. Loading Environment from SPIFlash... SF: Detected gd25lq128 with page size 256 Bytes, erase size 4 KiB, total 16 MiB
  165. *** Warning - bad CRC, using default environment
  166. In: serial@38000000
  167. Out: serial@38000000
  168. Err: serial@38000000
  169. Hit any key to stop autoboot: 0
  170. 1668562 bytes read in 933 ms (1.7 MiB/s)
  171. 10468 bytes read in 11 ms (928.7 KiB/s)
  172. ## Booting kernel from Legacy Image at 80060000 ...
  173. Image Name: Linux
  174. Image Type: RISC-V Linux Kernel Image (uncompressed)
  175. Data Size: 1668498 Bytes = 1.6 MiB
  176. Load Address: 80000000
  177. Entry Point: 80000000
  178. Verifying Checksum ... OK
  179. ## Flattened Device Tree blob at 80400000
  180. Booting using the fdt blob at 0x80400000
  181. Loading Kernel Image
  182. Loading Device Tree to 00000000803fa000, end 00000000803ff8e3 ... OK
  183. Starting kernel ...
  184. [ 0.000000] Linux version 5.18.0 (foo@bar.com) (riscv64-buildroot-linux-uclibc-gcc.br_real (Buildroot 2022.02-1056-gc356b62332) 10.3.0, GNU ld (GNU Binutils) 2.37) #1 SMP Tue May 24 06:45:04 JST 2022
  185. [ 0.000000] Machine model: SiPeed MAIX BiT
  186. [ 0.000000] earlycon: sifive0 at MMIO 0x0000000038000000 (options '115200n8')
  187. [ 0.000000] printk: bootconsole [sifive0] enabled
  188. [ 0.000000] Zone ranges:
  189. [ 0.000000] DMA32 [mem 0x0000000080000000-0x00000000807fffff]
  190. [ 0.000000] Normal empty
  191. [ 0.000000] Movable zone start for each node
  192. [ 0.000000] Early memory node ranges
  193. [ 0.000000] node 0: [mem 0x0000000080000000-0x00000000807fffff]
  194. [ 0.000000] Initmem setup node 0 [mem 0x0000000080000000-0x00000000807fffff]
  195. [ 0.000000] riscv: base ISA extensions acdfim
  196. [ 0.000000] riscv: ELF capabilities acdfim
  197. [ 0.000000] percpu: max_distance=0x16000 too large for vmalloc space 0x0
  198. [ 0.000000] percpu: Embedded 11 pages/cpu s15648 r0 d29408 u45056
  199. [ 0.000000] percpu: wasting 10 pages per chunk
  200. [ 0.000000] Built 1 zonelists, mobility grouping off. Total pages: 2020
  201. [ 0.000000] Kernel command line: earlycon console=ttySIF0 root=/dev/mmcblk0p2 rootwait ro
  202. [ 0.000000] Dentry cache hash table entries: 1024 (order: 1, 8192 bytes, linear)
  203. [ 0.000000] Inode-cache hash table entries: 512 (order: 0, 4096 bytes, linear)
  204. [ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
  205. [ 0.000000] Memory: 6204K/8192K available (1134K kernel code, 150K rwdata, 239K rodata, 100K init, 68K bss, 1988K reserved, 0K cma-reserved)
  206. [ 0.000000] rcu: Hierarchical RCU implementation.
  207. [ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.
  208. [ 0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
  209. [ 0.000000] riscv-intc: 64 local interrupts mapped
  210. [ 0.000000] plic: interrupt-controller@c000000: mapped 65 interrupts with 2 handlers for 4 contexts.
  211. [ 0.000000] k210-clk: clock-controller: CPU running at 390 MHz
  212. [ 0.000000] clint: timer@2000000: timer running at 7800000 Hz
  213. [ 0.000000] clocksource: clint_clocksource: mask: 0xffffffffffffffff max_cycles: 0x3990be68b, max_idle_ns: 881590404272 ns
  214. [ 0.000001] sched_clock: 64 bits at 7MHz, resolution 128ns, wraps every 4398046511054ns
  215. [ 0.008194] Calibrating delay loop (skipped), value calculated using timer frequency.. 15.60 BogoMIPS (lpj=31200)
  216. [ 0.018257] pid_max: default: 4096 minimum: 301
  217. [ 0.022869] Mount-cache hash table entries: 512 (order: 0, 4096 bytes, linear)
  218. [ 0.029982] Mountpoint-cache hash table entries: 512 (order: 0, 4096 bytes, linear)
  219. [ 0.040424] rcu: Hierarchical SRCU implementation.
  220. [ 0.045397] smp: Bringing up secondary CPUs ...
  221. [ 0.050518] smp: Brought up 1 node, 2 CPUs
  222. [ 0.054676] devtmpfs: initialized
  223. [ 0.072365] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
  224. [ 0.081396] pinctrl core: initialized pinctrl subsystem
  225. [ 0.123762] clocksource: Switched to clocksource clint_clocksource
  226. [ 0.136796] workingset: timestamp_bits=62 max_order=11 bucket_order=0
  227. [ 0.181768] k210-sysctl 50440000.syscon: K210 system controller
  228. [ 0.198397] k210-rst 50440000.syscon:reset-controller: K210 reset controller
  229. [ 0.207373] cacheinfo: Unable to detect cache hierarchy for CPU 0
  230. [ 0.218270] spi spi1.0: setup: ignoring unsupported mode bits a00
  231. [ 0.224786] i2c_dev: i2c /dev entries driver
  232. [ 0.235984] k210-fpioa 502b0000.pinmux: K210 FPIOA pin controller
  233. [ 0.249172] 38000000.serial: ttySIF0 at MMIO 0x38000000 (irq = 1, base_baud = 115200) is a SiFive UART v0
  234. [ 0.258078] printk: console [ttySIF0] enabled
  235. [ 0.258078] printk: console [ttySIF0] enabled
  236. [ 0.266707] printk: bootconsole [sifive0] disabled
  237. [ 0.266707] printk: bootconsole [sifive0] disabled
  238. [ 0.307910] mmc_spi spi3.0: SD/MMC host mmc0, no WP, no poweroff, cd polling
  239. [ 0.319869] Waiting for root device /dev/mmcblk0p2...
  240. [ 0.345016] mmc0: host does not support reading read-only switch, assuming write-enable
  241. [ 0.352330] mmc0: new SDHC card on SPI
  242. [ 0.359338] mmcblk0: mmc0:0000 SA16G 14.5 GiB
  243. [ 0.367589] random: fast init done
  244. [ 0.371533] mmcblk0: p1 p2
  245. [ 0.391794] random: get_random_bytes called from 0x0000000080095ae8 with crng_init=1
  246. [ 0.393388] VFS: Mounted root (ext2 filesystem) readonly on device 179:2.
  247. [ 0.411377] devtmpfs: mounted
  248. [ 0.413922] Freeing unused kernel image (initmem) memory: 96K
  249. [ 0.419344] This architecture does not have kernel memory protection.
  250. [ 0.425777] Run /sbin/init as init process
  251. [ 0.718314] random: crng init done
  252. [ 0.799903] init (1): drop_caches: 3
  253. __ _
  254. / / (_) ____ _ _ __ __
  255. / / | || _ \ | | | |\ \/ /
  256. / /___| || | | || |_| | > <
  257. /_____/|_||_| |_| \____|/_/\_\
  258. 64-bits RISC-V Kendryte K210 NOMMU
  259. / #
  260. ```
  261. Of note is that the kernel mounts the SD card as read-only by default to avoid
  262. corruptions of the ext2 root file system when the board is powered down. This
  263. is recommended as this board does not support clean shutdown or halt.
  264. Similarly to the initramfs build case, a console can be open without
  265. re-flashing the board using the host tool pyserial-miniterm.
  266. ```
  267. $ output/host/bin/pyserial-miniterm --raw --eol=LF /dev/ttyUSB0 115200
  268. ```