; }">
当前位置:   article > 正文

2021-02-22_&tscadc { status = "okay"; adc { ti,adc-channels =

&tscadc { status = "okay"; adc { ti,adc-channels = <0 1 2 3 4 5 6 7>; }

jacinto 内核驱动程序 – 1

3.2.2.1 ADC
介绍
模数转换器(简称ADC)是一种利用采样将连续量转换为数字形式的离散时间表示的设备。
TSC_ADC_SS (Touchscreen_ADC_subsystem)是一个8通道通用ADC,可选支持交错触摸屏转换。TSC_ADC_SS可以在以下应用程序选项中使用和配置:
•8个通用ADC通道
•4线TS, 4个通用ADC通道
•5线TS, 3个通用ADC通道
ADC采用12位SAR ADC,采样速率为200 KSPS(Kilo Samples Per Second)。当“转换开始”信号较高时,ADC对模拟信号进行采样,并在下降边缘后继续采样1个时钟周期。它在采样周期结束时捕获信号并开始转换。它使用12个时钟周期对采样的输入进行数字化,然后启用一个“转换结束”信号,这表明数字数据ADCOUT<11:0>已准备好供SW使用。在读取之前的数据之后,可以启动新的转换周期。请注意,ADC输出为正二进制加权数据。
将模拟电压转换为数字
以交叉验证数字值的读取使用

D = Vin * (2^n - 1) / Vref
Where:
D = Digital value
Vin = Input voltage
n = No of bits
Vref = reference voltage
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

例如:输入电压为1.01的AIN 4通道读取值:
公式:

D = 1.01 * (2^12 -1 )/ 1.8
D = 2297.75
  • 1
  • 2

访问TI EVMs上的ADC引脚
AM335x EVM
在EVM之上,在LCD子板上,可以使用J8连接器,其中ADC通道输入为AIN0-AN7引脚。有关j8连接器布局的详细信息,请参阅此处的evm原理图。
Beaglebone/Beaglebone Black
在Beaglebone平台上,可以使用P9扩展头。有关扩展头布局的更多信息,请参阅此处的Beaglebone示意图

驱动程序配置
您可以在内核中启用ADC驱动程序,如下所示.

Device Drivers  --->
         [*]  Industrial I/O support  --->
                  [*]  Enable buffer support within IIO
                       Analog to digital converters  --->
                               <*> TI's AM335X ADC driver
  • 1
  • 2
  • 3
  • 4
  • 5

条目“TI的AM335X ADC驱动程序”缺少MFD组件—>

Device Drivers  --->
    Multifunction device drivers  --->
        <M> TI ADC / Touch Screen chip support
  • 1
  • 2
  • 3

构建为可加载内核模块
•如果要将驱动程序构建为模块,在menuconfig期间,请在选择驱动程序时使用而不是<*>(如下所示)。有关编译和安装内核模块的更多信息,请参阅《内核用户指南》。有关可加载模块的更多信息,请参阅可加载模块HOWTO。

Device Drivers  --->
         [M]  Industrial I/O support  --->
                  [*]  Enable buffer support within IIO
                       Analog to digital converters  --->
                               <M> TI's AM335X ADC driver
  • 1
  • 2
  • 3
  • 4
  • 5
  1. 在内核构建期间使用“make modules”将ADC驱动程序构建为模块。这个模块应该出现在drivers/iio/adc/ti_am335x_adc.ko中。
  2. 驱动程序应该在文件系统引导时自动加载。如果没有,则使用
    modprobe ti_am335x_adc.ko
    设备树
    如下图所示,在文件(arch/arm/boot/dts/am335x-evm.dts)中添加ADC设备树数据
&tscadc {
        status = "okay";
        adc {
                ti,adc-channels = <4 5 6 7>;
        };
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

参数“ti,adc-channels”需要保存与您希望为ADC使用的通道相关的数据。
•本例使用ADC使用的通道AIN4、AIN5、AIN6和AIN7。其余的通道(0到3)由TSC使用。
你可以在drivers/iio/adc/ti_am335x_adc.c的内核源代码中找到ADC的源代码。
使用
为了测试ADC,通过AIN7引脚将直流电压电源连接到每个AIN0(基于您的通道配置),并在0到1.8v参考电压之间变化电压。
注意请确保供电电压不超过1.8v
在加载模块时,您将看到创建了IIO设备

root@arago-armv7:~# ls -al /sys/bus/iio/devices/iio\:device0/
drwxr-xr-x    5 root     root             0 Nov  1 22:06 .
drwxr-xr-x    4 root     root             0 Nov  1 22:06 ..
drwxr-xr-x    2 root     root             0 Nov  1 22:06 buffer
-r--r--r--    1 root     root          4096 Nov  1 22:06 dev
-rw-r--r--    1 root     root          4096 Nov  1 22:06 in_voltage4_raw
-rw-r--r--    1 root     root          4096 Nov  1 22:06 in_voltage5_raw
-rw-r--r--    1 root     root          4096 Nov  1 22:06 in_voltage6_raw
-rw-r--r--    1 root     root          4096 Nov  1 22:06 in_voltage7_raw
-r--r--r--    1 root     root          4096 Nov  1 22:06 name
lrwxrwxrwx    1 root     root             0 Nov  1 22:06 of_node -> ../../../../../../firmware/devicetree/base/ocp/tscadc@44e0d000/adc
drwxr-xr-x    2 root     root             0 Nov  1 22:06 power
drwxr-xr-x    2 root     root             0 Nov  1 22:06 scan_elements
lrwxrwxrwx    1 root     root             0 Nov  1 22:06 subsystem -> ../../../../../../bus/iio
-rw-r--r--    1 root     root          4096 Nov  1 22:06 uevent
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

操作模式
当ADC定序器完成所有启用的通道的循环时,用户可以决定定序器是否应停止(一次触发模式),或再次循环并调度(连续模式)。如果启用了一个快照模式,则只能安排一次序列器(序列发生器硬件将在其被调度后自动禁用该可存储的位,这将仅保证每个通道取一个样本)。当用户想要连续地进行采样时,需要启用连续模式。不能同时读取单通道和连续模式的ADC数据
一次性模式
若要从特定通道读取单个adc输出,可以使用此接口.

root@arago-armv7:~# cat /sys/bus/iio/devices/iio\:device0/in_voltage4_raw
645
  • 1
  • 2

该特性由IIO通过以下文件公开:
•in_voltageX_raw: ADC通道X的原始值
连续模式
概述
iio:deviceX目录下的重要文件夹有:
•缓冲
•enable:获取和设置缓冲区的状态
•length:获取和设置缓冲区的长度。

root@charlie:~# ls -l /sys/bus/iio/devices/iio\:device0/buffer/
total 0
-rw-r--r-- 1 root root 4096 Nov  3 22:53 enable
-rw-r--r-- 1 root root 4096 Nov  3 22:53 length
-rw-r--r-- 1 root root 4096 Nov  3 22:53 watermark
  • 1
  • 2
  • 3
  • 4
  • 5

•Scan_elements目录包含了将在缓冲区中为单个样本集捕获的元素接口。

root@arago-armv7:~# ls -al /sys/bus/iio/devices/iio\:device0/scan_elements/
drwxr-xr-x    2 root     root            0 Jan  1 00:00 .
drwxr-xr-x    5 root     root            0 Jan  1 00:00 ..
-rw-r--r--    1 root     root         4096 Jan  1 00:02 in_voltage0_en
-r--r--r--    1 root     root         4096 Jan  1 00:02 in_voltage0_index
-r--r--r--    1 root     root         4096 Jan  1 00:02 in_voltage0_type
-rw-r--r--    1 root     root         4096 Jan  1 00:02 in_voltage1_en
-r--r--r--    1 root     root         4096 Jan  1 00:02 in_voltage1_index
-r--r--r--    1 root     root         4096 Jan  1 00:02 in_voltage1_type
-rw-r--r--    1 root     root         4096 Jan  1 00:02 in_voltage2_en
-r--r--r--    1 root     root         4096 Jan  1 00:02 in_voltage2_index
-r--r--r--    1 root     root         4096 Jan  1 00:02 in_voltage2_type
-rw-r--r--    1 root     root         4096 Jan  1 00:02 in_voltage3_en
-r--r--r--    1 root     root         4096 Jan  1 00:02 in_voltage3_index
-r--r--r--    1 root     root         4096 Jan  1 00:02 in_voltage3_type
-rw-r--r--    1 root     root         4096 Jan  1 00:02 in_voltage4_en
-r--r--r--    1 root     root         4096 Jan  1 00:02 in_voltage4_index
-r--r--r--    1 root     root         4096 Jan  1 00:02 in_voltage4_type
-rw-r--r--    1 root     root         4096 Jan  1 00:02 in_voltage5_en
-r--r--r--    1 root     root         4096 Jan  1 00:02 in_voltage5_index
-r--r--r--    1 root     root         4096 Jan  1 00:02 in_voltage5_type
-rw-r--r--    1 root     root         4096 Jan  1 00:02 in_voltage6_en
-r--r--r--    1 root     root         4096 Jan  1 00:02 in_voltage6_index
-r--r--r--    1 root     root         4096 Jan  1 00:02 in_voltage6_type
-rw-r--r--    1 root     root         4096 Jan  1 00:02 in_voltage7_en
-r--r--r--    1 root     root         4096 Jan  1 00:02 in_voltage7_index
-r--r--r--    1 root     root         4096 Jan  1 00:02 in_voltage7_type
root@arago-armv7:~#
  • 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

scan_elements每个通道包含3个文件:
•in_voltageX_en:该通道是否开启?
•in_voltageX_index:该通道在缓冲区块中的索引
•in_voltageX_type: ADC如何存储数据。读取这个文件应该会返回一个字符串,如下所示:

root@arago-armv7:~# cat /sys/bus/iio/devices/iio\:device0/scan_elements/in_voltage1_type
le:u12/16>>0
  • 1
  • 2

Where:
•le代表字节序,这里是小字节序
•u是返回值的符号。它可以是u(无符号)或者s(有符号)
•12是相关信息的位数
•16是用于存储数据的实际位数
•0为需要右移位的次数。
如何设置
为了连续读取ADC数据,我们需要启用缓冲区和通道。
设置正在使用的通道(您可以启用任何您想要的通道组合)

root@arago-armv7:~# echo 1 > /sys/bus/iio/devices/iio\:device0/scan_elements/in_voltage0_en
root@arago-armv7:~# echo 1 > /sys/bus/iio/devices/iio\:device0/scan_elements/in_voltage5_en
root@arago-armv7:~# echo 1 > /sys/bus/iio/devices/iio\:device0/scan_elements/in_voltage7_en
设置缓冲区长度
root@arago-armv7:~# echo 100 > /sys/bus/iio/devices/iio\:device0/buffer/length
启用捕获
root@arago-armv7:~# echo 1 > /sys/bus/iio/devices/iio\:device0/buffer/enable
现在,所有捕获都暴露在字符设备/dev/iio:device0中
要停止捕获,只需禁用缓冲区
root@arago-armv7:~# echo 0 > /sys/bus/iio/devices/iio\:device0/buffer/enable
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

用户空间的示例应用程序
源代码位于tools/iio/iio_generic_buffer.c的内核源代码下。
如何编译:
$ make -C /tools/iio ARCH=arm
iio_generic_buffer应用程序为您执行所有ADC通道的“启用”和“禁用”操作。您只需要指定IIO驱动程序。应用程序需要使用的缓冲区长度(本例中为256)和希望运行的迭代次数(本例中为3)。只需启用缓冲区ADC切换到连续模式。

root@charlie:~# ./iio_generic_buffer -?
Usage: generic_buffer [options]...
Capture, convert and output data from IIO device buffer
  -a         Auto-activate all available channels
  -A         Force-activate ALL channels
  -c <n>     Do n conversions
  -e         Disable wait for event (new data)
  -g         Use trigger-less mode
  -l <n>     Set buffer length to n samples
  --device-name -n <name>
  --device-num -N <num>
        Set device by name or number (mandatory)
  --trigger-name -t <name>
  --trigger-num -T <num>
        Set trigger by name or number
  -w <n>     Set delay between reads in us (event-less mode)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

例如:-

root@charlie:~# ./iio_generic_buffer -N 0 -g -a
iio device number being used is 0
trigger-less mode selected
Enabling all channels
Enabling: in_voltage7_en
Enabling: in_voltage4_en
Enabling: in_voltage6_en
Enabling: in_voltage5_en
525.000000 924.000000 988.000000 1039.000000
754.000000 986.000000 1071.000000 1117.000000
877.000000 1067.000000 1150.000000 1169.000000
1003.000000 1143.000000 1230.000000 1226.000000
1078.000000 1222.000000 1298.000000 1286.000000
1139.000000 1286.000000 1372.000000 1343.000000
...
...
1863.000000 1954.000000 2031.000000 2074.000000
1858.000000 1959.000000 2023.000000 2083.000000
1852.000000 1958.000000 2024.000000 2076.000000
1866.000000 1964.000000 2029.000000 2083.000000
1850.000000 1952.000000 2026.000000 2074.000000
Disabling: in_voltage7_en
Disabling: in_voltage4_en
Disabling: in_voltage6_en
Disabling: in_voltage5_en
  • 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

ADC驱动程序的限制
这个驱动程序基于IIO(工业I/O子系统),但是这个驱动程序的功能有限:

  1. “超出范围”ADC驱动程序不支持。
    3.2.2.2 音频
    3.2.2.2.1 介绍
    •此页给出了音频使用的基本信息在支持的板
    •关于Linux音频(ALSA, ASoC)的更全面的信息可以找到:
•	http://processors.wiki.ti.com/index.php/AM335x_Audio_Driver%27s_Guide
•	http://processors.wiki.ti.com/index.php/Sitara_SDK_Linux_Audio
  • 1
  • 2

•对于Linux的通用信息,请参考Linux内核用户指南.

3.2.2.2.2. 通用的命令和指令
大多数板具有简单的音频设置,这意味着我们有一个具有一个回放和一个捕获PCM的声卡。要列出可用的声卡和PCMS,请执行以下操作:
aplay -l
列出可供捕获的声卡和PCM:
arecord -l
在大多数情况下-Dplughw:0,0是我们想要用于音频的设备,但如果我们有几个音频设备(例如板载+ USB),需要指定哪个设备使用音频:
-Dplughw:j721ecpbanalog,0将使用J721E-EVM板上的机载音频。
在card0的PCM0上播放音频,并让ALSA决定是否需要重新采样:

aplay -Dplughw:0,0 <path to wav file>
  • 1

将音频记录到文件中:

arecord -Dplughw:0,0 -t wav <path to wav file>
  • 1

测试全双工音频(播放录制的音频w/o中间文件):

arecord -Dplughw:0,0 | aplay -Dplughw:0,0
  • 1

要要求播放/捕捉特定的音频格式,请参阅aplay/arecord的帮助。例如,可以使用-f来指定格式,使用-r来指定采样率,或者使用-c来指定通道的数量。在这种情况下,应该通过-Dhw:0,0打开hw设备(不是插头)。例如,录制48KHz,立体声16bit音频:

arecord -Dhw:0,0 -fdat -t wav record_48K_stereo_16bit.wav
  • 1

或录制96KHz,立体声24位音频:

arecord -Dhw:0,0 -fS24_LE -c2 -r96000 -t wav record_96K_stereo_24bit.wav
  • 1

一个很好的做法是保存被发现良好的混频器设置,并在每次引导后重新加载它们(如果您的发行版还没有这样做的话)。

Set the mixers for the board with amixer, alsamixer
alsactl -f board.aconf store
  • 1
  • 2

启动单板后,可以使用一个命令恢复它:
alsactl -f board.aconf restore
3.2.2.2.3. Board-specific指令
J721e通用处理器板
该板使用pcm3168a编解码器,通过McASP10连接[AXR0-3用于播放,AXR4-6用于捕获]。编解码器从j721e的AUDIO_EXT_REFCLK2引脚输出接收其SCKI时钟。
对于48KHz采样率系列,PLL4配置为1179648000 Hz。
对于44.1KHz采样率系列,PLL15配置为1083801600 Hz。
该板有七个立体声插孔,包括四个用于播放的插孔和三个用于捕获的插孔。
到插孔的音频通道映射取决于音频流中通道(插槽)的数量:

       |o|c1  |o|p1  |o|p3
 _     | |    | |    | |
|o|c3  |o|c2  |o|p4  |o|p2
--------------------------
  • 1
  • 2
  • 3
  • 4

c1/2/3-捕获插孔(第3个是线路输入)
p1/2/3/4-回放插孔(第4个是线路输出)
双声道音频(立体声):

0(左):p1/c1左

1(右):p1/c1右

4声道音频:

0:p1/c1左
1: p2/c2左
2: p1/c1右
3: p2/c2右

6声道音频:

0:p1/c1左
1: p2/c2左
2: p3/c3左
3: p1/c1右
4: p2/c2右
5: p3/c3右

8声道音频:

0:p1/c1左
1: p2/c2左
2: p3/c3左
3: p4左
4: p1/c1右
5: p2/c2右
6: p3/c3右
7: p4右
例如,如果以8通道模式打开播放,并且想在line output (p4)上播放立体声音频,那么8通道流的左通道应该放在时间槽3,而8通道流的右通道应该放在时间槽7
内核配置

Device Drivers  --->
  Sound card support  --->
    Advanced Linux Sound Architecture  --->
      ALSA for SoC audio support  --->
        Audio support for Texas Instruments SoCs  --->
          <*> SoC Audio support for j721e EVM
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

用户空间
注意:引导后播放音量高。请不要使用耳机,除非放下耳机!!!

amixer -c j721ecpbanalog sset 'codec1 DAC1' 141  # Playback volume for p1 jack
amixer -c j721ecpbanalog sset 'codec1 DAC2' 141  # Playback volume for p2 jack
amixer -c j721ecpbanalog sset 'codec1 DAC3' 141  # Playback volume for p3 jack
amixer -c j721ecpbanalog sset 'codec1 DAC4' 141  # Playback volume for p4 jack
  • 1
  • 2
  • 3
  • 4

默认情况下禁用主音量控制。可通过以下方式启用:

amixer -c j721ecpbanalog sset 'codec1 DAC Volume Control Type' 'Master + Individual'
  • 1

然后,主增益控制可应用于所有输出:

amixer -c j721ecpbanalog sset 'codec1 Master' 141  # Master Playback volume for p1/2/3/4 jack
  • 1

3.2.2.2.4. 潜在问题
如果是XRUN(低于或超过)
当应用程序没有及时将新样本提供给alsa-lib(由于CPU的使用)时,就会发生欠载。当应用程序没有及时从alsa-lib获取新捕获的样本时,可能会发生溢出。
XRUN发生的原因可能有很多,但它通常指向与CPU利用率或存储设备引起的延迟相关的系统延迟问题。
尝试事项:
•增加缓冲区大小(ALSA缓冲区和周期大小)
•尝试缓存要在内存中播放的文件
•尝试使用使用线程与ALSA和文件系统交互的应用程序
ALSA周期大小必须与FIFO深度(tx/rx numevt)一致
不再相关,因为内核端处理AFIFO深度与周期大小的问题。
为减少音频对系统造成的压力,启用AFIFO,并将McASP的深度设置为32。
如果ALSA周期大小与此FIFO设置不一致,则可以在输出上听到恒定的“trrrrr”。这是由于eDMA无法处理与突发大小(AFIFO深度)不一致的片段大小造成的。
应用程序需要确保period_size / FIFO深度是偶数。
3.2.2.2.5. 附加信息
ALSA链接
1.ALSA SoC项目主页
2.ALSA项目主页
3.ALSA用户空间库
4.使用ALSA音频API作者:Paul Davis
软件帮助
1.音频调试工具和技术
音频硬件编解码器
1.PCM3168A-24位,96kHz/192kHz,带差分输入/输出的6进8出音频编解码器
3.2.2.3. 加密
介绍
Crypto-API驱动程序是一组Linux驱动程序,提供对AM335x/AM437x/AM57x/DRA7/AM65/J721E设备上可用的硬件加密加速器的访问。在当前的SDK版本中,内核内置了这些驱动程序。
以下是以下设备支持的硬件加速器:

* AM335X       : MD5, SHA1, SHA224, SHA256, AES, DES
* AM437X       : MD5, SHA1, SAH224, SHA256, SHA384, SHA512, AES, DES, DES3DES
* AM57x/DRA7   : AES, DES, DES3DES
* AM65x/J721e  : AES, DES3DES, SHA1, SHA256, SHA512
  • 1
  • 2
  • 3
  • 4

构建驱动程序
对于具有可用的加密硬件加速器的设备,需要一个Linux驱动程序和另外一个Cryptodev(或OCF on AMSDK v6.0或更早的版本上)内核模块(用于OpenSSL)来访问它们。其他设备使用OpenSSL的纯软件实现进行加密演示。
J721E细节
J721E SoCs支持用于加密操作的硬件加速器(安全加速器Ultra Light)。
为IPSec用例添加了当前的软件支持。一旦在主机和目标上启用了基本的strongswan和IPSec基础设施,就可以开始使用IPSec了。
不支持用于OpenSSL的Cryptodev内核模块。完成了基本的Crypto manager测试、Linux tcrypt testing & IPSec测试。SHA1/256/512的硬件不支持碎片测试用例,驱动程序采用软件实现。

Symbol: CRYPTO_DEV_SA2UL [=m]
  ¦ Type  : tristate
  ¦ Prompt: Support for TI security accelerator
  ¦   Location:
  ¦     -> Cryptographic API (CRYPTO [=y])
  ¦ (1)   -> Hardware crypto devices (CRYPTO_HW [=y])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

J721E 构建
在Linux命令提示符下执行如下命令,检查sa2ul模块是否安装正确。

lsmod | grep sa2ul
Output shows something similar to below:
sa2ul                 262144  1 omap_rng
authenc               262144  1 sa2ul
J721E testing
tcrypt Testing:
insmod /tcrypt.ko mode=500 sec=1 &
[1] 868
[ 3006.234145] tcrypt:
[ 3006.234145] testing speed of async ecb(aes) (ecb-aes-sa2ul) encryption
root@am65xx-evm:~# [ 3006.242891] tcrypt: test 0 (128 bit key, 16 byte blocks): 87335 operations in 1 seconds (1397360 bytes)
[ 3007.251651] tcrypt: test 1 (128 bit key, 64 byte blocks): 87669 operations in 1 seconds (5610816 bytes)
[ 3008.259651] tcrypt: test 2 (128 bit key, 256 byte blocks): 87481 operations in 1 seconds (22395136 bytes)
[ 3009.267828] tcrypt: test 3 (128 bit key, 1024 byte blocks): 58076 operations in 1 seconds (59469824 bytes)
[ 3010.275914] tcrypt: test 4 (128 bit key, 8192 byte blocks): 22556 operations in 1 seconds (184778752 bytes)
[ 3011.284006] tcrypt: test 5 (192 bit key, 16 byte blocks): 80305 operations in 1 seconds (1284880 bytes)
[ 3012.291648] tcrypt: test 6 (192 bit key, 64 byte blocks): 84537 operations in 1 seconds (5410368 bytes)
[ 3013.299648] tcrypt: test 7 (192 bit key, 256 byte blocks): 90540 operations in 1 seconds (23178240 bytes)
[ 3014.307834] tcrypt: test 8 (192 bit key, 1024 byte blocks): 56054 operations in 1 seconds (57399296 bytes)
[ 3015.315915] tcrypt: test 9 (192 bit key, 8192 byte blocks): 20701 operations in 1 seconds (169582592 bytes)
[ 3016.324006] tcrypt: test 10 (256 bit key, 16 byte blocks): 81816 operations in 1 seconds (1309056 bytes)
[ 3017.331736] tcrypt: test 11 (256 bit key, 64 byte blocks): 82418 operations in 1 seconds (5274752 bytes)
[ 3018.339739] tcrypt: test 12 (256 bit key, 256 byte blocks): 87217 operations in 1 seconds (22327552 bytes)
[ 3019.347917] tcrypt: test 13 (256 bit key, 1024 byte blocks): 56534 operations in 1 seconds (57890816 bytes)
[ 3020.356012] tcrypt: test 14 (256 bit key, 8192 byte blocks): 20428 operations in 1 seconds (167346176 bytes)
[ 3021.364131] tcrypt:
[ 3021.364131] testing speed of async ecb(aes) (ecb-aes-sa2ul) decryption
[ 3021.373505] tcrypt: test 0 (128 bit key, 16 byte blocks): 81655 operations in 1 seconds (1306480 bytes)
[ 3022.379660] tcrypt: test 1 (128 bit key, 64 byte blocks): 87373 operations in 1 seconds (5591872 bytes)
[ 3023.387659] tcrypt: test 2 (128 bit key, 256 byte blocks): 81323 operations in 1 seconds (20818688 bytes)
[ 3024.395825] tcrypt: test 3 (128 bit key, 1024 byte blocks): 58990 operations in 1 seconds (60405760 bytes)
[ 3025.403928] tcrypt: test 4 (128 bit key, 8192 byte blocks): 22613 operations in 1 seconds (185245696 bytes)
[ 3026.411996] tcrypt: test 5 (192 bit key, 16 byte blocks): 79558 operations in 1 seconds (1272928 bytes)
[ 3027.419648] tcrypt: test 6 (192 bit key, 64 byte blocks): 86877 operations in 1 seconds (5560128 bytes)
[ 3028.427648] tcrypt: test 7 (192 bit key, 256 byte blocks): 80615 operations in 1 seconds (20637440 bytes)
[ 3029.435831] tcrypt: test 8 (192 bit key, 1024 byte blocks): 62007 operations in 1 seconds (63495168 bytes)
[ 3030.443907] tcrypt: test 9 (192 bit key, 8192 byte blocks): 21569 operations in 1 seconds (176693248 bytes)
[ 3031.452015] tcrypt: test 10 (256 bit key, 16 byte blocks): 86171 operations in 1 seconds (1378736 bytes)
[ 3032.459743] tcrypt: test 11 (256 bit key, 64 byte blocks): 79752 operations in 1 seconds (5104128 bytes)
[ 3033.467770] tcrypt: test 12 (256 bit key, 256 byte blocks): 84351 operations in 1 seconds (21593856 bytes)
[ 3034.475919] tcrypt: test 13 (256 bit key, 1024 byte blocks): 57082 operations in 1 seconds (58451968 bytes)
[ 3035.483995] tcrypt: test 14 (256 bit key, 8192 byte blocks): 20489 operations in 1 seconds (167845888 bytes)
[ 3036.492101] tcrypt:
IPSec Testing:
Server side
-----------------------------------------------------------
Accepted connection from 172.24.190.187, port 41266
[  5] local 172.24.191.45 port 5201 connected to 172.24.190.187 port 58177
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagrams
[  5]   0.00-1.00   sec  45.6 MBytes   382 Mbits/sec  0.021 ms  0/33017 (0%)
[  5]   1.00-2.00   sec  47.7 MBytes   400 Mbits/sec  0.014 ms  0/34534 (0%)
[  5]   2.00-3.00   sec  47.7 MBytes   400 Mbits/sec  0.013 ms  0/34527 (0%)
[  5]   3.00-4.00   sec  47.7 MBytes   400 Mbits/sec  0.037 ms  0/34507 (0%)
[  5]   4.00-5.00   sec  47.7 MBytes   400 Mbits/sec  0.021 ms  0/34540 (0%)
[  5]   5.00-6.00   sec  47.7 MBytes   400 Mbits/sec  0.020 ms  0/34537 (0%)
[  5]   6.00-7.00   sec  47.7 MBytes   400 Mbits/sec  0.013 ms  0/34511 (0%)
[  5]   7.00-8.00   sec  47.7 MBytes   400 Mbits/sec  0.017 ms  0/34543 (0%)
[  5]   8.00-9.00   sec  47.7 MBytes   400 Mbits/sec  0.012 ms  0/34518 (0%)
[  5]   9.00-10.00  sec  47.7 MBytes   400 Mbits/sec  0.022 ms  0/34532 (0%)
[  5]  10.00-10.04  sec  2.10 MBytes   403 Mbits/sec  0.014 ms  0/1518 (0%)

Client side - udp
iperf3 -c 172.24.191.45 -u -b 400.0M -t 10 &
[1] 975
Connecting to host 172.24.191.45, port 5201
root@am65xx-evm:~# [  5] local 172.24.190.187 port 58177 connected to 172.24.191.45 port 5201
[ ID] Interval           Transfer     Bitrate         Total Datagrams
[  5]   0.00-1.00   sec  47.7 MBytes   400 Mbits/sec  34510
[  5]   1.00-2.00   sec  47.7 MBytes   400 Mbits/sec  34531
[  5]   2.00-3.00   sec  47.7 MBytes   400 Mbits/sec  34530
[  5]   3.00-4.00   sec  47.7 MBytes   400 Mbits/sec  34531
[  5]   4.00-5.00   sec  47.7 MBytes   400 Mbits/sec  34530
[  5]   5.00-6.00   sec  47.7 MBytes   400 Mbits/sec  34530
[  5]   6.00-7.00   sec  47.7 MBytes   400 Mbits/sec  34531
[  5]   7.00-8.00   sec  47.7 MBytes   400 Mbits/sec  34530
[  5]   8.00-9.00   sec  47.7 MBytes   400 Mbits/sec  34530
[  5]   9.00-10.00  sec  47.7 MBytes   400 Mbits/sec  34531
  • 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

使用加密硬件加速器
使用TRNG硬件加速器
SDK附带的预构建内核已经在内核中内置了TRNG驱动程序。无需进一步配置。
配置详情如下所示,以供参考。
在configuration(配置)菜单中,向下滚动至Device Drivers(设备驱动程序),然后按enter键。现在滚动到Character devices并按回车键。

Device Drivers --->
   Character devices --->
       < > Hardware Random Number Generator Core support
           < > OMAP Random Number Generator support
[    1.660514] omap_rng 48310000.rng: OMAP Random Number Generator ver. 20
  • 1
  • 2
  • 3
  • 4
  • 5

一旦系统启动,hwrng设备现在应该显示在文件系统中.

root@am335x-evm:~# ls -l /dev/hwrng
crw------- 1 root root 10, 183 Jan 1 2000 /dev/hwrng
root@am335x-evm:~#
  • 1
  • 2
  • 3

在此设备上使用cat生成随机数.

root@am335x-evm:~# cat /dev/hwrng | od -x
0000000 b2bd ae08 4477 be48 4836 bf64 5d92 01c9
0000020 0cb6 7ac5 16f9 8616 a483 7dfd 6bf4 3aa5
0000040 d693 db24 d917 5ee7 feb7 34c3 34e9 e7a5
0000060 36b7 ea85 fc17 0e66 555c 0934 7a0c 4c69
0000100 523b 9f21 1546 fddb d58b e5ed 142a 6712
0000120 8d76 8f80 a6d2 30d8 d107 32bc 7f45 f997
0000140 9d5d 0d0c f1f0 64f9 a77f 408f b0c1 f5a0
0000160 39c6 f0ae 4b59 1a76 84a7 a364 8964 f557
root@am335x-evm:~#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

硬件随机数生成器的支持工具可以从Sourceforge上的rng-tools加载。撰写本报告时的最新版本为3.0版,日期为2010年7月4日。
1.我们仍然在Linux-devkit环境中。下载文件rng-tools-3.tar.gz,并在适当的地点解压。
2.更改到包含rng-tools分发的目录,然后配置包:

host $ ./configure --prefix=/home/user/targetfs/TI814x-targetfs_5_03_01/usr \
 --exec-prefix=/home/user/targetfs/TI814x-targetfs_5_03_01/usr \
 --host --target=arm-linux
  • 1
  • 2
  • 3
  1. 接下来生成rngd和rngtest可执行文件.
host $ make
  • 1
  1. 在目标文件系统中安装生成的可执行文件。
  2. 在目标上测试随机数生成器.
root@am335x-evm:~# cat /dev/hwrng | rngtest -c 1000
rngtest 3
Copyright (c) 2004 by Henrique de Moraes Holschuh
This is free software; see the source for copying conditions.  There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

rngtest: starting FIPS tests...
rngtest: bits received from input: 20000032
rngtest: FIPS 140-2 successes: 999
rngtest: FIPS 140-2 failures: 1
rngtest: FIPS 140-2(2001-10-10) Monobit: 0
rngtest: FIPS 140-2(2001-10-10) Poker: 0
rngtest: FIPS 140-2(2001-10-10) Runs: 1
rngtest: FIPS 140-2(2001-10-10) Long run: 0
rngtest: FIPS 140-2(2001-10-10) Continuous run: 0
rngtest: input channel speed: (min=788.218; avg=4070.983; max=2790178.571)Kibits/s
rngtest: FIPS tests speed: (min=846.755; avg=15388.376; max=21920.595)Kibits/s
rngtest: Program run time: 6072670 microseconds
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

注意,在您的系统上,结果可能略有不同,因为,毕竟,我们处理的是一个随机数生成器。任何明显数量的错误通常都表明是一个坏的随机数生成器。
如果您认为随机数生成器工作正常,那么可以使用rngd(随机数生成器守护进程)来提供/dev/random熵池。
使用Cryptodev的AES、DES、SHA硬件加速器
默认情况下,AES、DES和SHA/MD5硬件加速的设备驱动程序被配置并内置到内核中。OpenSSL访问加密模块不需要其他特殊设置。
首先,必须根据SDK用户指南配置和构建SDK中的内核.
TI SOC上的通用(GP)EVMs允许访问内置加密加速器。为了从OpenSSL使用这些驱动程序,驱动程序本身与用户空间没有联系。为此,我们提供了一个特殊的驱动程序,它通过Cryprodev模块抽象访问这些加速器。
Matrix的crypto菜单下的演示应用程序将自动加载并使用Cryptodev驱动程序内核模块执行硬件加速加密功能。下面将解释手动加载内核模块和使用驱动程序的过程。
Cryptodev本身就是一个特殊的设备驱动程序,它为更高级别的应用程序(如OpenSSL)提供了一个通用接口来访问硬件加速器。
SDK附带的文件系统由Cryptodev内核模块构建,直接访问硬件加速器的TI驱动程序被构建到内核中。
从目标板的角度来看,驱动程序位于以下目录中:

/lib/modules/`uname -r`/extra/cryptodev.ko
  • 1

要使用这些驱动程序,必须首先安装它们。使用modprobe命令安装驱动程序。安装模块和查询系统所有模块状态的命令如下所示.

root@am335x-evm:~# lsmod
Module                  Size  Used by
cryptodev              11962  0
root@am335x-evm:~#
  • 1
  • 2
  • 3
  • 4

安装模块后,可以通过Cryptodev驱动程序执行OpenSSL命令,这些命令利用了硬件加速器。下面的示例演示了OpenSSL内置的速度测试,以演示性能。添加参数-engine cryptodev告诉OpenSSL如果存在cryptodev驱动程序,就使用它。

root@am335x-evm:~# openssl speed -evp aes-128-cbc -engine cryptodev
engine "cryptodev" set.
Doing aes-128-cbc for 3s on 16 size blocks: 108107 aes-128-cbc's in 0.16s
Doing aes-128-cbc for 3s on 64 size blocks: 103730 aes-128-cbc's in 0.20s
Doing aes-128-cbc for 3s on 256 size blocks: 15181 aes-128-cbc's in 0.03s
Doing aes-128-cbc for 3s on 1024 size blocks: 15879 aes-128-cbc's in 0.03s
Doing aes-128-cbc for 3s on 8192 size blocks: 4879 aes-128-cbc's in 0.02s
OpenSSL 1.0.0b 16 Nov 2010
built on: Thu Jan 20 10:23:44 CST 2011
options:bn(64,32) rc4(ptr,int) des(idx,risc1,2,long) aes(partial) idea(int) blowfish(idx)
compiler: arm-none-linux-gnueabi-gcc -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp -mthumb-interwork -mno-thumb -fPS
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
aes-128-cbc 10810.70k 33193.60k 129544.53k 542003.20k 1998438.40k
root@am335x-evm:~#
root@am335x-evm:~#
root@am335x-evm:~#
使用Linux time -v函数可以在测试期间提供更多关于CPU使用情况的信息.
root@am335x-evm:~# time -v openssl speed -evp aes-128-cbc -engine cryptodev
engine "cryptodev" set.
Doing aes-128-cbc for 3s on 16 size blocks: 108799 aes-128-cbc's in 0.17s
Doing aes-128-cbc for 3s on 64 size blocks: 102699 aes-128-cbc's in 0.18s
Doing aes-128-cbc for 3s on 256 size blocks: 16166 aes-128-cbc's in 0.03s
Doing aes-128-cbc for 3s on 1024 size blocks: 15080 aes-128-cbc's in 0.03s
Doing aes-128-cbc for 3s on 8192 size blocks: 4838 aes-128-cbc's in 0.03s
OpenSSL 1.0.0b 16 Nov 2010
built on: Thu Jan 20 10:23:44 CST 2011
options:bn(64,32) rc4(ptr,int) des(idx,risc1,2,long) aes(partial) idea(int) blowfish(idx)
compiler: arm-none-linux-gnueabi-gcc -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp -mthumb-interwork -mno-thumb -fPS
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
aes-128-cbc 10239.91k 36515.20k 137949.87k 514730.67k 1321096.53k
Command being timed: "openssl speed -evp aes-128-cbc -engine cryptodev"
User time (seconds): 0.46
System time (seconds): 5.89
Percent of CPU this job got: 42%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0m 15.06s
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 7104
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 479
Voluntary context switches: 36143
Involuntary context switches: 211570
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
  • 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
Exit status: 0
  • 1

当移除cryptodev驱动程序时,OpenSSL将恢复到加密算法的软件实现。仅使用软件实现的性能可以与之前的测试进行比较.

root@am335x-evm:~# modprobe -r cryptodev
root@am335x-evm:~# time -v openssl speed -evp aes-128-cbc
Doing aes-128-cbc for 3s on 16 size blocks: 697674 aes-128-cbc's in 2.99s
Doing aes-128-cbc for 3s on 64 size blocks: 187556 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 256 size blocks: 47922 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 1024 size blocks: 12049 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 8192 size blocks: 1509 aes-128-cbc's in 3.00s
OpenSSL 1.0.0b 16 Nov 2010
built on: Thu Jan 20 10:23:44 CST 2011
options:bn(64,32) rc4(ptr,int) des(idx,risc1,2,long) aes(partial) idea(int) blowfish(idx)
compiler: arm-none-linux-gnueabi-gcc -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp -mthumb-interwork -mno-thumb -fPS
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
aes-128-cbc 3733.37k 4001.19k 4089.34k 4112.73k 4120.58k
Command being timed: "openssl speed -evp aes-128-cbc"
User time (seconds): 15.03
System time (seconds): 0.00
Percent of CPU this job got: 99%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0m 15.07s
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 7216
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 1
Minor (reclaiming a frame) page faults: 484
Voluntary context switches: 13
Involuntary context switches: 35
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
  • 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
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/805251
推荐阅读
相关标签
  

闽ICP备14008679号