Автор Тема: Приёмы профессиональной работы в shell (справочник - вопросы не задавать. )  (Прочитано 116601 раз)

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 8 882
  • UNIX System V init
Подробности о модулях памяти

На текущий момент, использование sensors-detect, это наиболее простой путь для получения характеристик модулей памяти.

Смотрим секцию SMBus адаптера:
# sensors-detect
<skip>
Next adapter: SMBus I801 adapter at 4040 (i2c-6)
Do you want to scan it? (YES/no/selectively):
Client found at address 0x18
Probing for `Analog Devices ADM1021'...                     No
Probing for `Analog Devices ADM1021A/ADM1023'...            No
Probing for `Maxim MAX1617'...                              No
Probing for `Maxim MAX1617A'...                             No
Probing for `Maxim MAX1668'...                              No
Probing for `Maxim MAX1805'...                              No
Probing for `Maxim MAX1989'...                              No
Probing for `Maxim MAX6655/MAX6656'...                      No
Probing for `TI THMC10'...                                  No
Probing for `National Semiconductor LM84'...                No
Probing for `Genesys Logic GL523SM'...                      No
Probing for `Onsemi MC1066'...                              No
Probing for `Maxim MAX1618'...                              No
Probing for `Maxim MAX1619'...                              No
Probing for `National Semiconductor LM82/LM83'...           No
Probing for `Maxim MAX6654'...                              No
Probing for `Maxim MAX6690'...                              No
Probing for `Maxim MAX6680/MAX6681'...                      No
Probing for `Maxim MAX6695/MAX6696'...                      No
Probing for `Texas Instruments TMP400'...                   No
Probing for `Texas Instruments AMC6821'...                  No
Probing for `National Semiconductor LM95233'...             No
Probing for `National Semiconductor LM95234'...             No
Probing for `National Semiconductor LM95235'...             No
Probing for `National Semiconductor LM95245'...             No
Probing for `National Semiconductor LM64'...                No
Probing for `SMSC EMC1047'...                               No
Probing for `SMSC EMC1402'...                               No
Probing for `SMSC EMC1403'...                               No
Probing for `SMSC EMC1404'...                               No
Probing for `ST STTS424'...                                 No
Probing for `ST STTS424E'...                                No
Probing for `ST STTS2002'...                                No
Probing for `ST STTS3000'...                                No
Probing for `NXP SE97/SE97B'...                             Success!
    (confidence 5, driver `jc42')
Probing for `NXP SE98'...                                   No
Probing for `Analog Devices ADT7408'...                     No
Probing for `IDT TS3000/TSE2002'...                         No
Probing for `IDT TSE2004'...                                No
Probing for `IDT TS3001'...                                 No
Probing for `Maxim MAX6604'...                              No
Probing for `Microchip MCP9804'...                          No
Probing for `Microchip MCP9808'...                          No
Probing for `Microchip MCP98242'...                         No
Probing for `Microchip MCP98243'...                         No
Probing for `Microchip MCP98244'...                         No
Probing for `Microchip MCP9843'...                          No
Probing for `ON CAT6095/CAT34TS02'...                       No
Probing for `ON CAT34TS02C'...                              No
Probing for `ON CAT34TS04'...                               No
Probing for `Atmel AT30TS00'...                             No
Probing for `Giantec GT30TS00'...                           No
Client found at address 0x50
Probing for `Analog Devices ADM1033'...                     No
Probing for `Analog Devices ADM1034'...                     No
Probing for `SPD EEPROM'...                                 Yes
    (confidence 8, not a hardware monitoring chip)
Probing for `EDID EEPROM'...                                No
Client found at address 0x52
Probing for `Analog Devices ADM1033'...                     No
Probing for `Analog Devices ADM1034'...                     No
Probing for `SPD EEPROM'...                                 Yes
    (confidence 8, not a hardware monitoring chip)


Now follows a summary of the probes I have just done.
Just press ENTER to continue:

Driver `jc42':
  * Bus `SMBus I801 adapter at 4040'
    Busdriver `i2c_i801', I2C address 0x18
    Chip `NXP SE97/SE97B' (confidence: 5)
<skip>

Попунктно:

Next adapter: SMBus I801 adapter at 4040 (i2c-6)

Каждый адаптер нуждается в драйвере. И для текущей архитектуры компьютера, это адаптер SMBus I801.
Чуть ниже, подробности для драйвера jc42 уточняют, что для этого адаптера, это драйвер шины i2c_i801:
    Busdriver `i2c_i801', I2C address 0x18

Сам драйвер i2c_i801 требует драйвер i2c_core
# modinfo $(find /lib/modules/$(uname -r) -type f -name "*i801*.ko") | grep '^name\|^description\|^depends'
description:    I801 SMBus driver
depends:        i2c-core
name:           i2c_i801

Но в системе драйвер i2c_core уже используется и загружен
# lsmod | grep ^i2c_core
i2c_core               77824  11 videodev,drm_kms_helper,i2c_algo_bit,at24,eeprom,i2c_i801,i915,psmouse,regmap_i2c,i2c_dev,drm


Probing for `SPD EEPROM'...                                 Yes

