RISCV学习(2)玄铁C910处理器体验

笔者有幸参加了平头哥RISCV开发者大赛,体验了一下基于玄铁C910内核的矽速开发板。

1、开发板介绍

LicheePi 4A 是基于 Lichee Module 4A 核心板的 高性能 RISC-V Linux 开发板。

  • TH1520 为主控核心(4xC910@1.85G, RV64GCV,4TOPS@int8 NPU, 50GFLOP GPU)
  • 板载最大 16GB 64bit LPDDR4X,128GB eMMC,
  • 支持 HDMI+MIPI 双4K 显示输出,
  • 支持 4K 摄像头接入,
  • 支持双千兆网口(其中一个支持POE供电)
  • 4 个 USB3.0 接口,
  • 多种音频输入输出(由专用 C906 核心处理)。-

在这里插入图片描述

2、GCC工具链使用

GCC的工具链安装,参考Licheepi GCC工具链安装

  • 查看gcc的工具链版本
root@lpi4a:~# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/riscv64-linux-gnu/10/lto-wrapper
Target: riscv64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 10.4.0-8revyos2.4' --with-bugurl=file:///usr/share/doc/gcc-10/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-10 --program-prefix=riscv64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libitm --disable-libsanitizer --disable-libquadmath --disable-libquadmath-support --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --disable-multilib --with-arch=rv64gcv0p7_zfh_xtheadc --with-abi=lp64d --enable-checking=release --build=riscv64-linux-gnu --host=riscv64-linux-gnu --target=riscv64-linux-gnu
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 10.4.0 (Debian 10.4.0-8revyos2.4)
  • 直接编译hello.c程序,提示需要设置xthreadc的版本,其实并不知道如何处理,经过查资料后发现,需要指明架构和二进制接口版本
gcc hello.c
Assembler messages:
Error: x ISA extension `xtheadc' must be set with the versions
  • 然后根据提示指明了架构,发现对应的头文件找不到,怀疑工具链没安装对,重新安装了,但是依然没什么用,之后又重启了,还是不行,看来还得继续找问题。
gcc hello.c   -march=rv64imc
In file included from /usr/include/features.h:513,
                 from /usr/include/riscv64-linux-gnu/bits/libc-header-start.h:33,
                 from /usr/include/stdio.h:27,
                 from hello.c:1:
/usr/include/riscv64-linux-gnu/gnu/stubs.h:14:11: fatal error: gnu/stubs-lp64.h: No such file or directory
   14 | # include <gnu/stubs-lp64.h>
  • 然后就看一下该文件的内容,以及去该目录下面搜索了有哪些文件
root@lpi4a:~# ls /usr/include/riscv64-linux-gnu/gnu/stubs.h
/usr/include/riscv64-linux-gnu/gnu/stubs.h
root@lpi4a:~# cat /usr/include/riscv64-linux-gnu/gnu/stubs.h
/* This file is automatically generated.
   This file selects the right generated file of `__stub_FUNCTION' macros
   based on the architecture being compiled for.  */

#include <bits/wordsize.h>

#if __WORDSIZE == 32 && defined __riscv_float_abi_soft
# include <gnu/stubs-ilp32.h>
#endif
#if __WORDSIZE == 32 && defined __riscv_float_abi_double
# include <gnu/stubs-ilp32d.h>
#endif
#if __WORDSIZE == 64 && defined __riscv_float_abi_soft
# include <gnu/stubs-lp64.h>
#endif
#if __WORDSIZE == 64 && defined __riscv_float_abi_double
# include <gnu/stubs-lp64d.h>
#endif
ls /usr/include/riscv64-linux-gnu/gnu/
lib-names-lp64d.h  lib-names.h  libc-version.h  stubs-lp64d.h  stubs.h
  • 看到这里就突然知道,需要指明对应的版本,不然相应的头文件找不到,果然和常规的GCC工具链使用还是有区别,增加了相应的abl版本后,发现march也需要版本,
gcc hello.c -march=rv64imc -mabi=lp64d
cc1: error: requested ABI requires '-march' to subsume the 'D' extension
  • 在架构方面增加了d,发现还是不对,提示第一个指令集是e/i/g,还得修改
