summaryrefslogtreecommitdiffstats
path: root/docs/3.Usage.md
blob: df56cf1a56e2115a73ed328d2a58c155fd9aa9af (plain)
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
Using AVIRT
===================================

## Introduction

## Table of Contents

1. [Load/Unload AVIRT](#un-load-avirt)
2. [Configuring AVIRT](#configuring-avirt)

<a name="un-load-avirt"/>

## Loading and Unloading AVIRT

### Load Out of Tree

As root, load the required `avirt_core.ko` and subsequent audio path.
As an example, the Dummy Audiopath is being loaded here.

```sh
insmod avirt_core.ko
insmod dummy/avirt_dummyap.ko
insmod loopback/avirt_loopbackap.ko
```

### Note:

The loading and unloading of drivers can be performed using the helper scripts.
To run, we must load the kernel modules using the `scripts/load.sh` script:

```sh
$ ./scripts/load.sh
```

To unload the drivers use:

```sh
$ ./scripts/unload.sh
```

### Load In Tree

#### Note:

Either build the module in tree, or you can copy the modules manually and then run `depmod` to generate dependencies.
For example, in AGL:

```sh
mkdir -p /lib/modules/$(uname -r)/extra
cp avirt_core.ko avirt_dummyap.ko avirt_loopbackap.ko /lib/modules/$(uname -r)/extra
depmod
```

Once the modules are in place, we can load the modules using:

```sh
modprobe avirt_core
modprobe avirt_dummyap
modprobe avirt_loopbackap
```

<a name="configure-avirt" />

## Configuring AVIRT

AVIRT is configured using configfs.

### Note:

A sample script for the following is supplied inside the `scripts` folder.

First, verify the kernel supports the use of configfs.

```sh
fgrep configfs /proc/filesystems
```

the expected output is:

```
nodev	configfs
```

Once confirmed, we can mount the configfs at the conventional point:

```sh
# Check configfs is mounted on the system
mkdir -p /config
mount -t configfs none /config
```

Finally, we can configure AVIRT:

```sh
# Set up each of the cards channels
mkdir /config/avirt/streams/playback_media
echo "2">/config/avirt/streams/playback_media/channels
echo "ap_dummy">/config/avirt/streams/playback_media/map

mkdir /config/avirt/streams/playback_navigation
echo "1">/config/avirt/streams/playback_navigation/channels
echo "ap_dummy">/config/avirt/streams/playback_navigation/map

mkdir /config/avirt/streams/playback_emergency
echo "1">/config/avirt/streams/playback_emergency/channels
echo "ap_dummy">/config/avirt/streams/playback_emergency/map

mkdir /config/avirt/streams/capture_voice
echo "1">/config/avirt/streams/capture_voice/channels
echo "ap_dummy">/config/avirt/streams/capture_voice/map

# Finally, seal the card, and initiate configuration
echo "1">/config/avirt/streams/sealed
```

Alternatively, the test script at `scripts/test_configfs.sh` can be used.

### Note:

A simplified helper library, libavirt, is available [here](https://github.com/fiberdyne/libavirt).
Please refer to the readme in libavirt for further details.