SPD EEPROM - микросхема в модулях памяти. Непосредственно коммуникации микросхемы SPD EEPROM (электрически перепрограммируемое ПЗУ, содержащее специфические данные) на модуле памяти и управляющего контроллера осуществляются при помощи шины SMBus

Yes сообщает что опробирование SPD EEPROM пройдено.
Это должно быть поддержано драйвером:
# modinfo $(find /lib/modules/$(uname -r) -type f -name "eeprom.ko") | grep '^name\|^description\|^depends'
description:    I2C EEPROM driver
depends:        i2c-core
name:           eeprom


Подводим итоги требуемых драйверов:
i2c_core i2c_i801 eeprom

из которых требуемые к загрузке:
# modprobe -a i2c_i801 eeprom
# lsmod | grep '^i2c_core\|^i2c_i801\|^eeprom'
eeprom                 16384  0
i2c_i801               32768  0
i2c_core               77824  9 videodev,drm_kms_helper,i2c_algo_bit,eeprom,i2c_i801,i915,psmouse,regmap_i2c,drm


Альтовый пакет i2c-tools не содержит скрипта decode-dimms
# rpm -qvl i2c-tools | grep sbin/
-rwxr-xr-x    1 root    root                    22816 апр 14  2019 /usr/sbin/i2cdetect
-rwxr-xr-x    1 root    root                    18768 апр 14  2019 /usr/sbin/i2cdump
-rwxr-xr-x    1 root    root                    18728 апр 14  2019 /usr/sbin/i2cget
-rwxr-xr-x    1 root    root                    22864 апр 14  2019 /usr/sbin/i2cset
-rwxr-xr-x    1 root    root                    18696 апр 14  2019 /usr/sbin/i2ctransfer

Взять можно например здесь в виде raw файла выставив на скрипте бит exec (право на запуск)
https://github.com/angeloc/i2c-tools/blob/master/eeprom/decode-dimms

После чего можно получить массу подробностей о модулях памяти:
# decode-dimms | grep ^--- | head -n 7
---=== SPD EEPROM Information ===---
---=== Memory Characteristics ===---
---=== Timings at Standard Speeds ===---
---=== Timing Parameters ===---
---=== Optional Features ===---
---=== Physical Characteristics ===---
---=== Manufacturer Data ===---

Полезные ссылки:
https://github.com/torvalds/linux/blob/master/drivers/misc/eeprom/eeprom.c#L122
https://github.com/torvalds/linux/blob/master/drivers/misc/eeprom/at24.c#L42
Микросхемы памяти фирмы Atmel
Microchip: Последовательная память с интерфейсом I2C (даташиты)
ZX Spectrum 128K
Привет от NM:  # echo -e "\n[device]\nwifi.scan-rand-mac-address=no" >> /etc/NetworkManager/NetworkManager.conf

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 8 882
  • UNIX System V init
Перекодирование аудиофайла из wma в mp3 в системе на p9/branch

Установка пакета для перекодирования
$ su --login root
# apt-get update
# apt-get install ffmpeg

Исходный аудиофайл
$ mediainfo 7-1.wma
General
Complete name                            : 7-1.wma
Format                                   : Windows Media
File size                                : 2.05 MiB
Duration                                 : 36 min 32 s
Overall bit rate mode                    : Constant
Overall bit rate                         : 7 846 b/s
Maximum Overall bit rate                 : 10.4 kb/s
Encoded date                             : UTC 2003-08-08 19:05:51.400

Audio
ID                                       : 1
Format                                   : ACELP
Format profile                           : .net
Codec ID                                 : 130
Codec ID/Hint                            : Sipro
Description of the codec                 : ACELP.net - 6.5 Kbits/s, 8000Hz, Mono
Duration                                 : 36 min 32 s
Bit rate mode                            : Constant
Bit rate                                 : 6 440 b/s
Channel(s)                               : 1 channel
Sampling rate                            : 8 000 Hz
Stream size                              : 1.68 MiB (82%)


Перекодирование аудиофайла из wma в mp3
$ ffmpeg -i 7-1.wma -c:a libmp3lame 7-1.mp3

Результирующий аудофайл, - то что получилось после перекодирования
$ file 7-1.mp3
7-1.mp3: Audio file with ID3 version 2.4.0 tag, MP3 encoding
$ mediainfo 7-1.mp3
General
Complete name                            : 7-1.mp3
Format                                   : MPEG Audio
File size                                : 2.09 MiB
Duration                                 : 36 min 33 s
Overall bit rate mode                    : Variable
Overall bit rate                         : 8 000 b/s
Writing library                          : Lavf58.29.100
WMFSDKNeeded                             : 0.0.0.0000
WMFSDKVersion                            : 8.20.00.5055
IsVBR                                    : 0

