Bootstrap

树莓派上WM8960 驱动安装的过程

安装WM8960驱动:

cd WM8960-Audio-HAT
需要等待一定的时间
sudo ./install.sh 
sudo reboot

install.h的详细过程

!/bin/bash

 检查脚本是否以 root 用户权限运行,如果不是则提示需要使用 sudo 并退出
if [[ $EUID -ne 0 ]]; then
   echo "这个脚本必须以 root 权限运行 (使用 sudo)" 1>&2
   exit 1
fi

 检查设备是否为树莓派,如果不是则提示并退出
is_Raspberry=$(cat /proc/device-tree/model | awk '{print $1}')
if [ "x${is_Raspberry}" != "xRaspberry" ] ; then
  echo "抱歉,这个驱动程序仅适用于树莓派"
  exit 1
fi

ver="1.0"

 创建一个带有该版本号的目录,以确保在内核更新期间 'dkms remove' 不会删除源文件
marker="0.0.0"

 更新软件包列表
apt update

 安装树莓派内核头文件、dkms、git、i2c 工具和音频插件
apt-get -y install raspberrypi-kernel-headers
apt-get -y install dkms git i2c-tools libasound2-plugins

 查找当前安装的内核版本(如果刚更新内核,可能与正在运行的内核不同)
kernels=$(ls /lib/modules | sed "s/^/-k /")
uname_r=$(uname -r)

 定义安装模块的函数
function install_module {
  src=$1
  mod=$2

   如果 dkms 的版本标记目录存在,删除它
  if [[ -d /var/lib/dkms/$mod/$ver/$marker ]]; then
    rmdir /var/lib/dkms/$mod/$ver/$marker
  fi

   如果模块的源目录或 dkms 版本目录存在,删除它们
  if [[ -e /usr/src/$mod-$ver || -e /var/lib/dkms/$mod/$ver ]]; then
    dkms remove --force -m $mod -v $ver --all
    rm -rf /usr/src/$mod-$ver
  fi

   创建模块的源目录并复制源文件
  mkdir -p /usr/src/$mod-$ver
  cp -a $src/ /usr/src/$mod-$ver/
  
   添加、编译并安装模块
  dkms add -m $mod -v $ver
  dkms build $uname_r -m $mod -v $ver && dkms install --force $uname_r -m $mod -v $ver

   创建版本标记目录
  mkdir -p /var/lib/dkms/$mod/$ver/$marker
}

 安装 wm8960-soundcard 模块
install_module "./" "wm8960-soundcard"

 安装设备树覆盖文件
cp wm8960-soundcard.dtbo /boot/overlays

 设置内核模块
grep -q "i2c-dev" /etc/modules || echo "i2c-dev" >> /etc/modules  
grep -q "snd-soc-wm8960" /etc/modules || echo "snd-soc-wm8960" >> /etc/modules  
grep -q "snd-soc-wm8960-soundcard" /etc/modules || echo "snd-soc-wm8960-soundcard" >> /etc/modules  


 设置设备树覆盖
sed -i -e 's:dtparam=i2c_arm=on:dtparam=i2c_arm=on:g' /boot/firmware/config.txt || true
grep -q "dtoverlay=i2s-mmap" /boot/firmware/config.txt || echo "dtoverlay=i2s-mmap" >> /boot/firmware/config.txt
grep -q "dtparam=i2s=on" /boot/firmware/config.txt || echo "dtparam=i2s=on" >> /boot/firmware/config.txt
grep -q "dtoverlay=wm8960-soundcard" /boot/firmware/config.txt || echo "dtoverlay=wm8960-soundcard" >> /boot/firmware/config.txt

 安装配置文件
mkdir /etc/wm8960-soundcard || true
cp .conf /etc/wm8960-soundcard
cp .state /etc/wm8960-soundcard

 设置服务
cp wm8960-soundcard /usr/bin/
cp wm8960-soundcard.service /lib/systemd/system/
systemctl enable wm8960-soundcard.service 
systemctl start wm8960-soundcard                                

echo "------------------------------------------------------"
echo "请重新启动您的树莓派以应用所有设置"
echo "享受吧!"
echo "------------------------------------------------------"

安装树莓派内核头文件、dkms、git、i2c 工具和音频插件

 安装树莓派内核头文件、dkms、git、i2c 工具和音频插件
apt-get -y install raspberrypi-kernel-headers
apt-get -y install dkms git i2c-tools libasound2-plugins

