4. 鲁班猫系统特色功能

4.1. 鲁班猫系统简介

鲁班猫系统(LubanCat OS)是野火基于Debian ARM架构制作的Linux发行版, 该系统适配了野火的所有鲁班猫系列微电脑板卡,共同组成嵌入式平台, 为AI、工控、物联网、机器人以及编程教育等应用场景提供了便捷的示例和应用。

野火基于鲁班猫系统提供了大量的行业应用和教程,大大提升了嵌入式应用的部署体验。

4.2. 安装软件

LubanCat OS完全支持debian的apt与dpkg在线与离线安装软件。

1
2
3
4
5
6
7
8
 # 在线安装软件(需联网)
 # 第一次使用需要更新软件列表
 sudo apt update
 # 安装软件
 sudo apt install [要安装的软件包名]

 # 离线安装软件
 sudo dpkg -i  [要安装的软件deb包文件名]

LubanCat OS继承了Debian ARM系统的便捷性,使用APT包管理工具即可直接安装Debian维护的软件, 如 GCC、Python、Opencv、Nginx以及Docker等,免去了传统嵌入式应用部署时自行编译源码的繁琐操作, 提高了稳定性。

具体的软件版本信息可在Debian官网查找到: https://www.debian.org/distrib/packages#search_packages

直接在板卡上安装编译工具链,还能免去交叉编译的麻烦。

4.3. U盘、虚拟串口及虚拟网卡

LubanCat OS提供了USB转U盘、虚拟串口以及虚拟网卡功能。

使用时通过USB线把PC与开发板的USB Device(OTG)接口连接起来, 板卡系统正常启动后,在PC的设备管理器可查看到如下设备:

查看设备管理器

图中依次为板卡适配到PC上的U盘、USB虚拟串口以及USB虚拟网络设备。 在IMX8M MINI板中,该USB Device TypeC接口位于 《IMX8M_MINI硬件资源图》中DC 5V电源的旁边。

4.3.1. U盘功能

U盘功能,即板卡成为了U盘,并挂载了自己的/boot目录内容, 连接后在PC上会出现一个名为“BOOT”的U盘,PC可通过U盘的形式访问板卡中/boot目录的文件:

在PC上以U盘的形式查看板卡的/boot目录

常见应用:

  • /boot目录里包含了uEnv.txt配置文件,可在PC上修改文件快速调整系统配置,具体见《uEnv.txt配置文件

  • /boot目录包含了start.html文件(部分板卡可能没有),在PC上使用浏览器打开可以跳转到对应板卡的说明页面

  • 在PC与板卡之间传输小文件

注意,LubanCat OS视不同设备给/boot目录分配了不同容量,但空间都不大, 只是作为一种途径连通PC与板卡,使用完毕后尽量保持该目录的整洁。

4.3.2. 虚拟串口

板卡虚拟出的串口在PC的COM号可通过设备管理器查看到,如图 查看设备管理器 中是COM3。

而该串口在板卡中的设备名为 /dev/ttyGS0 ,它的使用方法与其它串口并无不同,参考串口的使用章节说明即可。

4.3.3. 虚拟网卡

虚拟网卡功能会把PC与板卡通过USB组建至一个局域网中,该局域网的网关为192.168.7.1, 板卡的IP则为 192.168.7.2 ,有了该功能后,只要使用USB线连接板卡和PC, 就可以通过板卡的IP或主机名进行SSH访问。

若PC本身能连接互联网,只要在PC上设置网络桥接,那么板卡也能通过桥接网络访问互联网和PC所在的其它网络。

网络桥接的方式可参考右侧的文章:https://www.firebbs.cn/forum.php?mod=viewthread&tid=34475

在板卡上可使用ifconfig命令查看USB网卡的具体信息:

:linenos:
:emphasize-lines: 6

 # 在板卡上执行以下命令,查看USB网卡信息
 ifconfig

 # 以下为输出信息中,USB网卡内容
 usb0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
         inet 192.168.7.2  netmask 255.255.255.252  broadcast 192.168.7.3
         inet6 fe80::1ca3:d1ff:fe73:cbad  prefixlen 64  scopeid 0x20<link>
         ether 1e:a3:d1:73:cb:ad  txqueuelen 1000  (Ethernet)
         RX packets 10710  bytes 2302240 (2.1 MiB)
         RX errors 0  dropped 0  overruns 0  frame 0
         TX packets 379  bytes 110673 (108.0 KiB)
         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

错误

有些电脑可能没有RNDIS驱动,无法识别USB虚拟网络设备,特别是Win11系统,又或者有些电脑默认是某个RNDIS驱动,不稳定经常断线,所以建议用户更换微软自带的RNDIS驱动。

4.3.4. 更换微软RNDIS驱动

../../_images/RNDIS_1.jpg

如果有RNDIS驱动,但不是微软自带的驱动,而是其他驱动,则可能是带有RNDIS相关字眼的设备,如下图。

../../_images/RNDIS_2.jpg

右击选中上述RNDIS设备,再选择“更新驱动程序”,然后选择“浏览我的电脑以查找驱动程序”,如下图。

