Я юзер, кернел-хакингом не занимался. Понятно, что linux - это ядро. Ну то есть это то, что лежит на kernel.org или ещё где-то в модифицированном/пропатченном виде. Это в конце-концов бинарь, который собирается в bzImage, помещается в память загрузчиком и на который передаётся управление.
Вопрос такой - если встаёт вопрос о переносе linux на новую платформу, то какой процент исходников, которые я качнул с kernel.org, приходится под конкретную платформу портировать?
Ну например - есть файловая система ext4. Как я понимаю, это код, работающий на довольно высоком уровне с файлом раздела (например /dev/sda1), а уже файлы раздела появляются в результате работы драйвера, знающего про конкретные порты ввода-вывода, адреса в памяти для работы с конкретным типом железки. Где-то scsi-диск, где-то флешка на плате телефона - и под всё свой драйвер, который выкидывает в файловую систему файлы разделов на этом носителе.
Ещё есть планировщик, который, в основном, является высокоуровневым кодом, логически управляющим очерёдностью выполнения процессов, учитывая всякие там nice и т.п., но помимо этого может учитывать особенности конкретного процессора. Например в каком-то процессоре есть ring0...ring3, а в каком-то нет. Какие участки кода linux будет затрагивать появление нового типа процессора?
В какой-то архитектуре примитивы синхронизации такие, в другой сякие (другой выбор атомарных операций) - где это учитывается? Это вообще относится к ядру? То есть, когда я пишу pthread_mutex_lock() - это обращение в ядро?
В общем, сколько основных моментов в ядре linux, которые учитывает человек, портирующий ядро под какой-нибудь новый смартфон?