树莓派内核头文件(raspberrypi-kernel-headers)

树莓派内核头文件是包含内核编译所需的头文件和配置文件的包。它们对于编译和安装与内核交互的模块(如设备驱动程序)是必需的。内核头文件使开发人员能够编译自定义内核模块,而无需重新编译整个内核。

DKMS(Dynamic Kernel Module Support)

DKMS 是一个用于动态管理内核模块的框架。它允许在内核更新后自动重新构建模块,从而确保模块与新内核兼容。DKMS 提供了一种自动化的方式来管理内核模块的构建、安装和删除,对于那些需要在内核更新后继续工作的模块非常有用。

Git

Git 是一种分布式版本控制系统,广泛用于软件开发和其他版本控制任务。它允许多个开发人员同时工作,跟踪代码更改,并管理项目的不同版本。Git 是开源的,具有高效的分支和合并功能,适用于各种规模的项目。

I2C 工具(i2c-tools)

I2C(Inter-Integrated Circuit)工具是一组用于与 I2C 总线和连接的设备进行通信的实用程序。I2C 工具包括命令行程序,如 i2cdetect、i2cdump 和 i2cset,用于检测和配置 I2C 设备。这些工具对于调试和开发与 I2C 设备通信的应用程序非常有用。

音频插件(libasound2-plugins)

libasound2-plugins 是 ALSA(Advanced Linux Sound Architecture)库的一部分,提供额外的音频处理插件。这些插件可以增强音频处理能力,支持各种音频格式的转换和处理。对于需要高级音频处理功能的应用程序,这些插件是非常重要的。

添加、编译并安装模块

 添加、编译并安装模块
dkms add -m $mod -v $ver
dkms build $uname_r -m $mod -v $ver && dkms install --force $uname_r -m $mod -v $ver

dkms add -m $mod -v $ver

这一行使用 dkms add 命令来将模块源代码添加到 DKMS 系统中。

- -m $mod:指定模块名称,其中 $mod 是模块名称的变量(在之前定义)。

- -v $ver:指定模块的版本号,其中 $ver 是版本号的变量(在之前定义)。

添加后,DKMS 系统知道该模块,并准备好在必要时编译和安装它。

dkms build $uname_r -m $mod -v $ver

这一行使用 dkms build 命令来编译指定的内核模块。

- $uname_r:这是当前运行的内核版本(通过 uname -r 获取)。

- -m $mod:指定模块名称。

- -v $ver:指定模块的版本号。

编译过程会根据提供的模块源代码生成适用于当前内核版本的内核模块。

&&

这是一个逻辑与操作符,表示如果前面的命令成功(返回值为0),则执行后面的命令。如果前面的命令失败(返回值非0),则不会执行后面的命令。

dkms install --force $uname_r -m $mod -v $ver

这一行使用 dkms install 命令来安装刚刚编译好的内核模块。

- --force:强制安装,即使之前已经安装了相同版本的模块。

- $uname_r:当前运行的内核版本。

- -m $mod:指定模块名称。

- -v $ver:指定模块的版本号。

安装完成后,模块将被加载到内核中,并且在系统启动时自动加载。

安装模块

install_module "./" "wm8960-soundcard"

wm8960-soundcard这个文件

!/bin/bash

 开启调试模式,输出每一行命令到终端
set -x

 将标准输出和标准错误重定向到日志文件
exec 1>/var/log/$(basename $0).log 2>&1

 启用 I2C 接口
dtparam i2c_arm=on

 加载 i2c-dev 模块
modprobe i2c-dev

 休眠 1 秒,以确保设置生效
sleep 1

 使用一个循环,最多尝试 5 次
for loop in 1 2 3 4 5
do
     检查 I2C 设备地址 0x1a 是否存在(1a 表示设备存在,UU 表示设备已被占用)
    is_1a=$(i2cdetect -y 1 0x1a 0x1a | egrep "(1a|UU)" | awk '{print $2}')

     如果检测到设备
    if [ "x${is_1a}" != "x" ] ; then
        echo "安装 wm8960-soundcard"

         应用 wm8960-soundcard 的设备树覆盖
        dtoverlay wm8960-soundcard
        sleep 1

         删除现有的 ALSA 配置文件
        rm /etc/asound.conf
        rm /var/lib/alsa/asound.state

         创建 wm8960-soundcard 的配置文件链接
        echo "创建 wm8960-soundcard 配置文件"
        ln -s /etc/wm8960-soundcard/asound.conf /etc/asound.conf

         创建 wm8960-soundcard 的状态文件链接
        echo "创建 wm8960-soundcard 状态文件"
        ln -s /etc/wm8960-soundcard/wm8960_asound.state /var/lib/alsa/asound.state
        break
    fi

     如果没有检测到设备,等待 3 秒再尝试
    sleep 3