../../_images/RNDIS_3.jpg

再选择“让我从计算机上的可用驱动程序列表中选取”,如下图。

../../_images/RNDIS_4.jpg

再在常见硬件类型列表中,往下拉,选择“网络适配器”,如下图。

../../_images/RNDIS_5.jpg

如果有“显示兼容设备”的选项,需要打勾,没有则直接厂商选择“Microsoft”,型号选择“远程NDIS兼容设备”即可。

../../_images/RNDIS_6.jpg

如果弹出警告提示windows无法验证这个驱动程序是否与硬件兼容,如下图,在确保一开始选择对RNDIS的设备以及后续步骤正确的情况下,选择“是”即可。

../../_images/RNDIS_7.jpg

完成以上步骤后可以看到RNDIS设备显示为远程NDIS兼容设备,如下图。

../../_images/RNDIS_8.jpg

在网络连接管理页面,可以看到RNDIS网卡,如下图。

../../_images/RNDIS_9.jpg

4.4. 开机自启程序

LubanCat OS与debian 10一样,采用systemd的方式控制系统服务与自启程序。

系统默认启动了一个名为generic-board-startup服务,可通过systemctl命令查看:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
 # 在开发板执行命令
 systemctl status generic-board-startup.service

 # 以下为命令输出
● generic-board-startup.service - Generic Board Startup
   Loaded: loaded (/lib/systemd/system/generic-board-startup.service; enabled>
   Active: active (exited) since Tue 2024-01-09 00:00:04 CST; 9min ago
   Process: 405 ExecStart=/bin/sh /opt/scripts/boot/generic-startup.sh (code=e>
   Main PID: 405 (code=exited, status=0/SUCCESS)
      CPU: 359m

可看到generic-board-startup服务调用了/opt/scripts/boot/generic-startup.sh脚本,脚本内容包括扩容、配置ssh、烧录系统相关内容。

通过修改这这个服务调用的脚本代码,可以控制系统默认启动您自己的应用程序。 当然,也可以创建自己专用的systemd服务启动。

详细参考:探索Systemd 章节。

4.5. uEnv.txt配置文件

LubanCat OS在u-boot引导阶段,通过/boot/uEnv.txt文件和boot.scr文件配置额外参数, uEnv.txt可以编辑,用户可通过该文件指定内核等以及要加载的设备树插件,达到根据外接硬件调整加载驱动的目的。

LubanCat系统的/boot/uEnv.txt文件(节选)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 # 使用的内核版本
uname_r=5.4.47-imx8mm
 # 主设备树,uboot会根据flash选择emmc或nand版本,sd卡使用的主设备树与emmc一样
mmc_dtb=freescale/imx8mm-ebf-basic.dtb
nand_dtb=freescale/imx8mm-ebf-basic.dtb


 ###U-Boot Overlays###
 ###Documentation: https://doc.embedfire.com/linux/imx6/driver/zh/latest/linux_driver/dynamic_device_tree.html
 ###Master Enable
 enable_uboot_overlays=1
 #overlay_start

 # 设备树插件,通过加载设备树插件设置系统是否加载某个硬件驱动
 # 使用#号表示注释、不加载

#dtoverlay=/usr/lib/linux-image-5.4.47-imx8mm/freescale/overlays/imx8mm-fire-rx8010sj.dtbo
#dtoverlay=/usr/lib/linux-image-5.4.47-imx8mm/freescale/overlays/imx8mm-fire-leds.dtbo
#dtoverlay=/usr/lib/linux-image-5.4.47-imx8mm/freescale/overlays/imx8mm-fire-keys.dtbo
dtoverlay=/usr/lib/linux-image-5.4.47-imx8mm/freescale/overlays/imx8mm-fire-rs485.dtbo
#dtoverlay=/usr/lib/linux-image-5.4.47-imx8mm/freescale/overlays/imx8mm-fire-rs232.dtbo
dtoverlay=/usr/lib/linux-image-5.4.47-imx8mm/freescale/overlays/imx8mm-fire-touch-capacitive-goodix.dtbo
#dtoverlay=/usr/lib/linux-image-5.4.47-imx8mm/freescale/overlays/imx8mm-fire-cam.dtbo
#dtoverlay=/usr/lib/linux-image-5.4.47-imx8mm/freescale/overlays/imx8mm-fire-hdmi.dtbo
dtoverlay=/usr/lib/linux-image-5.4.47-imx8mm/freescale/overlays/imx8mm-fire-mipi-hx8399.dtbo
#dtoverlay=/usr/lib/linux-image-5.4.47-imx8mm/freescale/overlays/imx8mm-fire-sound.dtbo
#dtoverlay=/usr/lib/linux-image-5.4.47-imx8mm/freescale/overlays/imx8mm-fire-pcie.dtbo
#dtoverlay=/usr/lib/linux-image-5.4.47-imx8mm/freescale/overlays/imx8mm-fire-btwifi.dtbo
#dtoverlay=/usr/lib/linux-image-5.4.47-imx8mm/freescale/overlays/imx8mm-fire-rpmsg.dtbo

#overlay_end

 # 以下配置仅当镜像在SD卡时生效,用于把sd卡的镜像烧录至NAND或eMMC,
 # continued为持续烧录(主要用于量产多个板卡),once为只烧录一次
 # 去掉#号注释并重启后生效

 #flash_firmware=continued
 #flash_firmware=once

查看uEnv.txt文件的内容,它主要分为以下配置功能:

  • 第2行:指定板卡使用的内核版本。

  • 第4~5行:指定板卡使用的主设备树,uboot会根据存储器类型加载mmc或nand版本,其中sd卡也属于eMMC设备类型。 主设备树通常只配置了CPU、内存以及FLASH存储设备。

  • 第11行:使能uboot的插件设备树功能,它是后面加载设备树插件的基础,不熟悉的话不要改动。

  • 第17~29行:要加载的设备树插件,“dtoverlay=”后的为要加载的设备树插件名称,“#”号开头的行为注释,不会加载。 设备树插件与主设备树一起,共同组成了整个板卡加载的硬件驱动,这种插件的形式为系统定制提供了极大的灵活度。

  • 第37-38行:这两行默认都是注释的,且仅当系统运行在sd卡时生效,打开配置后系统重启或上电时会执行烧录流程, 把sd卡的内容完整烧录至板载的NAND或eMMC存储设备,“flash_firmware=”后面的“continued”或“once”分别表示把sd卡设置为持续的烧录模式还是只烧录一次。

4.5.1. 系统自带的设备树插件简单说明

使用相应设备树插件,只需要取消uEnv.txt配置文件里面的“#”即可,而这些设备树插件在鲁班猫系统的目录/usr/lib/linux-image-5.4.47-imx8mm/freescale/overlays下,如图:

设备树插件图、

其中,imx8mm-fire-rs485.dtbo imx8mm-fire-rs232.dtbo 是485/232设备树插件,开启之后系统会有设备文件/dev/ttymxcX(X代表数字)

imx8mm-fire-keys.dtbo 是板载按键KEY的设备树插件,开启后会有设备文件/dev/input/by-path/platform-gpio-keys-event

imx8mm-fire-cam.dtbo 与摄像头使用相关的设备树插件,摄像头开启后对应的设备文件是/dev/videoX(X代表数字)

imx8mm-fire-pwm1.dtbo imx8mm-fire-pwm2.dtbo 是与pwm相关的设备树插件,开启后设备使用在/sys/class/pwm目录下

imx8mm-fire-mipi-hx8399.dtbo imx8mm-fire-mipi-ili9881c.dtbo 屏幕相关的设备树插件,设备文件为/dev/fb0

imx8mm-fire-hdmi.dtbo 与HDMI相关的设备树插件,开启后可以连接HDMI屏幕

imx8mm-fire-touch-capacitive-goodix.dtbo 电容触摸屏相关设备树插件,开启后会有设备文件platform-30370000.snvs:snvs-powerkey-event,这个文件是链接文件会指向/dev/input/event1 不同板子情况可能不同

imx8mm-fire-sound.dtbo 板载音频的设备树插件,开启该插件后在/dev/snd目录下会设备文件,具体使用参考音频播放内容

imx8mm-fire-spi.dtbo 这些是spi相关的设备树插件,开启后会有对应的设备文件/dev/spidevX.0(X代表数字)

imx8mm-fire-uart3.dtbo 这些串口相关的设备树插件,开启之后会有相应的设备文件/dev/ttymxcX (X代表数字)

4.5.2. 通过uEnv.txt配置设备树插件

野火linux开发板可通过uEnv.txt配置设备树插件,使能或关闭板子上的某些功能。 以LED设备为例,默认情况下板子使能了led相关设备树插件,如下所示

dtoverlay=/usr/lib/linux-image-5.4.47-imx8mm/freescale/overlays/imx8mm-fire-leds.dtbo

若用户不想使用led相关的设备,可在前面添加‘#’以注释,重启开发板之后就找不到led相关设备了, 如下所示

#dtoverlay=/usr/lib/linux-image-5.4.47-imx8mm/freescale/overlays/imx8mm-fire-leds.dtbo

对其他设备的操作也是类似的。但需注意部分板子外设引脚存在冲突问题。

4.5.3. 通过uEnv.txt配置环境参数:修改mac地址

uEnv.txt文件本质上是配置uboot的环境参数, 基本上所有在uboot中能够设置的参数也能够在uEnv.txt文件中配置。

下面以配置mac为例,通过 /boot/uEnv.txt 设置mac地址,如下所示

/boot/uEnv.txt
1
2
3
4
5
6
7
 #设置第1个网卡的mac地址
 ethaddr=ce:9b:4e:14:94:c1
 #设置第2个网卡的mac地址
 eth1addr=ce:9b:4e:14:94:c2
 #设置第3个网卡的mac地址
 eth2addr=ce:9b:4e:14:94:c3
 #以此类推....

4.6. 参考资料

本文档主要提供有一定经验的使用者快速入门使用,对于初学者可学习以下文档:

《鲁班猫LubanCat OS镜像日志》

《探索Systemd》

《Win10禁用驱动程序强制签名》