跳到主要内容

Ubuntu 系统定制

获取 SDK 进行 ubuntu 系统定制化

1 bsp-debs 包说明

  1. linux-*.deb、linux-headers-install.sh、 *_byteshift.h文件,存放 kernel 相关文件。如果需要在 SOC 模式�下编译内核驱动。则需要运行 inux-headers-install.sh 脚本。会安装编译内核驱动必要的头文件
  2. sophgo-bsp-images*.deb 存放启动需要的 itb 文件(包含 kernel、dtb、ramdisk)、flash中 的 BL2 BL31 UBOOT 固件等其他启动文件。(在安装 deb 包升级 SDK 版本的方式中这个包需要先手动卸载再安装)
  3. sophgo-bsp-qt5*.deb是针对 FL2000 或者裁剪版本的 QT5 runtime
  4. sophgo-bsp-rootfs*.deb、sophgo-bsp-tools*.deb是算能定制的文件和工具
  5. sophgo-hdmi*.deb是 SophUI,用于在 HDMI 上显示信息和配置网络
  6. sophon-mw-soc-sophon*.deb 是算能定制多媒体相关包(默认安装runtime,dev需要手动安装,在安装deb包升级SDK版本的方式中这个包可以覆盖安装)
  7. sophon-soc-libsophon*.deb 是算能算法推理相关包(默认 runtime 和 dev 都会安装,在安装 deb 包升级 SDK 版本的方式中这个包可以覆盖安装),需要编译 kernel 生成的 header 文件 + libsophon 源码进行编译出包
  8. sophon-mw-soc-sophon-ffmpeg*.deb 和 sophon-mw-soc-sophon-opencv*.deb 是多媒体相关的 runtime 包,由于只依赖系统,所以可以选择与 SophonSDK 版本对应的版本,无需重新编译。可以从 SophonSDK 包中 image 下 bsp-debs 下获取

3 systemd 服务说明

3.1 SophonHDMI.service

  1. 运行命令:/bm_services/SophonHDMI/run_hdmi_show.sh
  2. 启动时间:bmrt_setup.service后
  3. 作用:执行一个裸QT的程序,可以查看网络信息、配置网络、运行裸QT的demo程序

3.2 SophonHDMIStatus.service

  1. 运行命令:/bm_services/SophonHDMI/hdmi_status.sh
  2. 启动时间:bmrt_setup.service后
  3. 作用:监控fl2000驱动模块的挂载情况和HDMI显示屏的热插拔。从而停止或启动SophonHDMI.service服务

3.3 bmDeviceDetect.service

  1. 运行命令:/sbin/bm_ddt_server
  2. 启动时间:network.target后
  3. 作用:DDT工具的服务端

3.4 bmSysMonitor.service

  1. 运行命令:/bin/bash /usr/sbin/bm_monitor.sh
  2. 启动时间:ledSocketServer.service后
  3. 作用:用于监控当前设备温度,低温或高温进行报警等一系列操作

3.5 bmrt_loadko.service

  1. 运行命令:/usr/sbin/bmrt_loadko.sh
  2. 启动时间:basic.target后,network.target前
  3. 作用:用于挂载tpu、vpu等驱动模块

3.6 bmrt_setup.service

  1. 运行命令:/usr/sbin/bmrt_setup.sh
  2. 启动时间:network.target
  3. 作用:用于配置算能runtime的环境与服务

3.7 ledSocketServer.service

  1. 运行命令:/usr/bin/python3 -u /usr/sbin/led_server.py
  2. 启动时间:network.target后
  3. 作用:用于控制设备LED灯的预警信号

3.8 lteModemManager.service

  1. 运行命令:/usr/bin/python3 -u /usr/sbin/lteModem.py
  2. 启动时间:network.target后
  3. 作用:用于启动4G 5G模组进行PPP拨号上网

