编译并生效内核DTB文件

操作场景

当用户需要定制自定义设备树文件时,如开启UART0串口功能,可以通过修改源码包中对应形态的dts文件以重新编译内核DTB文件,并重构驱动包进行安装。

Atlas 200I A2 加速模块环境已存在NPU驱动,只需升级dt.img,获取制作dt.img使用的Ascend-hdk-310b-sdk-soc_<version>.zip时,软件包的版本需与当前Atlas 200I A2 加速模块的驱动版本号保持一致。否则,版本号不一致,升级dt.img后Atlas 200I A2 加速模块环境无法登录,只能通过重新烧写系统镜像进行恢复。

前提条件

  • 所有的依赖必须用root用户进行安装。
  • 用户可以通过如下命令进行安装上述依赖。

    apt-get install -y python3 make gcc unzip pigz bison flex libncurses-dev squashfs-tools bc device-tree-compiler libssl-dev cmake rpm2cpio

  • 交叉编译工具链安装请参见安装工具链

操作步骤

  1. 登录Linux服务器。
  2. 执行如下命令,切换至root用户。

    su - root

  3. 使用WinSCP工具或其他工具,将下载软件包获取的源码包“Ascend310B-source.tar.gz”上传至root用户属组目录下,例如“/opt”。详细操作请参见使用WinSCP传输文件
  4. 执行如下命令,进入源码包所在目录,例如“/opt”。

    cd /opt

  5. 执行如下命令,解压源码包“Ascend310B-source.tar.gz”。

    tar -xzvf Ascend310B-source.tar.gz

  6. 执行如下命令,进入“Ascend310B-source”目录。

    cd Ascend310B-source

  7. 修改对应设备的dts文件。

    • 如果需要使能DTB相关功能,可参考此步骤,下文以Atlas 200I DK A2 开发者套件新增调试串口功能为例进行说明。
      1. 执行如下命令,进入“dtb”目录。

        cd dtb

      1. 执行如下命令,打开Atlas 200I DK A2 开发者套件boardid为51100的dts文件。

        vim dts/hi1910b/hi1910BL/hi1910B-asic-M100-B51.dts

      2. 可通过修改bootargs字段中的加粗字体,使能配置。

        此处以使能UART0串口作为控制台设备为例进行配置(Atlas 200I DK A2 开发者套件默认已使能UART0串口配置)。

        chosen {
                        bootargs = "console=ttyAMA0,115200 log_redirect=0x1fc000@0x22741000 root=/dev/mmcblk1p1 rw rdinit=/sbin/init rodata=off syslog earlycon=pl011,mmio32,0xC4010000 loglevel=5 initrd=0x2BA00000,300M rootwait mpam=of enable_ascend_share_pool ascend_enable_all enable_sp_multi_group_mode init_all_gicr enable_fpga no_console_suspend use_kallsyms_lookup_symbol selinux=0 systemd.unified_cgroup_hierarchy=0 fbcon=map:6";
                };
      3. 按“Esc”键,再执行如下命令,保存修改并按“Enter”键退出。

        :wq!

      4. 返回“Ascend310B-source”目录。

        cd /opt/Ascend310B-source

  8. 执行如下命令,编译DTB文件。

    bash build.sh dtb

    出现如下回显,且生成“dt.img”文件表示编译内核DTB文件成功。

    generate /opt/Ascend310B-source/output/dt.img success! 
    sign /opt/Ascend310B-source/output/dt.img success!

    编译后的dt.img文件会自动存放于“Ascend310B-source/output”目录下。

生效DTB文件

  1. 登录Atlas 200I A2 加速模块系统环境,具体操作请参见使用PuTTY登录设备(网口方式)
  2. 使用“WinSCP”,将编译后的“dt.img”文件上传至任意目录下,例如“/opt”。详细操作请参见使用WinSCP传输文件
  3. 执行如下命令,进入“opt”目录。

    cd /opt

  4. 执行如下命令,查询启动方式。

    boot_tool get boot_sel

    • 若回显如下,表示启动方式从eMMC启动。
    boot from eMMC
    • 若回显如下,表示启动方式从SD卡启动。
    boot from SD

  5. 升级dt.img文件。

    • eMMC启动。
      • 升级主区DTB,执行如下命令。

        dd if=dt.img of=/dev/mmcblk0 count=4096 seek=114688 bs=512

        852+1 records in
        852+1 records out
        436480 bytes (436 kB, 426 KiB) copied, 0.113982 s, 3.8 MB/s
      • 升级备区DTB,执行如下命令。

        dd if=dt.img of=/dev/mmcblk0 count=4096 seek=376832 bs=512

        852+1 records in
        852+1 records out
        436480 bytes (436 kB, 426 KiB) copied, 0.112121 s, 3.9 MB/s
    • M.2启动。
      • 升级主区DTB,执行如下命令。

        dd if=dt.img of=/dev/sda count=4096 seek=114688 bs=512

        1504+1 records in
        1504+1 records out
        770304 bytes (770 kB, 752 KiB) copied, 0.0117018 s, 65.8 MB/s
      • 升级备区DTB,执行如下命令。

        dd if=dt.img of=/dev/sda count=4096 seek=376832 bs=512

        1504+1 records in
        1504+1 records out
        770304 bytes (770 kB, 752 KiB) copied, 0.0247949 s, 31.1 MB/s
    • SD卡启动。
      • 升级主区DTB,执行如下命令。

        dd if=dt.img of=/dev/mmcblk1 count=4096 seek=114688 bs=512

        852+1 records in
        852+1 records out
        436480 bytes (436 kB, 426 KiB) copied, 0.113982 s, 3.8 MB/s
      • 升级备区DTB,执行如下命令。
        dd if=dt.img of=/dev/mmcblk1 count=4096 seek=376832 bs=512
        852+1 records in
        852+1 records out
        436480 bytes (436 kB, 426 KiB) copied, 0.112121 s, 3.9 MB/s

    建议用户在调测阶段仅升级主区与备区中的其中一个dt.img文件。

  6. 执行如下命令,重启生效。

    reboot

    建议查看串口日志确认升级重启进展。

  7. 用户可根据实际配置的功能进行验证。如使能UART0串口配置后,验证UART0串口功能是否正常。