gcc hello.c -march=rv64dimc -mabi=lp64d
gcc: error: '-march=rv64dimc': first ISA subset must be 'e', 'i' or 'g'
  • 然后修改了abl的,改成了e,发现abl的版本里面没有这个,必须是lp64d,所以又得改回去
gcc hello.c -march=rv64imc -mabi=lp64e
gcc: error: unrecognized argument in option '-mabi=lp64e'
gcc: note: valid arguments to '-mabi=' are: ilp32 ilp32d ilp32e ilp32f lp64 lp64d lp64dv lp64f lp64v; did you mean 'lp64'?

  • 最后在march指令集的后面增加d,可以了,终于gcc工具链可以正常使用了。
root@lpi4a:~# gcc hello.c -march=rv64imafd -mabi=lp64d
root@lpi4a:~#

  • readelf工具可以查看其out文件信息,RISC-V的machine的64位机器版本
root@lpi4a:~# readelf -a a.out
ELF Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
  Class:                             ELF64
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              DYN (Position-Independent Executable file)
  Machine:                           RISC-V
  Version:                           0x1
  Entry point address:               0x5b0
  Start of program headers:          64 (bytes into file)
  Start of section headers:          7168 (bytes into file)
  Flags:                             0x5, RVC, double-float ABI
  Size of this header:               64 (bytes)
  Size of program headers:           56 (bytes)
  Number of program headers:         10
  Size of section headers:           64 (bytes)
  Number of section headers:         28
  Section header string table index: 27
  • 再看看其他Section、Segment等信息
Section Headers:
  [Nr] Name              Type             Address           Offset
       Size              EntSize          Flags  Link  Info  Align
  [ 0]                   NULL             0000000000000000  00000000
       0000000000000000  0000000000000000           0     0     0
  [ 1] .interp           PROGBITS         0000000000000270  00000270
       0000000000000021  0000000000000000   A       0     0     1
  [ 2] .note.gnu.bu[...] NOTE             0000000000000294  00000294
       0000000000000024  0000000000000000   A       0     0     4
  [ 3] .note.ABI-tag     NOTE             00000000000002b8  000002b8
       0000000000000020  0000000000000000   A       0     0     4
  [ 4] .gnu.hash         GNU_HASH         00000000000002d8  000002d8
       0000000000000024  0000000000000000   A       5     0     8
  [ 5] .dynsym           DYNSYM           0000000000000300  00000300
       00000000000000c0  0000000000000018   A       6     2     8
  [ 6] .dynstr           STRTAB           00000000000003c0  000003c0
       000000000000007d  0000000000000000   A       0     0     1
  [ 7] .gnu.version      VERSYM           000000000000043e  0000043e
       0000000000000010  0000000000000002   A       5     0     2
  [ 8] .gnu.version_r    VERNEED          0000000000000450  00000450
       0000000000000030  0000000000000000   A       6     1     8
  [ 9] .rela.dyn         RELA             0000000000000480  00000480
       00000000000000c0  0000000000000018   A       5     0     8
  [10] .rela.plt         RELA             0000000000000540  00000540
       0000000000000030  0000000000000018  AI       5    21     8
  [11] .plt              PROGBITS         0000000000000570  00000570
       0000000000000040  0000000000000010  AX       0     0     16
  [12] .text             PROGBITS         00000000000005b0  000005b0
       0000000000000108  0000000000000000  AX       0     0     16
  [13] .rodata           PROGBITS         00000000000006b8  000006b8
       0000000000000015  0000000000000000   A       0     0     8
  [14] .eh_frame_hdr     PROGBITS         00000000000006d0  000006d0
       0000000000000014  0000000000000000   A       0     0     4
  [15] .eh_frame         PROGBITS         00000000000006e8  000006e8
       000000000000002c  0000000000000000   A       0     0     8
  [16] .preinit_array    PREINIT_ARRAY    0000000000001e08  00000e08
       0000000000000008  0000000000000008  WA       0     0     1
  [17] .init_array       INIT_ARRAY       0000000000001e10  00000e10
       0000000000000008  0000000000000008  WA       0     0     8
  [18] .fini_array       FINI_ARRAY       0000000000001e18  00000e18
       0000000000000008  0000000000000008  WA       0     0     8
  [19] .dynamic          DYNAMIC          0000000000001e20  00000e20
       00000000000001e0  0000000000000010  WA       6     0     8
  [20] .data             PROGBITS         0000000000002000  00001000
       0000000000000008  0000000000000000  WA       0     0     8
  [21] .got              PROGBITS         0000000000002008  00001008
       0000000000000048  0000000000000008  WA       0     0     8
  [22] .bss              NOBITS           0000000000002050  00001050
       0000000000000008  0000000000000000  WA       0     0     1
  [23] .comment          PROGBITS         0000000000000000  00001050
       0000000000000027  0000000000000001  MS       0     0     1
  [24] .riscv.attributes RISCV_ATTRIBUTE  0000000000000000  00001077
       0000000000000106  0000000000000000           0     0     1
  [25] .symtab           SYMTAB           0000000000000000  00001180
       0000000000000630  0000000000000018          26    47     8
  [26] .strtab           STRTAB           0000000000000000  000017b0
       000000000000033c  0000000000000000           0     0     1
  [27] .shstrtab         STRTAB           0000000000000000  00001aec
       000000000000010f  0000000000000000           0     0     1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
  L (link order), O (extra OS processing required), G (group), T (TLS),
  C (compressed), x (unknown), o (OS specific), E (exclude),
  D (mbind), p (processor specific)

