Ubuntu 系统定制
获取 SDK 进行 ubuntu 系统定制化
1 bsp-debs 包说明
- linux-*.deb、linux-headers-install.sh、 *_byteshift.h文件,存放 kernel 相关文件。如果需要在 SOC 模式�下编译内核驱动。则需要运行 inux-headers-install.sh 脚本。会安装编译内核驱动必要的头文件
- sophgo-bsp-images*.deb 存放启动需要的 itb 文件(包含 kernel、dtb、ramdisk)、flash中 的 BL2 BL31 UBOOT 固件等其他启动文件。(在安装 deb 包升级 SDK 版本的方式中这个包需要先手动卸载再安装)
- sophgo-bsp-qt5*.deb是针对 FL2000 或者裁剪版本的 QT5 runtime
- sophgo-bsp-rootfs*.deb、sophgo-bsp-tools*.deb是算能定制的文件和工具
- sophgo-hdmi*.deb是 SophUI,用于在 HDMI 上显示信息和配置网络
- sophon-mw-soc-sophon*.deb 是算能定制多媒体相关包(默认安装runtime,dev需要手动安装,在安装deb包升级SDK版本的方式中这个包可以覆盖安装)
- sophon-soc-libsophon*.deb 是算能算法推理相关包(默认 runtime 和 dev 都会安装,在安装 deb 包升级 SDK 版本的方式中这个包可以覆盖安装),需要编译 kernel 生成的 header 文件 + libsophon 源码进行编译出包
- sophon-mw-soc-sophon-ffmpeg*.deb 和 sophon-mw-soc-sophon-opencv*.deb 是多媒体相关的 runtime 包,由于只依赖系统,所以可以选择与 SophonSDK 版本对应的版本,无需重新编译。可以从 SophonSDK 包中 image 下 bsp-debs 下获取
3 systemd 服务说明
3.1 SophonHDMI.service
- 运行命令:/bm_services/SophonHDMI/run_hdmi_show.sh
- 启动时间:bmrt_setup.service后
- 作用:执行一个裸QT的程序,可以查看网络信息、配置网络、运行裸QT的demo程序
3.2 SophonHDMIStatus.service
- 运行命令:/bm_services/SophonHDMI/hdmi_status.sh
- 启动时间:bmrt_setup.service后
- 作用:监控fl2000驱动模块的挂载情况和HDMI显示屏的热插拔。从而停止或启动SophonHDMI.service服务
3.3 bmDeviceDetect.service
- 运行命令:/sbin/bm_ddt_server
- 启动时间:network.target后
- 作用:DDT工具的服务端
3.4 bmSysMonitor.service
- 运行命令:/bin/bash /usr/sbin/bm_monitor.sh
- 启动时间:ledSocketServer.service后
- 作用:用于监控当前设备温度,低温或高温进行报警等一系列操作
3.5 bmrt_loadko.service
- 运行命令:/usr/sbin/bmrt_loadko.sh
- 启动时间:basic.target后,network.target前
- 作用:用于挂载tpu、vpu等驱动模块
3.6 bmrt_setup.service
- 运行命令:/usr/sbin/bmrt_setup.sh
- 启动时间:network.target
- 作用:用于配置算能runtime的环境与服务
3.7 ledSocketServer.service
- 运行命令:/usr/bin/python3 -u /usr/sbin/led_server.py
- 启动时间:network.target后
- 作用:用于控制设备LED灯的预警信号
3.8 lteModemManager.service
- 运行命令:/usr/bin/python3 -u /usr/sbin/lteModem.py
- 启动时间:network.target后
- 作用:用于启动4G 5G模组进行PPP拨号上网
4 恢复模式使用说明
-
接入设备的调试串口(默认串口0),重启设备,在看到 u-boot 提示 Hit any key to stop autoboot 时按下回车在其开机到uboot
-
进入 u-boot 的命令行模式,看到提示符 bm1684#
-
输�入 run recboot 后回车启动恢复模式itb文件
-
可以看到一个简单的 linux 系统跑起来了(基于buildroot,运行在ram中)
- 此时它是完全工作在 ramdisk 上的,故此可以对 eMMC 上的分区做 e2fsck 等操作
- 此时设备支持网口,eth0会自动申请一个动态IP
- 此时设备支持ssh,账号默认root,密码需要手动配置一下
-
这里给几个实例操作
- 如果想要恢复出厂设置,您可以清空根文件系统的 read-write 部分
mdev -smount /dev/mmcblk0p5 /mntrm -rf /mnt/*syncreboot -f- 如果想要修正错误修改的 read-only 分区里的内容
mdev -smount /dev/mmcblk0p4 /mntcd /mnt# 使用vi工具修改文件后:syncreboot -f- 如果想要恢复有问题的内核镜像
mdev -smount /dev/mmcblk0p1 /mnt# emmcboot.itb.bak 是原始镜像里就预装有的备份文件cp /mnt/emmcboot.itb.bak /mnt/emmcboot.itbsyncreboot -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模式下配置一个最简单的开机自启动服务用于算法业务
- 新建文件/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
配置文件内容解析:
- 描述:user auto setup
- 启动时间:在network.target和bmrt_setup.service之后,在multi-user.target之前
- 命令执行账户:root
- 命令:/data/user_auto_setup.sh
- 服务类型:simple
- 是否自动重启:是,仅在命令执行失败10s后重启
- 配置执行脚本(本文为/data/user_auto_setup.sh),切记需要赋予其运行权限
- 执行命令 sudo systemctl daemon-reload 重载配置文件
- 执行命令 sudo systemctl status user-auto-start.service 查看该服务是否配置完成
- 执行命令 sudo systemctl enable user-auto-start.service 使能其开机自启
提示
注意事项:
- 默认运行的log会存放在/var/log/syslog文件中
- 该示例只适用于简单的业务,复杂的环境配置等需要参考systemd的说明文档
- 该示例的服务类型是simple,切记不要在脚本中使其自动放置后台执行,这会导致systemd无法监控前台任务导致直接杀死进程
- 可以使用命令 sudo systemd-analyze plot > plot.svg 生成本次启动的服务清单(svg格式)用于分析服务的启动时间和运行时间