done

 恢复 ALSA 状态
alsactl restore

set -x

开启调试模式,这样每执行一行命令都会输出到终端,这对于调试脚本非常有用。

exec 1>/var/log/$(basename $0).log 2>&1

将标准输出(stdout)和标准错误(stderr)重定向到一个日志文件。这个日志文件的名称是脚本名称加上 .log 后缀,位于 /var/log 目录下。

dtparam i2c_arm=on

启用树莓派上的 I2C 接口。

modprobe i2c-dev

加载 i2c-dev 内核模块,允许通过 I2C 接口与设备通信。

sleep 1

休眠 1 秒,确保之前的设置有足够时间生效。

for loop in 1 2 3 4 5

开始一个循环,最多尝试 5 次。

is_1a=$(i2cdetect -y 1 0x1a 0x1a | egrep "(1a|UU)" | awk '{print $2}')

使用 i2cdetect 命令检测 I2C 总线 1 上地址为 0x1a 的设备。egrep "(1a|UU)" 用于过滤输出,只保留含有 "1a" 或 "UU" 的行,awk '{print $2}' 用于提取第二列的内容。

if [ "x${is_1a}" != "x" ] ; then

检查 is_1a 是否非空,即是否检测到设备。

dtoverlay wm8960-soundcard

应用 wm8960-soundcard 的设备树覆盖文件,以使系统识别并配置该设备。

rm /etc/asound.conf

删除现有的 ALSA 配置文件。

rm /var/lib/alsa/asound.state

删除现有的 ALSA 状态文件。

ln -s /etc/wm8960-soundcard/asound.conf /etc/asound.conf

创建 asound.conf 的符号链接,指向 wm8960-soundcard 的配置文件。

ln -s /etc/wm8960-soundcard/wm8960_asound.state /var/lib/alsa/asound.state

创建 asound.state 的符号链接,指向 wm8960-soundcard 的状态文件。

sleep 3

如果没有检测到设备,等待 3 秒再重试。

alsactl restore

恢复 ALSA 的状态,以应用新的配置。

这段脚本的主要功能是在树莓派上检测 I2C 设备,并配置 wm8960-soundcard 音频设备的相关文件和设置。

安装设备树覆盖文件

 安装设备树覆盖文件
cp wm8960-soundcard.dtbo /boot/overlays

设备树和设备树覆盖文件

设备树(Device Tree)是一种数据结构,用于描述硬件的层次结构和配置信息。它通常用于嵌入式系统,如树莓派,以便操作系统能够正确识别和配置硬件设备。设备树文件通常以 .dts(源文件)和 .dtb(编译后的二进制文件)形式存在。

设备树覆盖文件(Device Tree Overlay)是一种用于动态修改设备树的机制。它允许用户在不修改主设备树文件的情况下添加或更改特定设备的配置。这对于在运行时添加或调整硬件配置非常有用。例如,当添加一个新的硬件模块时,可以使用设备树覆盖文件来描述和配置这个模块。

详细步骤

1. 设备树覆盖文件:wm8960-soundcard.dtbo 是一个设备树覆盖文件,它包含了 wm8960-soundcard 音频设备的硬件配置信息。

2. 目标目录:/boot/overlays 目录是树莓派系统中存放设备树覆盖文件的标准位置。系统启动时会从该目录加载必要的设备树覆盖文件,以配置相关硬件。

复制操作

将 wm8960-soundcard.dtbo 复制到 /boot/overlays 目录的目的是使该设备树覆盖文件在系统启动时可用,从而让树莓派识别并正确配置 wm8960-soundcard 音频设备。具体操作如下:

- cp 命令用于复制文件。

- wm8960-soundcard.dtbo 是源文件,位于当前目录中。

- /boot/overlays 是目标目录,表示要将源文件复制到该目录中。

这行代码的主要目的是确保 wm8960-soundcard.dtbo 设备树覆盖文件被复制到树莓派系统的 /boot/overlays 目录,以便在系统启动时能够正确识别和配置 wm8960-soundcard 音频设备。

