Как начать работу над ядром Linux?

Первый вариант (не работает, см. второй вариант)

Кажется, что мы не можем использовать команду readдля такого рода задач, потому что readостанавливает whileвыполнение цикла.

Посмотрите на этот пример:(printf "1\n2\n3\n" ; sleep 5; printf "4\n") | while read -r line; do echo hello; done.

whileцикл с readвнутри будет выполнен так:

  • 1 итерация -чтение 1;
  • 2 итерация -чтение 2;
  • 3 итерация -чтение 3;
  • 4 итерации -ОЖИДАНИЕ 5 секунд, затем прочитать 4.

Мы не можем сделать запланированную работу внутри этого цикла, например, «делать это каждую 1 секунду» -, потому что она будет периодически останавливаться в ожидании ввода. Например, он может ждать 1 минуту или больше, и наша запланированная работа тоже будет остановлена.

function interval () {
    amount_of_seconds=$1
    print_time=0
    buffer=''
    while read -r line; do
        current_time=$(date +%s)

        if (( current_time > print_time )); then
            echo -e "${buffer}${line}"
            buffer=''
            print_time=$((current_time + amount_of_seconds))
        else
            buffer="$line\n"
        fi
    done
    echo -en "$buffer"
}

Тестирование:

$ alias firehose='(printf "1\n2\n3\n" ; sleep 2 ; printf "4\n"; sleep 2 ; printf "5\n6\n7\n" ; sleep 2; printf "8\n")'
$ firehose | interval 1 | cat
1
3
4
5
7
8
$ 

Второй вариант

Перенаправить вывод firehoseв файл :firehose >> buffer_file.txt(Объяснение, почему >>, а не >, см. ниже)

expensive-commandбудет считывать последнюю строку из этого файла каждую секунду и очищать файл:

while true; do
    tail -n 1 buffer_file.txt | expensive-command
    # clear file
    echo -n '' > buffer_file.txt
    # and sleep 1 second
    sleep 1      
done

В результате получим следующее:

  1. обе команды работают одновременно(firehoseв фоновом режиме):

    firehose >> buffer_file.txt &./script_with_expensive_command_inside.sh

    Оператор APPEND->>нужен после firehose, а не WRITE >. В противном случае файл не будет очищен и будет постоянно расти.Вот объяснение такого поведения.
  2. Все ненужные строки будут удалены, только последняя будет передана вexpensive command
  3. Последняя строка будет сохранена до того, как expensive commandне прочитает ее и не очистит файл.
-1
21.12.2020, 18:24
1 ответ

I want to start contributing to the Linux Kernel, plus I would like to, one day, fork the repository on github and add some modifications to it.

Ядро Linux не разрабатывается на Github.https://lwn.net/Articles/702177/. Чтобы внести свой вклад, вам необходимо отправить электронная почта -по спискам рассылки и лицам, указанным scripts/get _maintener.pl

How do I get started with contributing to the kernel? Is there something I should read/watch (I prefer watching videos). Is there some documentation that will hold my hand all the way through? Everything I've found hitherto hasn't been updated in a decade.

Начните с чтения файлов в каталоге Documentation/process в Linux. дерево и посмотрите это Разработка ядра Linux, Грег Кроа -Хартман -Видео Git Merge 2016 . Кстати,

I prefer watching videos

Почему? Чтобы внести существенные изменения в Linux, вы должны должны прочитать ряд документов, ветки списков рассылки и тысячи строк кода.

I mainly use Windows and Mac, but have an Ubuntu Virtual Machine installed on my PC.

Чтобы внести изменения в огромный и сложный проект, который ядра Linux, вы должны иметь полное представление о том, что ты поживаешь. Используйте Linux в течение нескольких лет, узнайте, как он работает, и найдите легко исправить ошибки с помощью scripts/checkpatch.pl -f <file>.

1
18.03.2021, 22:41

Теги

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