# Linux 驱动安装
## 环境检查
### IOMMU
在Intel、AMD等X86 CPU平台,不建议打开IOMMU。如果使能了IOMMU,性能会有所影响,建议关闭或者设置pass through模式。
:::{note}
- SDK V3.4.0(含)已支持IOMMU,**SDK V3.4.0之前的版本IOMMU必须关闭或者设置为pass through模式**。
- 如何查询IOMMU已开启?
- 查看 `ls /sys/kernel/iommu_groups` 目录下是否有IOMMU组,如果目录为空,则当前没有支持IOMMU。
- 查看 `dmesg | grep iommu` 和 `cat /proc/cmdline` IOMMU的配置模式。
```bash
# iommu enabled
$ ls /sys/kernel/iommu_groups/
0 1 10 11 12 13 14 15 16 17 18 19 2 20 21 22 23 24 25 3 4 5 6 7 8 9
# iommu on
$ cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-5.4.18-110-generic root=UUID=6ad21caf-7783-4b20-beab-8587a209f606 ro quiet splash iommu=on quiet splash loglevel=0 resume=UUID=c315bcbf-d4b5-4220-bbb6-9118476be003 security=kysec
# Pass Through
$ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-6.8.0-57-generic root=UUID=9f8f7b78-45bd-41c7-a2c4-cef9dfd6b6ca ro quiet splash iommu=pt quiet splash vt.handoff=7
```
- 配置IOMMU off或者pass through模式
- Intel CPU
```bash
$ sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX="quiet splash intel_iommu=off"
$ sudo update-grub
$ sudo reboot
```
- AMD CPU
```bash
$ sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX="quiet splash amd_iommu=off"
$ sudo update-grub
$ sudo reboot
```
- Pass Through
```bash
$ sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX="quiet splash iommu=pt"
$ sudo update-grub
$ sudo reboot
```
:::
### IRQBalance
**IRQBalance** 服务能让硬件中断信号平均上报在多个CPU上,从而解决单CPU过载的问题。子卡运行过程中会通过MSI等方式向主机CPU上报中断,如果多张卡同时运行繁忙的DMA拷贝任务,在未开启 **IRQBalance**的服务器上,中断将集中上报某个CPU,会存在性能问题,而且板卡越多,性能问题越严重。
:::{note}
- 查询irqbalance包是否已安装?
```bash
$ dpkg -s irqbalance # debian
$ rpm -qi irqbalance # redhat
```
- 查询irqbalance是否已启用?
```bash
$ systemctl status irqbalance
```
- 启用irqbalance
```bash
$ sudo systemctl start irqbalance # 启动服务
$ sudo systemctl enable irqbalance # 开启启动
```
:::
### SecureBoot
驱动安装暂不支持安全启动模式,需要在UEFI BIOS中关闭SecureBoot。
```bash
$ sudo mokutil --sb-state
SecureBoot disabled
```
## 支持列表
SDK已测试过的支持的主控如下表所示:
| 主控 | 芯片 | 安装包 |
| ----------------------------------- | ---------------------------- | ------------------------------------------------------------ |
| CentOS 9 stream | INTEL、AMD64 | axcl_host_x86_64_Vxxx.rpm |
| Kylin V10 SP1 | INTEL、AMD64、Phytium(ARM64) | **x86_64**: axcl_host_x86_64_Vxxx.deb
**arm64**: axcl_host_aarch64_Vxxx.deb |
| [UOS](#setup_uos) | INTEL、AMD64 | axcl_host_x86_64_Vxxx.deb |
| RK3588 | ARM64 | axcl_host_aarch64_Vxxx.deb |
| [RaspberryPi5](#setup_raspberrypi5) | ARM64 | axcl_host_aarch64_Vxxx.deb |
| OpenEuler | INTEL、AMD64 | axcl_host_x86_64_Vxxx.rpm |
| ubuntu 18.04/22.04 | INTEL、AMD64 | axcl_host_x86_64_Vxxx.deb |
## 安装依赖
### PCIe设备
- 将PCIe设备接入主控,**lspci**确认是否能识别到设备,参阅[FAQ 如何查询设备章节](#faq_lspci_description)
### make
`make -v`检查make是否已安装
```bash
$ make -v
GNU Make 4.3
```
### gcc
- `gcc -v`检查gcc是否已安装。
- AXCL runtime基于C++17标准开发,因此gcc要求最低为**9.4.0**。如何升级gcc,[参阅FAQ](#gccupdate)。
```bash
$ gcc -v
gcc version 12.2.0 (Debian 12.2.0-14)
```
## 驱动安装
### 安装包
| 安装包关键字 | 架构 | 说明 |
| ------------ | ------ | -------------------------------------------------- |
| x86_64 | x86_64 | Intel、AMD |
| aarch64 | ARM64 | raspberry, rocky(rk3588), 飞腾(Phytium, D2000)等 |
:::{important}
**如果已安装过AXCL驱动包,请先[卸载驱动](#uninstalldriver)**。
:::
### ubuntu等debian系统
#### Step1:硬件连接
将M.2或PCIe板卡插入物理机
#### Step2:系统更新
```bash
$ sudo apt update && sudo apt upgrade -y
$ sudo reboot
```
:::{note}
- 系统更新可能耗费时间较长,建议更换国内镜像源(如:[清华源](https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/))。
- ubuntu22.04内核gcc版本和预装的gcc不一致,安装gcc-12
```bash
$ sudo apt install gcc-12
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 12
```
:::
#### Step3:安装linux headers
```bash
$ sudo apt install -y linux-headers-$(uname -r)
```
#### Step4:安装AXCL
```bash
$ sudo apt install -y ./xxx.deb
```
:::{important}
SDK V3.4.0 以前的SDK版本仅支持dpkg安装,请执行`sudo dpkg -i ./xxx.deb`
:::
#### Step5:验证安装
查看安装包信息
```bash
$ apt show axclhost
```
执行`axcl-smi`,确认设备能正确找到
```bash
$ axcl-smi
+------------------------------------------------------------------------------------------------+
| AXCL-SMI V3.4.0_20250418095028 Driver V3.4.0_20250418095028 |
+-----------------------------------------+--------------+---------------------------------------+
| Card Name Firmware | Bus-Id | Memory-Usage |
| Fan Temp Pwr:Usage/Cap | CPU NPU | CMM-Usage |
|=========================================+==============+=======================================|
| 0 AX650N V3.4.0 | 0000:03:00.0 | 153 MiB / 945 MiB |
| -- 38C -- / -- | 1% 0% | 18 MiB / 7040 MiB |
+-----------------------------------------+--------------+---------------------------------------+
+------------------------------------------------------------------------------------------------+
| Processes: |
| Card PID Process Name NPU Memory Usage |
|================================================================================================|
```
### centos等redhat系统
#### Step1: 硬件连接
将M.2或PCIe板卡插入物理机
#### Step2:系统更新
```bash
$ sudo yum update -y
$ sudo reboot
```
:::{note}
- 系统更新可能耗费时间较长,建议更换国内镜像源(如 [清华源](https://mirror.tuna.tsinghua.edu.cn/help/centos-stream/))。
:::
#### Step3:安装linux headers & devel
```bash
$ sudo yum install -y kernel-headers-$(uname -r) kernel-devel-$(uname -r)
```
#### Step4:安装AXCL
```bash
$ sudo yum install -y ./xxx.rpm
```
:::{important}
SDK V3.4.0 以前的SDK版本仅支持rpm安装,请执行`sudo rpm -Uvh --nodeps xxx.rpm`
:::
#### Step5:验证安装
查看安装包信息
```bash
$ yum info axcl_host
```
执行`axcl-smi`,确认设备能正确找到
```bash
$ axcl-smi
+------------------------------------------------------------------------------------------------+
| AXCL-SMI V3.4.0_20250418095028 Driver V3.4.0_20250418095028 |
+-----------------------------------------+--------------+---------------------------------------+
| Card Name Firmware | Bus-Id | Memory-Usage |
| Fan Temp Pwr:Usage/Cap | CPU NPU | CMM-Usage |
|=========================================+==============+=======================================|
| 0 AX650N V3.4.0 | 0000:03:00.0 | 153 MiB / 945 MiB |
| -- 38C -- / -- | 1% 0% | 18 MiB / 7040 MiB |
+-----------------------------------------+--------------+---------------------------------------+
+------------------------------------------------------------------------------------------------+
| Processes: |
| Card PID Process Name NPU Memory Usage |
|================================================================================================|
```
(setup_raspberrypi5)=
### Raspberry Pi 5
#### 准备工作
在树莓派 5 上安装 AX650 加速卡时,首先需要准备一块 M.2 HAT+ 扩展板。参考[官方链接](https://www.raspberrypi.com/news/using-m-2-hat-with-raspberry-pi-5/),M.2 HAT+ 的官方版本只支持 2230、2242 的 M.2 M Key 卡,通常 AX650 加速卡是 2280 的,您可能需要考虑购买第三方的支持 2280 长度的 M.2 HAT+ 扩展板。
:::{Warning}
根据树莓派硬件批次不同,可能需要更新一下树莓派的 EEPROM 设置。具体步骤如下:
:::
如同 PC 中的 BIOS,EEPROM 设置独立于烧录 OS 的 TF 卡,烧录最新的树莓派镜像或者切换镜像版本并不会主动更新 EEPROM 的设置。首先执行 update:
```bash
$ sudo apt update && sudo apt full-upgrade
```
然后检查一下 EEPROM 中的版本:
```bash
$ sudo rpi-eeprom-update
```
如果看到的日期早于 `2023 年 12 月 6 日`,运行以下命令以打开 Raspberry Pi 配置 CLI:
```bash
$ sudo raspi-config
```
在 Advanced Options > Bootloader Version (引导加载程序版本) 下,选择 Latest (最新)。然后,使用 Finish 或 ESC 键退出 raspi-config。
执行以下命令,将固件更新到最新版本。
```bash
$ sudo rpi-eeprom-update -a
```
最后使用 `sudo reboot` 重新启动。重启后就完成了 EEPROM 中 firmware 的更新。
:::{Warning}
取决于使用的树莓派 kernel 状态,目前的修改是以 2024年11月18日 以前的树莓派刚烧录好的系统为例进行说明的,客户需要根据树莓派系统更新情况识别这个步骤是否必须。
:::
在当前的树莓派 kernel 和 M.2 HAT+ 组合中,可能会遇到如下限制:
> - PCIE Device 无法识别
> - PCIE MSI IRQ 无法申请多个
这些问题将导致安装失败或者子卡起不来。需要检查 Raspberry Pi 5 `/boot/firmware/config.txt` 文件,并进行修改。
如果是第三方的兼容 M.2 HAT+ 产品,需要注意供电问题;在 config.txt 中添加如下描述:
```bash
dtparam=pciex1
```
该描述可以默认打开 PCIE 功能;然后继续增加 PCIE 的设备描述:
```bash
[all]
dtoverlay=pciex1-compat-pi5,no-mip
```
```bash
$ screenfetch
_,met$$$$$gg.
,g$$$$$$$$$$$$$$$P. OS: Debian 12 bookworm
,g$$P"" """Y$$.". Kernel: aarch64 Linux 6.6.74+rpt-rpi-2712
,$$P' `$$$. Uptime: 3h 4m
',$$P ,ggs. `$$b: Packages: 1609
`d$$' ,$P"' . $$$ Shell: bash 5.2.15
$$P d$' , $$P Disk: 13G / 922G (2%)
$$: $$. - ,d$$' CPU: ARM Cortex-A76 @ 4x 2.4GHz
$$\; Y$b._ _,d$P' GPU:
Y$$. `.`"Y$$$$P"' RAM: 631MiB / 8064MiB
`$$b "-.__
`Y$$
`Y$$.
`$$b.
`Y$$b.
`"Y$b._
`""""
$ cat /boot/firmware/config.txt
# For more options and information see
# http://rptl.io/configtxt
# Some settings may impact device functionality. See link above for details
# Uncomment some or all of these to enable the optional hardware interfaces
#dtparam=i2c_arm=on
#dtparam=i2s=on
#dtparam=spi=on
# Enable audio (loads snd_bcm2835)
dtparam=audio=on
dtparam=pciex1
# Additional overlays and parameters are documented
# /boot/firmware/overlays/README
# Automatically load overlays for detected cameras
camera_auto_detect=1
# Automatically load overlays for detected DSI displays
display_auto_detect=1
# Automatically load initramfs files, if found
auto_initramfs=1
# Enable DRM VC4 V3D driver
dtoverlay=vc4-kms-v3d
max_framebuffers=2
# Don't have the firmware create an initial video= setting in cmdline.txt.
# Use the kernel's default instead.
disable_fw_kms_setup=1
# Run in 64-bit mode
arm_64bit=1
# Disable compensation for displays with overscan
disable_overscan=1
# Run as fast as firmware / board allows
arm_boost=1
[cm4]
# Enable host mode on the 2711 built-in XHCI USB controller.
# This line should be removed if the legacy DWC2 controller is required
# (e.g. for USB device mode) or if USB support is not required.
otg_mode=1
[cm5]
dtoverlay=dwc2,dr_mode=host
[all]
dtoverlay=pciex1-compat-pi5,no-mip
```
完成修改并重启后,可以使用 `lspci` 命令检查加速卡是否正确被识别:
```bash
$ lspci
0000:01:00.0 Multimedia video controller: Axera Semiconductor Co., Ltd Device 0650 (rev 01)
```
其中 `Multimedia video controller: Axera Semiconductor Co., Ltd Device 0650 (rev 01)` 就是 AX650 加速卡。
#### 驱动安装
:::{Warning}
开发板需要编译支持,依赖 gcc, make, patch, linux-header-$(uname -r) 这几个包。需要提前安装好,或者保证安装时网络可用。
:::
将 aarch64 deb 包复制到树莓派开发板上,运行安装命令:
```bash
$ sudo apt install axcl_host_aarch64_Vxxx.deb
```
:::{important}
SDK V3.4.0 以前的SDK版本仅支持dpkg安装,请执行`sudo dpkg -i ./xxx.deb`
:::
安装将很快完成。安装时会自动增加环境变量,使得安装的 .so 和可执行程序可用。需要注意的是,如果需要可执行程序立即可用,还需要更新 bash 终端的环境:
```bash
$ source /etc/profile
```
如果是 ssh 的方式远程连接的板卡,还可以选择重连 ssh 进行自动更新(本机终端登录还可以重开一个终端进行自动更新)。
#### 启动子卡
主机启动时,将会自动启动子卡
#### 卸载安装
```bash
$ sudo apt remove axclhost
```
:::{important}
SDK V3.4.0 以前的版本,请执行`dpkg -r axclhost`卸载
:::
#### 应用展示
树莓派5通过加装一个HAT可以连接两张芯茧算力卡。


(setup_uos)=
### UOS
:::{note}
以下示例以统信UOS桌面专业版AMD64 [1070 HWE](https://cdimage-download.chinauos.com/hwe/1072/release/uos-desktop-20-professional-hwe-1070-amd64-202412.iso?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3NDY3MDc0NDMsImZpbGVfbmFtZSI6Imh3ZS8xMDcyL3JlbGVhc2UvdW9zLWRlc2t0b3AtMjAtcHJvZmVzc2lvbmFsLWh3ZS0xMDcwLWFtZDY0LTIwMjQxMi5pc28ifQ.DUFV5zuXEkzlsRdjp6DysdahDza7Nrh5b_8aHEo0sTY) 版本为例。
:::
#### Step1:关闭签名
- 进入`电源管理` - `使用电源` - 将`电脑进入待机模式`该为**从不**。 进入待机后,PCIe链路会断开且不能恢复。
- 建议配置为高性能模式。
- 进入`开发者选项`的**安全中心**,关闭应用签名。


#### Step2:系统更新
```bash
$ sudo apt update && sudo apt upgrade -y
$ sudo reboot
```
#### Step3:安装Linux headers
```bash
$ sudo apt install -y linux-headers-$(uname -r)
```
#### Step4:升级GCC
UOS 1070 HWE 默认没有安装g++,且gcc版本为8.3.0,而AXCL运行时刻要求C++17标准,最低要求为GCC 9.4.0,因此请参阅 [`gcc更新`](#gccupdate) 子章节更新GCC到9.4.0.
#### Step5:安装AXCL
```bash
$ sudo apt install -y ./xxx.deb
```
#### Step6:验证安装
查看安装包信息
```bash
$ apt show axclhost
```
执行`axcl-smi`,确认设备能正确找到
```bash
$ axcl-smi
+------------------------------------------------------------------------------------------------+
| AXCL-SMI V3.4.0_20250418095028 Driver V3.4.0_20250418095028 |
+-----------------------------------------+--------------+---------------------------------------+
| Card Name Firmware | Bus-Id | Memory-Usage |
| Fan Temp Pwr:Usage/Cap | CPU NPU | CMM-Usage |
|=========================================+==============+=======================================|
| 0 AX650N V3.4.0 | 0000:03:00.0 | 153 MiB / 945 MiB |
| -- 38C -- / -- | 1% 0% | 18 MiB / 7040 MiB |
+-----------------------------------------+--------------+---------------------------------------+
+------------------------------------------------------------------------------------------------+
| Processes: |
| Card PID Process Name NPU Memory Usage |
|================================================================================================|
```
(uninstalldriver)=
## 卸载安装
### ubuntu等debian系统
```bash
$ sudo apt remove axclhost
```
:::{important}
SDK V3.4.0 以前的版本,请执行`dpkg -r axclhost`卸载
:::
### centos等redhat系统
```bash
$ sudo yum remove axcl_host
```
:::{important}
SDK V3.4.0 以前的版本,请执行`sudo rpm -e axcl_host`卸载
:::
## 驱动升级
:::{important}
**请先[卸载](#uninstalldriver)旧驱动,再重新安装新的驱动**
:::