Audio
Format                                   : MPEG Audio
Format version                           : Version 2.5
Format profile                           : Layer 3
Duration                                 : 36 min 33 s
Bit rate mode                            : Variable
Bit rate                                 : 8 000 b/s
Channel(s)                               : 1 channel
Sampling rate                            : 8 000 Hz
Frame rate                               : 13.889 FPS (576 SPF)
Compression mode                         : Lossy
Stream size                              : 2.09 MiB (100%)

ZX Spectrum 128K
Привет от NM:  # echo -e "\n[device]\nwifi.scan-rand-mac-address=no" >> /etc/NetworkManager/NetworkManager.conf

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 8 882
  • UNIX System V init
Скрипт hex<->dec<->oct<->bin
Прекрасный скрипт для перевода чисел из одной системы счисления в другую

Advanced Bash-Scripting Guide
12.8. Команды выполнения математических операций

https://www.opennet.ru/docs/RUS/bash_scripting_guide/x9199.html

##########################################################################
# Shellscript:  base.sh - вывод чисел в разных системах счисления (Bourne Shell)
# Author     :  Heiner Steven (heiner.steven@odn.de)
# Date       :  07-03-95
# Category   :  Desktop
# $Id: base.sh,v 1.2 2000/02/06 19:55:35 heiner Exp $
##########################################################################
# Description
#
# Changes
# 21-03-95 stv  исправлена ошибка, возникающая при вводе числа 0xb (0.2)
##########################################################################

# ==> Используется в данном документе с разрешения автора.
# ==> Комментарии добавлены автором документа.

NOARGS=65
PN=`basename "$0"`                             # Имя программы
VER=`echo '$Revision: 1.2 $' | cut -d' ' -f2`  # ==> VER=1.2

Usage () {
    echo "$PN - вывод чисел в различных системах счисления, $VER (stv '95)
Порядок использования: $PN [number ...]

Если число не задано, то производится ввод со stdin.
Число может быть:
    двоичное            должно начинаться с комбинации символов 0b (например 0b1100)
    восьмеричное        должно начинаться с 0  (например 014)
    шестнадцатиричное   должно начинаться с комбинации символов 0x (например 0xc)
    десятичное          в любом другом случае (например 12)" >&2
    exit $NOARGS
}   # ==> Функция вывода сообщения о порядке использования.

Msg () {
    for i   # ==> [список] параметров опущен.
    do echo "$PN: $i" >&2
    done
}

Fatal () { Msg "$@"; exit 66; }

PrintBases () {
    # Определение системы счисления
    for i      # ==> [список] параметров опущен...
    do         # ==> поэтому работает с аргументами командной строки.
        case "$i" in
            0b*)                ibase=2;;       # двоичная
            0x*|[a-f]*|[A-F]*)  ibase=16;;      # шестнадцатиричная
            0*)                 ibase=8;;       # восьмеричная
            [1-9]*)             ibase=10;;      # десятичная
            *)
                Msg "Ошибка в числе $i - число проигнорировано"
                continue;;
        esac

        # Удалить префикс и преобразовать шестнадцатиричные цифры в верхний регистр (этого требует bc)
        number=`echo "$i" | sed -e 's:^0[bBxX]::' | tr '[a-f]' '[A-F]'`
        # ==> вместо "/", здесь используется символ ":" как разделитель для sed.

        # Преобразование в десятичную систему счисления
        dec=`echo "ibase=$ibase; $number" | bc`  # ==> 'bc' используется как калькулятор.
        case "$dec" in
            [0-9]*)     ;;       # все в порядке
            *)          continue;; # ошибка: игнорировать
        esac

        # Напечатать все преобразования в одну строку.
        # ==> 'вложенный документ' -- список команд для 'bc'.
        echo `bc <<!
            obase=16; "hex="; $dec
            obase=10; "dec="; $dec
            obase=8;  "oct="; $dec
            obase=2;  "bin="; $dec
!
    ` | sed -e 's: :    :g'

    done
}

while [ $# -gt 0 ]
do
    case "$1" in
        --)     shift; break;;
        -h)     Usage;;          # ==> Вывод справочного сообщения.
        -*)     Usage;;
        *)      break;;          # первое число
    esac   # ==> Хорошо бы расширить анализ вводимых символов.
    shift
done

if [ $# -gt 0 ]
then
    PrintBases "$@"
else                                    # чтение со stdin
    while read line
    do
        PrintBases $line
    done
fi
ZX Spectrum 128K
Привет от NM:  # echo -e "\n[device]\nwifi.scan-rand-mac-address=no" >> /etc/NetworkManager/NetworkManager.conf