设置内核模块

 设置内核模块
grep -q "i2c-dev" /etc/modules || echo "i2c-dev" >> /etc/modules  
grep -q "snd-soc-wm8960" /etc/modules || echo "snd-soc-wm8960" >> /etc/modules  
grep -q "snd-soc-wm8960-soundcard" /etc/modules || echo "snd-soc-wm8960-soundcard" >> /etc/modules  

grep -q "i2c-dev" /etc/modules || echo "i2c-dev" >> /etc/modules

检查 /etc/modules 文件中是否已经包含 i2c-dev 模块,如果没有,则将 i2c-dev 模块添加到文件中。

- grep -q "i2c-dev" /etc/modules:使用 grep 命令搜索 /etc/modules 文件中的 i2c-dev 字符串。

- -q:表示静默模式,只返回状态码,不输出匹配结果。

- ||:逻辑或运算符,表示如果前面的 grep 命令未找到匹配项(返回非零状态码),则执行后面的 echo 命令。

- echo "i2c-dev" >> /etc/modules:将 i2c-dev 字符串追加到 /etc/modules 文件的末尾。

grep -q "snd-soc-wm8960" /etc/modules || echo "snd-soc-wm8960" >> /etc/modules

检查 /etc/modules 文件中是否已经包含 snd-soc-wm8960 模块,如果没有,则将 snd-soc-wm8960 模块添加到文件中。过程与上面的相同。

grep -q "snd-soc-wm8960-soundcard" /etc/modules || echo "snd-soc-wm8960-soundcard" >> /etc/modules

检查 /etc/modules 文件中是否已经包含 snd-soc-wm8960-soundcard 模块,如果没有,则将 snd-soc-wm8960-soundcard 模块添加到文件中。过程与上面的相同。

内核模块

内核模块是一种能够动态加载到内核中的代码,通常用于驱动硬件设备。通过将模块名称添加到 /etc/modules 文件中,可以确保这些模块在系统启动时自动加载。

具体步骤

1. 检查和添加 i2c-dev 模块:

- 使用 grep -q "i2c-dev" /etc/modules 命令检查 /etc/modules 文件中是否包含 i2c-dev 模块。

- 如果 grep 未找到(返回非零状态码),则执行 echo "i2c-dev" >> /etc/modules 命令,将 i2c-dev 模块名称追加到 /etc/modules 文件中。

- i2c-dev 模块用于提供 I2C 设备支持。

2. 检查和添加 snd-soc-wm8960 模块:

- 使用相同的方法检查和添加 snd-soc-wm8960 模块,该模块用于支持 WM8960 音频编解码器的 ALSA 驱动。

3. 检查和添加 snd-soc-wm8960-soundcard 模块:

- 使用相同的方法检查和添加 snd-soc-wm8960-soundcard 模块,该模块用于支持具体的 WM8960 声卡配置。

这段代码的目的是确保 i2c-dev、snd-soc-wm8960 和 snd-soc-wm8960-soundcard 模块在系统启动时自动加载,从而支持 I2C 设备和 WM8960 音频设备的正常工作。每个模块的检查和添加步骤都使用了 grep 和 echo 命令的组合,以确保模块名称仅在未存在时才添加到 /etc/modules 文件中。

设置设备树覆盖
设置设备树覆盖
sed -i -e 's:dtparam=i2c_arm=on:dtparam=i2c_arm=on:g' /boot/firmware/config.txt || true
grep -q "dtoverlay=i2s-mmap" /boot/firmware/config.txt || echo "dtoverlay=i2s-mmap" >> /boot/firmware/config.txt
grep -q "dtparam=i2s=on" /boot/firmware/config.txt || echo "dtparam=i2s=on" >> /boot/firmware/config.txt
grep -q "dtoverlay=wm8960-soundcard" /boot/firmware/config.txt || echo "dtoverlay=wm8960-soundcard" >> /boot/firmware/config.txt

sed -i -e 's:dtparam=i2c_arm=on:dtparam=i2c_arm=on:g' /boot/firmware/config.txt || true

使用 sed 命令编辑 /boot/firmware/config.txt 文件,将所有 dtparam=i2c_arm=on 替换为 dtparam=i2c_arm=on。这里看似没有进行实际的修改,但目的是确保文件中确实包含这一行配置。

- sed:流编辑器,用于文本替换。

- -i:直接在文件中进行替换。

