Насколько плавно обновление ядра Linux в Debian 8.5?

В этом ответе на первый связанный вопрос есть почти отбрасывающая строка в конце:

См. также %g для округления до заданного числа значащих цифр.

Поэтому вы можете просто написать

printf "%.2g" "$n"

(но см. раздел ниже о десятичном разделителе и локали, и обратите внимание, что не-Bash printf не обязательно поддерживает %f и %g).

Примеры:

$ printf "%.2g\n" 76543 0.0076543
7.7e+04
0.0077

Конечно, теперь у вас есть представление мантисса-экспонента, а не чистая десятичная дробь, поэтому вы захотите преобразовать обратно:

$ printf "%0.f\n" 7.7e+06
7700000

$ printf "%0.7f\n" 7.7e-06
0.0000077

Собрав все это вместе и обернув в функцию:

# Function round(precision, number)
round() {
    n=$(printf "%.${1}g" "$2")
    if [ "$n" != "${n#*e}" ]
    then
        f="${n##*e-}"
        test "$n" = "$f" && f= || f=$(( ${f#0}+$1-1 ))
        printf "%0.${f}f" "$n"
    else
        printf "%s" "$n"
    fi
}

(Примечание - эта функция написана в переносимой (POSIX) оболочке, но предполагает, что printf обрабатывает преобразования с плавающей точкой. В Bash есть встроенный printf, который это делает, так что здесь все в порядке, и реализация GNU тоже работает, так что большинство GNU/Linux систем могут смело использовать Dash).

Тестовые случаи

radix=$(printf %.1f 0)
for i in $(seq 12 | sed -e 's/.*/dc -e "12k 1.234 10 & 6 -^*p"/e' -e "y/_._/$radix/")
do
    echo $i "->" $(round 2 $i)
done

Результаты тестирования

.000012340000 -> 0.000012
.000123400000 -> 0.00012
.001234000000 -> 0.0012
.012340000000 -> 0.012
.123400000000 -> 0.12
1.234 -> 1.2
12.340 -> 12
123.400 -> 120
1234.000 -> 1200
12340.000 -> 12000
123400.000 -> 120000
1234000.000 -> 1200000

Замечание о десятичном разделителе и локали

Вся работа выше предполагает, что символ радикса (также известный как десятичный разделитель) - это . , как в большинстве английских локалей. В других локалях используются , , и некоторые оболочки имеют встроенный printf, который учитывает локаль. В этих оболочках может потребоваться установить LC_NUMERIC=C, чтобы заставить использовать . в качестве символа радикса, или написать /usr/bin/printf, чтобы предотвратить использование встроенной версии. Последнее осложняется тем, что (по крайней мере, некоторые версии), похоже, всегда разбирают аргументы, используя . , но печатает, используя текущие настройки локали.

4
13.04.2017, 15:37
2 ответа

Самый простой способ установить новое ядро ​​- использовать резервные порты Jessie .

Сначала вам нужно добавить резервные копии Jessie в свои репозитории, если их там еще нет:

echo deb http://http.debian.net/debian jessie-backports main > /etc/apt/sources.list.d/jessie-backports.list

(как root), тогда

apt-get update
apt-get -t jessie-backports install linux-image-amd64

установит текущее ядро ​​по умолчанию backported (на данный момент 4.8 пишу).

Чтобы обеспечить соответствующую прошивку для Wi-Fi вашего ноутбука, вам необходимо добавить non-free и установить firmware-iwlwifi :

echo deb http://http.debian.net/debian jessie-backports main contrib non-free > /etc/apt/sources.list.d/jessie-backports.list
apt-get update
apt-get -t jessie-backports install firmware-iwlwifi

Чтобы решить проблемы с отображением, вы может удалить xserver-xorg-video-intel (в настоящее время графическим процессорам Intel не нужен отдельный драйвер, они могут использовать поддержку настройки режима ядра), как предлагается GAD3R :

apt-get remove xserver-xorg-video-intel

(Вам может потребоваться установить xserver-xorg-video-dummy для удовлетворения зависимостей других пакетов.)

Вам также следует установить микропрограмму Skylake, чтобы включить все функции графического процессора:

apt-get -t jessie-backports install firmware-misc-nonfree

Включение backports безопасно: новые пакеты не выбираются автоматически из backports, вам нужно явно выбрать их, используя -t jessie-backports , как указано выше (но как только вы это сделаете, будут выбраны обновления для обновленных пакетов вверх по apt-get upgrade ).

Версия ядра 4.6 уже обеспечивала хорошую поддержку Skylake, и с тех пор она улучшилась. Если вы обновляете, как указано выше, запуск apt-get upgrade автоматически обновит до более поздних версий ядра, как только они станут доступны в резервных портах.

8
27.01.2020, 20:47

Моя ОС - Debian Jessie с Mate рабочий стол

root@s32408:~# uname -a
Linux s32408 4.8.0-0.bpo.2-amd64 #1 SMP Debian 4.8.15-2~bpo8+2 (2017-01-17) x86_64 GNU/Linux

После обновления ядра до 4.8 с резервных портов для устранения проблемы с WIFI, Я столкнулся с ошибкой отображения при перезагрузке системы. Затем я удалил драйвер Intel, как указано выше, и он исправил ошибку.

Но при этом многие важные пакеты стали «больше не нужны».Я сначала не обратил внимания, а потом немного почистил:

apt-get autoremove

А после следующей перезагрузки я потерял графический рабочий стол и многие полезные приложения .


Затем я переустановил новую ОС и обнаружил, что установка обновленного драйвера Intel из резервных копий (вместо его удаления) также исправляет ошибку отображения, но не нарушает зависимости. Другими словами, я сделал:

apt-get -t jessie-backports install xserver-xorg-video-intel

вместо:

apt-get remove xserver-xorg-video-intel

Вы можете в любом случае удалить драйвер и изменить зависимости, чтобы преодолеть поломку, как это было предложено Стивеном Киттом в комментариях. Вам решать.

Обратите внимание, что рабочий стол XCFE также подвержен этой проблеме, а рабочий стол Gnome - нет.

Спасибо Лео Леопольду Герцу за подсказку о Гноме и Стивену Китту за его огромное терпение;)

1
27.01.2020, 20:47

Теги

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