4 恢复模式使用说明

  1. 接入设备的调试串口(默认串口0),重启设备,在看到 u-boot 提示 Hit any key to stop autoboot 时按下回车在其开机到uboot

  2. 进入 u-boot 的命令行模式,看到提示符 bm1684#

  3. 输�入 run recboot 后回车启动恢复模式itb文件

  4. 可以看到一个简单的 linux 系统跑起来了(基于buildroot,运行在ram中)

    1. 此时它是完全工作在 ramdisk 上的,故此可以对 eMMC 上的分区做 e2fsck 等操作
    2. 此时设备支持网口,eth0会自动申请一个动态IP
    3. 此时设备支持ssh,账号默认root,密码需要手动配置一下
  5. 这里给几个实例操作

    1. 如果想要恢复出厂设置,您可以清空根文件系统的 read-write 部分
    mdev -s
    mount /dev/mmcblk0p5 /mnt
    rm -rf /mnt/*
    sync
    reboot -f
    1. 如果想要修正错误修改的 read-only 分区里的内容
    mdev -s
    mount /dev/mmcblk0p4 /mnt
    cd /mnt
    # 使用vi工具修改文件后:
    sync
    reboot -f
    1. 如果想要恢复有问题的内核镜像
    mdev -s
    mount /dev/mmcblk0p1 /mnt
    # emmcboot.itb.bak 是原始镜像里就预装有的备份文件
    cp /mnt/emmcboot.itb.bak /mnt/emmcboot.itb
    sync
    reboot -f

5 文件系统解析

emmc会被分为7个分区,如下:

mmcblk0 179:0 0 58.2G 0 disk
├─mmcblk0p1 179:1 0 128M 0 part /boot
├─mmcblk0p2 179:2 0 3G 0 part /recovery
├─mmcblk0p3 179:3 0 10M 0 part
├─mmcblk0p4 179:4 0 2.5G 0 part /media/root-ro
├─mmcblk0p5 179:5 0 6G 0 part /media/root-rw
├─mmcblk0p6 179:6 0 2G 0 part /opt
└─mmcblk0p7 179:7 0 44.6G 0 part /data

其作用如下:
1. boot 存放启动命令脚本和启动itb文件,存放备份的flash固件
2. recovery 存放恢复模式itb文件
3. root-ro 存放根文件系统只读部分
4. root-rw 存放根文件系统编辑部分
10 / 19
5. opt 存放sophgoSDK安装后的runtime库
6. data 存放自定义数据,刷机后第一次启动会自动扩容

6 如何配置一个自定义的开机自启动服务

本段说明如何使用systemd在SOC模式下配置一个最简单的开机自启动服务用于算法业务

  1. 新建文件/etc/systemd/system/user-auto-start.service,内容如下:
[Unit]
Description=user auto setup
After=network.target bmrt_setup.service

[Service]
User=root
ExecStart=/data/user_auto_setup.sh
Type=simple
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

配置文件内容解析:

  1. 描述:user auto setup
  2. 启动时间:在network.target和bmrt_setup.service之后,在multi-user.target之前
  3. 命令执行账户:root
  4. 命令:/data/user_auto_setup.sh
  5. 服务类型:simple
  6. 是否自动重启:是,仅在命令执行失败10s后重启
  1. 配置执行脚本(本文为/data/user_auto_setup.sh),切记需要赋予其运行权限
  2. 执行命令 sudo systemctl daemon-reload 重载配置文件
  3. 执行命令 sudo systemctl status user-auto-start.service 查看该服务是否配置完成
  4. 执行命令 sudo systemctl enable user-auto-start.service 使能其开机自启

提示

注意事项:

  1. 默认运行的log会存放在/var/log/syslog文件中
  2. 该示例只适用于简单的业务,复杂的环境配置等需要参考systemd的说明文档
  3. 该示例的服务类型是simple,切记不要在脚本中使其自动放置后台执行,这会导致systemd无法监控前台任务导致直接杀死进程
  4. 可以使用命令 sudo systemd-analyze plot > plot.svg 生成本次启动的服务清单(svg格式)用于分析服务的启动时间和运行时间