- -e 's:dtparam=i2c_arm=on:dtparam=i2c_arm=on:g':替换命令,将所有 dtparam=i2c_arm=on 替换为 dtparam=i2c_arm=on。冒号 : 作为分隔符。

- /boot/firmware/config.txt:目标文件。

- || true:即使 sed 命令失败,也不会影响脚本继续执行。

grep -q "dtoverlay=i2s-mmap" /boot/firmware/config.txt || echo "dtoverlay=i2s-mmap" >> /boot/firmware/config.txt

检查 /boot/firmware/config.txt 文件中是否包含 dtoverlay=i2s-mmap,如果没有,则将其追加到文件末尾。

- grep -q "dtoverlay=i2s-mmap" /boot/firmware/config.txt:检查文件中是否包含 dtoverlay=i2s-mmap 字符串。

- -q:静默模式,不输出结果,只返回状态码。

- || echo "dtoverlay=i2s-mmap" >> /boot/firmware/config.txt:如果 grep 未找到(返回非零状态码),则将 dtoverlay=i2s-mmap 字符串追加到文件末尾。

grep -q "dtparam=i2s=on" /boot/firmware/config.txt || echo "dtparam=i2s=on" >> /boot/firmware/config.txt

检查 /boot/firmware/config.txt 文件中是否包含 dtparam=i2s=on,如果没有,则将其追加到文件末尾。过程与上面的相同。

grep -q "dtoverlay=wm8960-soundcard" /boot/firmware/config.txt || echo "dtoverlay=wm8960-soundcard" >> /boot/firmware/config.txt

检查 /boot/firmware/config.txt 文件中是否包含 dtoverlay=wm8960-soundcard,如果没有,则将其追加到文件末尾。过程与上面的相同。

设置设备树覆盖

设备树覆盖用于动态修改和添加设备树配置,从而在不修改主设备树文件的情况下配置新的硬件设备。这对于在运行时添加或调整硬件配置非常有用。

具体步骤

1. 确保启用 I2C 接口:

- 使用 sed 命令检查并确保 /boot/firmware/config.txt 文件中包含 dtparam=i2c_arm=on。即使该行已经存在,这个命令也不会有任何负面影响。

- || true 确保即使 sed 命令失败,脚本也会继续执行。

2. 检查和添加 dtoverlay=i2s-mmap:

- 使用 grep 命令检查 /boot/firmware/config.txt 文件中是否包含 dtoverlay=i2s-mmap。如果没有找到,则使用 echo 命令将其追加到文件末尾。

- dtoverlay=i2s-mmap 配置用于启用 I2S 音频接口的内存映射。

3. 检查和添加 dtparam=i2s=on:

- 使用相同的方法检查并添加 dtparam=i2s=on。该配置参数用于启用 I2S 接口。

4. 检查和添加 dtoverlay=wm8960-soundcard:

- 使用相同的方法检查并添加 dtoverlay=wm8960-soundcard。该配置参数用于启用 WM8960 音频编解码器的设备树覆盖。

总结

这段代码的目的是通过编辑 /boot/firmware/config.txt 文件,确保系统在启动时加载必要的设备树覆盖和配置参数,以支持 I2C 接口、I2S 音频接口和 WM8960 音频设备。每个步骤都使用了 grep 和 echo 命令的组合,以确保配置参数仅在未存在时才被添加到文件中。

安装配置文件

mkdir /etc/wm8960-soundcard || true
cp *.conf /etc/wm8960-soundcard
cp *.state /etc/wm8960-soundcard

mkdir /etc/wm8960-soundcard || true

创建目录 /etc/wm8960-soundcard,用于存放 WM8960 声卡的配置文件。

- mkdir /etc/wm8960-soundcard:尝试创建目录 /etc/wm8960-soundcard。

- || true:如果目录已经存在(mkdir 命令失败),则忽略错误继续执行脚本。

cp *.conf /etc/wm8960-soundcard

将当前目录下所有 .conf 结尾的文件复制到 /etc/wm8960-soundcard 目录。

- cp:复制文件命令。

- *.conf:匹配当前目录中所有以 .conf 结尾的文件。

- /etc/wm8960-soundcard:目标目录,表示将文件复制到该目录。

cp *.state /etc/wm8960-soundcard

将当前目录下所有 .state 结尾的文件复制到 /etc/wm8960-soundcard 目录。

- cp:复制文件命令。

- *.state:匹配当前目录中所有以 .state 结尾的文件。

