Вы можете установить модули по альтернативному пути:
mkdir /tmp/pine64
make modules_install INSTALL_MOD_PATH=/tmp/pine64
Затем вы можете скопировать модули из /tmp/pine64
и образ ядра bzImage
на ваш Pine64.
Другой подход заключается в создании бинарного пакета:
make binrpm-pkg
или
make bindeb-pkg
в зависимости от вашего целевого дистрибутива. Это создаст пакет, содержащий ядро и модули.
Незнание точного размера записи (и разделителя )делает эту проблему неразрешимой с точки зрения простого и элегантного решения.
ОСНОВНОЕ ПРЕДУПРЕЖДЕНИЕ:Это может быть безнадежной ситуацией, потому что может вообще не быть разделителя (, если программа, записывающая в файл, знает размер записи, нет необходимости разделять записи разделителями )или весь файл может быть одной записью. Кроме того, в некоторых случаях перед символом, рассматриваемым как разделитель внутри записи (, может быть "управляющий символ", что маловероятно при фиксированном размере записи, но это ухудшит ситуацию при анализе ), но "это зависит". Кроме того, форматы двоичных файлов могут иметь блок «заголовка» перед началом фактической записи, и вам нужно знать его размер, чтобы это работало.
Однако надежды мало. Из-за уверенности в фиксированной длине записей, тогда-при условии отсутствия заголовка-размер файла (, полученный с помощью wc -c
), должен быть произведением размера записи и количества записей.
Можно попробовать метод грубой силы:
wc -c
(позволяет назвать егоfileSize
)fileSize
. Это не на 100% идеально, но должно немного помочь в дальнейшем исследовании записей и файлов.
Содержимое файла:
abcxdefxabnxccdxdfaxaafx
размер файла :24 байта
Коэффициенты:factors 24
:2 2 2 3
Возможные комбинации:
Для каждой из этих возможностей выше мы получили разделитель:
x
x
x
Можно предположить, что x
является разделителем, а минимально возможный размер записи составляет 4 символа, что соответствует ситуации.
Это только пример. Вы должны попробовать разные предположения, и если файл довольно большой, вы можете использовать другой подход, например, определение расстояния между двумя одинаковыми символами.
Попробуйте это:
script.sh
:
#!/bin/bash
# read filename to var f from $1
f="$1"
# quit if file not found.
[ -f "$f" ] || { >&2 echo "File not found." ; exit 2; }
# total length of file (-1 to not count newline at the end of a file)
n=$(($(wc -c < "$f")-1))
# loop potential length of records, end at half total length of file.
for i in $(seq 1 $(awk -v n=$n 'BEGIN{print int((n/2)+0.5)-1}')); do
# now read all delimiters regarding record length from a file
# (see https://unix.stackexchange.com/a/276957/236063)
# and `sort -u` to get only individual ones
c=$(for ((j=i;j<n;j=j+i+1)); do printf '%s\n' $(dd ibs=1 skip=$j count=1 < "$f" 2>/dev/null); done | sort -u)
# if we have exactly one individual delimiter, we're done and can print length of record and the delimiter and exit.
if [ $(echo "$c" | wc -l) -eq 1 ]; then
printf 'l=%s d=%s\n' "$i" "$c"
exit 0
fi
done
>&2 echo "No delimiter found".
exit 1
Содержаниеfile
:
abc,def,ghi
Выход:
$./script.sh file
l=3 d=,
Коды выхода:
0 success, found delimiter and record length
1 no delimiter found
10 file not found
Примечание :Я думаю, что есть еще кое-что, чтобы исправить некоторые проблемы, особенно в отношении символов новой строки...