There are no section groups in this file.

Program Headers:
  Type           Offset             VirtAddr           PhysAddr
                 FileSiz            MemSiz              Flags  Align
  PHDR           0x0000000000000040 0x0000000000000040 0x0000000000000040
                 0x0000000000000230 0x0000000000000230  R      0x8
  INTERP         0x0000000000000270 0x0000000000000270 0x0000000000000270
                 0x0000000000000021 0x0000000000000021  R      0x1
      [Requesting program interpreter: /lib/ld-linux-riscv64-lp64d.so.1]
  RISCV_ATTRIBUT 0x0000000000001077 0x0000000000000000 0x0000000000000000
                 0x0000000000000106 0x0000000000000000  R      0x1
  LOAD           0x0000000000000000 0x0000000000000000 0x0000000000000000
                 0x0000000000000714 0x0000000000000714  R E    0x1000
  LOAD           0x0000000000000e08 0x0000000000001e08 0x0000000000001e08
                 0x0000000000000248 0x0000000000000250  RW     0x1000
  DYNAMIC        0x0000000000000e20 0x0000000000001e20 0x0000000000001e20
                 0x00000000000001e0 0x00000000000001e0  RW     0x8
  NOTE           0x0000000000000294 0x0000000000000294 0x0000000000000294
                 0x0000000000000044 0x0000000000000044  R      0x4
  GNU_EH_FRAME   0x00000000000006d0 0x00000000000006d0 0x00000000000006d0
                 0x0000000000000014 0x0000000000000014  R      0x4
  GNU_STACK      0x0000000000000000 0x0000000000000000 0x0000000000000000
                 0x0000000000000000 0x0000000000000000  RW     0x10
  GNU_RELRO      0x0000000000000e08 0x0000000000001e08 0x0000000000001e08
                 0x00000000000001f8 0x00000000000001f8  R      0x1

 Section to Segment mapping:
  Segment Sections...
   00
   01     .interp
   02     .riscv.attributes
   03     .interp .note.gnu.build-id .note.ABI-tag .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt .plt .text .rodata .eh_frame_hdr .eh_frame
   04     .preinit_array .init_array .fini_array .dynamic .data .got .bss
   05     .dynamic
   06     .note.gnu.build-id .note.ABI-tag
   07     .eh_frame_hdr
   08
   09     .preinit_array .init_array .fini_array .dynamic