- /etc/wm8960-soundcard:目标目录,表示将文件复制到该目录。

安装配置文件

这段代码的目的是为 WM8960 声卡创建配置目录并复制相关配置文件,以便系统能够正确识别和配置该声卡。

具体步骤

1. 创建配置目录:

- mkdir /etc/wm8960-soundcard || true:尝试创建目录 /etc/wm8960-soundcard。

- 如果目录已经存在,mkdir 命令会失败,但 || true 确保即使失败,脚本也会继续执行。这种方式避免了重复创建目录时的错误。

2. 复制 .conf 配置文件:

- cp *.conf /etc/wm8960-soundcard:将当前目录下所有以 .conf 结尾的配置文件复制到 /etc/wm8960-soundcard 目录中。

- 这些 .conf 文件通常包含声卡的配置信息,如音频设备的参数和设置。

3. 复制 .state 配置文件:

- cp *.state /etc/wm8960-soundcard:将当前目录下所有以 .state 结尾的配置文件复制到 /etc/wm8960-soundcard 目录中。

- 这些 .state 文件通常包含声卡的状态信息,如音量设置、声道配置等。

这段代码的目的是确保 WM8960 声卡的配置文件被正确安装到系统中。通过创建 /etc/wm8960-soundcard 目录并复制相关的 .conf 和 .state 文件,系统在启动时能够加载和应用这些配置,从而正确识别和使用 WM8960 声卡。

设置服务
# 设置服务
cp wm8960-soundcard /usr/bin/
cp wm8960-soundcard.service /lib/systemd/system/
systemctl enable wm8960-soundcard.service 
systemctl start wm8960-soundcard

cp wm8960-soundcard /usr/bin/

将 wm8960-soundcard 可执行文件复制到 /usr/bin/ 目录。

- cp:复制文件命令。

- wm8960-soundcard:源文件,当前目录下的可执行文件。

- /usr/bin/:目标目录,表示将文件复制到系统的 /usr/bin/ 目录中。

cp wm8960-soundcard.service /lib/systemd/system/

将 wm8960-soundcard.service 服务文件复制到 /lib/systemd/system/ 目录。

- cp:复制文件命令。

- wm8960-soundcard.service:源文件,当前目录下的服务配置文件。

- /lib/systemd/system/:目标目录,表示将服务文件复制到系统的 systemd 服务目录中。

systemctl enable wm8960-soundcard.service

启用 wm8960-soundcard.service 服务,使其在系统启动时自动启动。

- systemctl:systemd 的控制命令。

- enable:启用服务,使其在系统启动时自动启动。

- wm8960-soundcard.service:服务名称。

systemctl start wm8960-soundcard

启动 wm8960-soundcard.service 服务。

- systemctl:systemd 的控制命令。

- start:启动服务。

- wm8960-soundcard:服务名称。

设置服务

这段代码的目的是将 wm8960-soundcard 服务文件和可执行文件复制到适当的系统目录,并启用和启动该服务,以便系统能够自动管理和运行该服务。

具体步骤

1.复制可执行文件:

- cp wm8960-soundcard /usr/bin/:将当前目录下的 wm8960-soundcard 可执行文件复制到 /usr/bin/ 目录。

- /usr/bin/ 目录是系统中存放用户可执行文件的目录,复制到此目录后,可以在任何地方通过命令 wm8960-soundcard 运行该程序。

2.复制服务文件:

- cp wm8960-soundcard.service /lib/systemd/system/:将当前目录下的 wm8960-soundcard.service 文件复制到 /lib/systemd/system/ 目录。

- /lib/systemd/system/ 目录是系统中存放 systemd 服务文件的目录,复制到此目录后,systemd 可以管理和控制该服务。

3.启用服务:

- systemctl enable wm8960-soundcard.service:启用 wm8960-soundcard.service 服务,使其在系统启动时自动启动。

- 这条命令会创建相应的符号链接,使服务在系统启动时被 systemd 自动启动。

4.启动服务:

- systemctl start wm8960-soundcard:立即启动 wm8960-soundcard.service 服务。

- 这条命令会立即启动服务,使其开始运行。

这段代码的目的是确保 wm8960-soundcard 服务文件和可执行文件被正确安装到系统中,并配置 systemd 以自动管理该服务。通过将文件复制到适当的目录并启用和启动服务,系统在启动时会自动运行 wm8960-soundcard 服务,从而确保相关功能正常工作。

;