Каковы два значения в угловых скобках <> в дереве устройств .dts файл?

Я предлагаю использовать другой метод тестирования. hdparm является немного странным, поскольку это дает адреса устройства, а не адреса файловой системы, и это не говорит, какого устройства те адреса касаются (например, это разрешает разделы, но не devicemapper цели, и т.д.). Намного легче использовать что-то, что придерживается адресов файловой системы, тот способ, которым это последовательно (возможно, за исключением нетрадиционных файловых систем как zfs/btrfs).

Создайте тестовый файл: (не случайный нарочно)

# yes | dd iflag=fullblock bs=1M count=1 of=trim.test 

Получите адрес, длину и blocksize: (точная команда зависит от filefrag версия)

# filefrag -s -v trim.test
File size of trim.test is 1048576 (256 blocks, blocksize 4096)
 ext logical physical expected length flags
   0       0    34048             256 eof
trim.test: 1 extent found

Получите устройство и точку монтирования:

# df trim.test
/dev/mapper/something  32896880 11722824  20838512   37% /mount/point

С настроенным, у Вас есть файл trim.test заполненный yes- шаблон на /dev/mapper/something в адресе 34048 с длиной 256 блоки 4096 байты.

Чтение, который от устройства непосредственно должен произвести yes- шаблон:

# dd bs=4096 skip=34048 count=256 if=/dev/mapper/something | hexdump -C
00000000  79 0a 79 0a 79 0a 79 0a  79 0a 79 0a 79 0a 79 0a  |y.y.y.y.y.y.y.y.|
*
00100000

Если ОБРЕЗКА включена, этот шаблон должен измениться при удалении файла. Обратите внимание, что кэши должны быть отброшены также, иначе dd не перечитает данные из диска.

# rm trim.test
# sync
# fstrim -v /mount/point/ # when not using 'discard' mount option
# echo 1 > /proc/sys/vm/drop_caches
# dd bs=4096 skip=34048 count=256 if=/dev/mapper/something | hexdump -C

На большей части SSD, который привел бы к нулевому шаблону:

00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00100000

Если шифрование будет включено, то Вы будете видеть случайный шаблон вместо этого:

00000000  1f c9 55 7d 07 15 00 d1  4a 1c 41 1a 43 84 15 c0  |..U}....J.A.C...|
00000010  24 35 37 fe 05 f7 43 93  1e f4 3c cc d8 83 44 ad  |$57...C...<...D.|
00000020  46 80 c2 26 13 06 dc 20  7e 22 e4 94 21 7c 8b 2c  |F..&... ~"..!|.,|

Поэтому физически обрезанный, crypto чтения слоя обнуляют и дешифруют, они обнуляют к "случайным" данным.

Если yes- шаблон сохраняется, скорее всего, никакая обрезка не была сделана.

4
07.06.2018, 16:29
3 ответа

Да, reg<0xxxx 0xxxxx> означает reg<длина смещения>.

смещение является базовым адресом устройства, а длина определит диапазон адресов данного устройства.

.
0
27.01.2020, 20:58

No tiene que ser solo dos números en general

Además, como se explica en :https://elinux.org/Device_Tree_Usage#How_Addressing_Works, no tiene que ser solo dos números cada uno.

Por ejemplo, en dispositivos de 64 bits, a menudo tenemos:

#address-cells = <2>;
#size-cells = <2>;

lo que implica que la dirección y el desplazamiento son del tipo:

reg = <0x1 0x2 0x3 0x4>

que representa una región con:

  • dirección base :00000001 00000002 (compuesta de 2 32 -números de bit debido a#address-cells = <2>;)
  • longitud :00000003 00000004 (compuesto de 2 32 -números de bit debido a#size-cells = <2>;)

Esto se debe a que cada número en el árbol de dispositivos tiene un ancho de 32 -bits por definición, por lo que necesitamos dos para cada valor de 64 bits.

1
27.01.2020, 20:58

Угловые скобки (<> )обозначают «32 -битный массив целых чисел без знака», и я полагаю, что их часто называют «ячейками». В случае со свойством regпервое значение — это (адрес смещения ), а второе — длина регистра (с ). Обратите внимание, что также возможно иметь несколько диапазонов, т.е.

reg = <addr1 addr1_length addr2 addr2_length ... addrN addrN_length>

Источники:

2
27.01.2020, 20:58

Теги

Похожие вопросы