Dynamic section at offset 0xe20 contains 26 entries:
  Tag        Type                         Name/Value
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
 0x0000000000000020 (PREINIT_ARRAY)      0x1e08
 0x0000000000000021 (PREINIT_ARRAYSZ)    8 (bytes)
 0x0000000000000019 (INIT_ARRAY)         0x1e10
 0x000000000000001b (INIT_ARRAYSZ)       8 (bytes)
 0x000000000000001a (FINI_ARRAY)         0x1e18
 0x000000000000001c (FINI_ARRAYSZ)       8 (bytes)
 0x000000006ffffef5 (GNU_HASH)           0x2d8
 0x0000000000000005 (STRTAB)             0x3c0
 0x0000000000000006 (SYMTAB)             0x300
 0x000000000000000a (STRSZ)              125 (bytes)
 0x000000000000000b (SYMENT)             24 (bytes)
 0x0000000000000015 (DEBUG)              0x0
 0x0000000000000003 (PLTGOT)             0x2008
 0x0000000000000002 (PLTRELSZ)           48 (bytes)
 0x0000000000000014 (PLTREL)             RELA
 0x0000000000000017 (JMPREL)             0x540
 0x0000000000000007 (RELA)               0x480
 0x0000000000000008 (RELASZ)             240 (bytes)
 0x0000000000000009 (RELAENT)            24 (bytes)
 0x000000006ffffffb (FLAGS_1)            Flags: PIE
 0x000000006ffffffe (VERNEED)            0x450
 0x000000006fffffff (VERNEEDNUM)         1
 0x000000006ffffff0 (VERSYM)             0x43e
 0x000000006ffffff9 (RELACOUNT)          5
 0x0000000000000000 (NULL)               0x0

Relocation section '.rela.dyn' at offset 0x480 contains 8 entries:
  Offset          Info           Type           Sym. Value    Sym. Name + Addend
000000001e08  000000000003 R_RISCV_RELATIVE                     5d2
000000001e10  000000000003 R_RISCV_RELATIVE                     680
000000001e18  000000000003 R_RISCV_RELATIVE                     640
000000002000  000000000003 R_RISCV_RELATIVE                     2000
000000002038  000000000003 R_RISCV_RELATIVE                     684
000000002030  000300000002 R_RISCV_64        0000000000000000 _ITM_deregisterTM[...] + 0
000000002040  000500000002 R_RISCV_64        0000000000000000 __cxa_finalize@GLIBC_2.27 + 0
000000002048  000600000002 R_RISCV_64        0000000000000000 _ITM_registerTMCl[...] + 0

Relocation section '.rela.plt' at offset 0x540 contains 2 entries:
  Offset          Info           Type           Sym. Value    Sym. Name + Addend
000000002018  000200000005 R_RISCV_JUMP_SLOT 0000000000000000 __libc_start_main@GLIBC_2.34 + 0
000000002020  000400000005 R_RISCV_JUMP_SLOT 0000000000000000 puts@GLIBC_2.27 + 0

The decoding of unwind sections for machine type RISC-V is not currently supported.

Symbol table '.dynsym' contains 8 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 00000000000005b0     0 SECTION LOCAL  DEFAULT   12 .text
     2: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _[...]@GLIBC_2.34 (2)
     3: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND _ITM_deregisterT[...]
     4: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND puts@GLIBC_2.27 (3)
     5: 0000000000000000     0 FUNC    WEAK   DEFAULT  UND _[...]@GLIBC_2.27 (3)
     6: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND _ITM_registerTMC[...]
     7: 0000000000000684    52 FUNC    GLOBAL DEFAULT   12 main

