Как автоматически -перекомпилировать ядро ​​Linux в соответствии с моими аппаратными -потребностями?

В оболочке sh, которая не поддерживает массивы и ключевое слово local, вы по-прежнему можете использовать $@в качестве массива в функции. Вы можете выбрать два первых аргумента с помощью shift 2, а затем использовать $@, которые теперь содержат все остальные аргументы.

foo () {
    arg1=$1
    arg2=$2

    shift 2  # shift $3 into $1, $4 into $2 etc.

    for n in "$@"; do    # or just: for n do
        printf 'Other argument: %s\n' "$n"
        # other code acting on "$n"
    done
}

foo "arg1" "arg2" "arg3" "arg4"

Заключите тело функции в (... )вместо {... }, чтобы сделать все переменные локальными, если функции не нужно изменять глобальные переменные и вы не хотите загрязнять пространство имен переменных ненужными переменными.


Использование ваших исходных данных с foo, объявленным, как указано выше:

set -- "component1" \
       "component21 component22 component23" \
       "component3" \
       "component41 component42 component43"

foo "$param1" "$param2" "$@"

В оболочке, которая поддерживает массивы и local, вы должны сделать то же самое (, но функция может захотеть использовать переменные, объявленные как local), и вызов может быть

foo "arg1" "arg2" "${myarray[@]}"

Чтобы передать несколько массивов в bash,Я бы использовал ссылку на имя в функции (требуется bashверсия 4.3 или более поздняя):

foo () {
   local arg1=$1
   local arg2=$2
   local -n arr1=$3
   local -n arr2=$4

   for n in "${arr2[@]}"; do...; done
}

foo "arg1" "arg2" myarray1 myarray2

Обратите внимание, что вы не можете передать в функцию переменную-массив, имя которой совпадает с именем соответствующей переменной-ссылки в функции. (Я считаю это ошибкой, это работает вksh93).

0
20.09.2020, 06:29
1 ответ

Части ядра, которые не применимы к вашей аппаратной конфигурации и потребностям программного обеспечения, обычно отключены, т. е. они не потребляют ресурсы ОЗУ или ЦП, за исключением MAC (SeLinux/AppArmor/etc ), который, если он включен, его необходимо отключить вручную, чтобы освободить ресурсы обработки.

Маловероятно, что вы сможете значительно ускорить работу вашего ПК, скомпилировав его в соответствии с вашими потребностями в аппаратной/программной конфигурации. Кроме того, это довольно сложная задача, если вы никогда не делали этого раньше, потому что мы говорим о сотнях терминов, о которых вы, скорее всего, никогда не слышали.

Насколько я слышал, не существует утилит, которые включают параметры ядра, соответствующие вашему оборудованию.

Хорошее руководство по компиляции ядра находится здесь:http://swift.siphos.be/linux_sea/kernelbuilding.html

Если вам интересно, я могу загрузить свою собственную конфигурацию ядра -она максимально упрощена, но применима только к моему оборудованию. Базировать его будет проще, чем прорабатывать его с нуля.

И даже если вам удастся успешно скомпилировать ядро, вам нужно будет создать initrd, потому что большинство дистрибутивов полагаются на него. Конфигурация моего ядра ()не работает, потому что у меня есть статические записи /devдля его загрузки.

1
18.03.2021, 23:03

Теги

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