Symbol table '.symtab' contains 66 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 0000000000000270     0 SECTION LOCAL  DEFAULT    1 .interp
     2: 0000000000000294     0 SECTION LOCAL  DEFAULT    2 .note.gnu.build-id
     3: 00000000000002b8     0 SECTION LOCAL  DEFAULT    3 .note.ABI-tag
     4: 00000000000002d8     0 SECTION LOCAL  DEFAULT    4 .gnu.hash
     5: 0000000000000300     0 SECTION LOCAL  DEFAULT    5 .dynsym
     6: 00000000000003c0     0 SECTION LOCAL  DEFAULT    6 .dynstr
     7: 000000000000043e     0 SECTION LOCAL  DEFAULT    7 .gnu.version
     8: 0000000000000450     0 SECTION LOCAL  DEFAULT    8 .gnu.version_r
     9: 0000000000000480     0 SECTION LOCAL  DEFAULT    9 .rela.dyn
    10: 0000000000000540     0 SECTION LOCAL  DEFAULT   10 .rela.plt
    11: 0000000000000570     0 SECTION LOCAL  DEFAULT   11 .plt
    12: 00000000000005b0     0 SECTION LOCAL  DEFAULT   12 .text
    13: 00000000000006b8     0 SECTION LOCAL  DEFAULT   13 .rodata
    14: 00000000000006d0     0 SECTION LOCAL  DEFAULT   14 .eh_frame_hdr
    15: 00000000000006e8     0 SECTION LOCAL  DEFAULT   15 .eh_frame
    16: 0000000000001e08     0 SECTION LOCAL  DEFAULT   16 .preinit_array
    17: 0000000000001e10     0 SECTION LOCAL  DEFAULT   17 .init_array
    18: 0000000000001e18     0 SECTION LOCAL  DEFAULT   18 .fini_array
    19: 0000000000001e20     0 SECTION LOCAL  DEFAULT   19 .dynamic
    20: 0000000000002000     0 SECTION LOCAL  DEFAULT   20 .data
    21: 0000000000002008     0 SECTION LOCAL  DEFAULT   21 .got
    22: 0000000000002050     0 SECTION LOCAL  DEFAULT   22 .bss
    23: 0000000000000000     0 SECTION LOCAL  DEFAULT   23 .comment
    24: 0000000000000000     0 SECTION LOCAL  DEFAULT   24 .riscv.attributes
    25: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS Scrt1.o
    26: 00000000000002b8    32 OBJECT  LOCAL  DEFAULT    3 __abi_tag
    27: 00000000000005b0     0 NOTYPE  LOCAL  DEFAULT   12 $xrv64i2p0_m2p0_[...]
    28: 00000000000005d2     0 NOTYPE  LOCAL  DEFAULT   12 load_gp
    29: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS crtstuff.c
    30: 00000000000005e0     0 NOTYPE  LOCAL  DEFAULT   12 $xrv64i2p0_m2p0_[...]
    31: 00000000000005e0     0 FUNC    LOCAL  DEFAULT   12 deregister_tm_clones
    32: 0000000000000610     0 FUNC    LOCAL  DEFAULT   12 register_tm_clones
    33: 0000000000000640     0 FUNC    LOCAL  DEFAULT   12 __do_global_dtors_aux
    34: 0000000000002050     1 OBJECT  LOCAL  DEFAULT   22 completed.0
    35: 0000000000001e18     0 OBJECT  LOCAL  DEFAULT   18 __do_global_dtor[...]
    36: 0000000000000680     0 FUNC    LOCAL  DEFAULT   12 frame_dummy
    37: 0000000000001e10     0 OBJECT  LOCAL  DEFAULT   17 __frame_dummy_in[...]
    38: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS hello.c
    39: 0000000000000684     0 NOTYPE  LOCAL  DEFAULT   12 $xrv64i2p0_m2p0_[...]
    40: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS crtstuff.c
    41: 0000000000000710     0 OBJECT  LOCAL  DEFAULT   15 __FRAME_END__
    42: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS
    43: 0000000000000570     0 OBJECT  LOCAL  DEFAULT  ABS _PROCEDURE_LINKA[...]
    44: 0000000000001e20     0 OBJECT  LOCAL  DEFAULT  ABS _DYNAMIC
    45: 00000000000006d0     0 NOTYPE  LOCAL  DEFAULT   14 __GNU_EH_FRAME_HDR
    46: 0000000000002028     0 OBJECT  LOCAL  DEFAULT  ABS _GLOBAL_OFFSET_TABLE_
    47: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __libc_start_mai[...]
    48: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND _ITM_deregisterT[...]
    49: 0000000000002000     0 NOTYPE  WEAK   DEFAULT   20 data_start
    50: 0000000000002058     0 NOTYPE  GLOBAL DEFAULT   22 __BSS_END__
    51: 0000000000002050     0 NOTYPE  GLOBAL DEFAULT   21 _edata
    52: 0000000000002050     0 NOTYPE  GLOBAL DEFAULT   21 __SDATA_BEGIN__
    53: 0000000000002000     0 NOTYPE  GLOBAL DEFAULT   20 __DATA_BEGIN__
    54: 0000000000002000     0 NOTYPE  GLOBAL DEFAULT   20 __data_start
    55: 0000000000002000     0 OBJECT  GLOBAL HIDDEN    20 __dso_handle
    56: 00000000000006b8     4 OBJECT  GLOBAL DEFAULT   13 _IO_stdin_used
    57: 0000000000002058     0 NOTYPE  GLOBAL DEFAULT   22 _end
    58: 00000000000005b0    34 FUNC    GLOBAL DEFAULT   12 _start
    59: 0000000000002800     0 NOTYPE  GLOBAL DEFAULT  ABS __global_pointer$
    60: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND puts@GLIBC_2.27
    61: 0000000000002050     0 NOTYPE  GLOBAL DEFAULT   22 __bss_start
    62: 0000000000000684    52 FUNC    GLOBAL DEFAULT   12 main
    63: 0000000000000000     0 FUNC    WEAK   DEFAULT  UND __cxa_finalize@G[...]
    64: 0000000000002008     0 OBJECT  GLOBAL HIDDEN    21 __TMC_END__
    65: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND _ITM_registerTMC[...]

Histogram for `.gnu.hash' bucket list length (total of 2 buckets):
 Length  Number     % of total  Coverage
      0  1          ( 50.0%)
      1  1          ( 50.0%)    100.0%

Version symbols section '.gnu.version' contains 8 entries:
 Addr: 0x000000000000043e  Offset: 0x0000043e  Link: 5 (.dynsym)
  000:   0 (*local*)       0 (*local*)       2 (GLIBC_2.34)    1 (*global*)
  004:   3 (GLIBC_2.27)    3 (GLIBC_2.27)    1 (*global*)      1 (*global*)

Version needs section '.gnu.version_r' contains 1 entry:
 Addr: 0x0000000000000450  Offset: 0x00000450  Link: 6 (.dynstr)
  000000: Version: 1  File: libc.so.6  Cnt: 2
  0x0010:   Name: GLIBC_2.27  Flags: none  Version: 3
  0x0020:   Name: GLIBC_2.34  Flags: none  Version: 2

Displaying notes found in: .note.gnu.build-id
  Owner                Data size        Description
  GNU                  0x00000014       NT_GNU_BUILD_ID (unique build ID bitstring)
    Build ID: 04af9f13e57b18e206a946570b7a6c8f6a078c86

Displaying notes found in: .note.ABI-tag
  Owner                Data size        Description
  GNU                  0x00000010       NT_GNU_ABI_TAG (ABI version tag)
    OS: Linux, ABI: 4.15.0
Attribute Section: riscv
File Attributes
  • 最后这个目标板的架构
  Tag_RISCV_arch: "rv64i2p0_m2p0_a2p0_f2p0_d2p0_c2p0_v0p7_zmmul1p0_zfh1p0_zfhmin1p0_xtheadba1p0_xtheadbb1p0_xtheadbs1p0_xtheadc1p0_xtheadcmo1p0_xtheadcondmov1p0_xtheadfmemidx1p0_xtheadfmv1p0_xtheadint1p0_xtheadmac1p0_xtheadmemidx1p0_xtheadmempair1p0_xtheadsync1p0"
  • 1
  • 1
  • 1
  • 1

注意事项:
1、安装是需要后面添加参数 --fix-missing(根据提示)
2、安装时系统可能会卡死,这时候安装包可能损坏,需要修复这个问题,dpkg --configure -a,
在这里插入图片描述
3、继续安装的时候,又会发现没有依赖或者依赖关系不对,需要apt --fix-broken install
在这里插入图片描述

3、参考

LicheePi Wiki

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 玄铁C910是一款高性能的外部设备,适用于个人电脑的用户手册主要包含以下几个方面的内容: 1. 产品概述:用户手册首先介绍了玄铁C910的基本信息,包括外形特点、主要功能和适用范围等内容。用户可以通过阅读概述部分快速了解到这款设备的基本情况。 2. 安装与设置:接下来的章节详细介绍了玄铁C910的安装和设置方法。用户手册提供了图文并茂的教程,帮助用户轻松完成设备的连接和软件的安装,以及对设备进行一些基本设置的操作。 3. 使用说明:在这一部分,用户手册解释了玄铁C910的各个功能和使用方法。从设备的启动方法到具体的应用场景,用户可以通过手册了解设备的操作指南和使用技巧。 4. 常见问题解答:用户手册还为一些常见问题和故障提供了解决方案。从设备无法识别到连接不稳定等问题,用户可以通过查询这个章节找到解决问题的方法。 5. 其他说明:用户手册最后还包含了一些其他相关的说明,比如保修条款、技术支持联系方式等等。用户在遇到问题时可以及时联系售后服务或者技术支持部门。 综上所述,玄铁C910用户手册提供了一份全面且易懂的说明书,可以帮助用户正确安装、设置和使用这款设备。用户可以根据手册里的步骤和指南,充分发挥玄铁C910的性能和功能,提高个人电脑的使用体验。 ### 回答2: 玄铁C910是一款智能手机,用户手册是为了帮助用户正确使用和了解该手机的功能和操作而编写的指南。 首先,用户手册详细介绍了玄铁C910的外观和主要硬件配置。从外观方面,它可能具有精致的金属机身,屏幕大小和分辨率等信息。在硬件配置方面,用户手册会列出处理器、内存、存储容量和电池等关键参数,让用户对手机的性能有一个整体的了解。 其次,用户手册会详细介绍玄铁C910的系统操作。它会解释如何开关机、解锁屏幕、切换语言等基本操作,也会介绍如何连接无线网络、蓝牙和GPS等其他常用功能。此外,用户手册还可能提供有关如何调整音量、亮度和屏幕时间等设置,以及如何使用指纹或面部识别等高级安全功能的指导。 此外,用户手册还将详细介绍玄铁C910的系统应用和核心功能。它可能包括如何设置和使用各种通信应用程序,如电话、短信和电子邮件,以及如何浏览互联网、访问社交媒体和下载应用程序等。对于那些喜欢拍照的用户,用户手册可能会介绍如何使用相机应用程序,并提供一些摄影技巧和特殊功能的指导。 最后,用户手册还会对其它一些特殊功能进行讲解,比如如何使用语音助手、设置定时提醒或闹钟等。同时,可能还会列出一些常见问题和解决方案,以帮助用户自行解决一些常见的疑问和故障。 总之,玄铁C910用户手册是一个重要的辅助工具,它通过详细而清晰的指导,帮助用户更好地理解和使用这款智能手机的各项功能和操作。 ### 回答3: 玄铁C910是一款高性能的电视机顶盒,提供了丰富的功能和应用。用户手册是为了让用户更好地了解和使用这款产品而编写的指南。 这本用户手册主要分为几个部分:产品介绍、使用指南、功能说明和故障排除。在产品介绍部分,手册会详细介绍玄铁C910的外观、硬件配置以及支持的技术规格,帮助用户了解产品的性能和功能。使用指南部分会教用户如何正确安装电视机顶盒并与电视机连接,以及如何进行基本设置和使用。功能说明部分则会逐一介绍电视机顶盒的主要功能模块,如:电视节目收看、网络连接、应用程序安装等,用户可以根据自己的需求和兴趣选择和操作。最后,故障排除部分则会列举一些常见问题和解决办法,帮助用户在使用电视机顶盒时遇到问题能够迅速解决。 玄铁C910用户手册将以简明清晰的语言、图文并茂的实例来说明产品的使用方法和注意事项,以确保用户能轻松地掌握电视机顶盒的操作。用户手册的编写旨在提供全面的信息和指导,并提供实用的技巧和建议,让用户能够充分享受玄铁C910带来的高质量的电视娱乐体验

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张一西

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值