![Откуда ядро Linux знает архитектуру компьютера?](https://rvso.com/image/192241/%D0%9E%D1%82%D0%BA%D1%83%D0%B4%D0%B0%20%D1%8F%D0%B4%D1%80%D0%BE%20%E2%80%8B%E2%80%8BLinux%20%D0%B7%D0%BD%D0%B0%D0%B5%D1%82%20%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D1%83%20%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%B0%3F.png)
В start_kernel()
, одним из первых действий, выполняемых ядром, является запуск setup_arch()
. setup_arch()
определен для каждой поддерживаемой архитектуры, поэтому ему передается указатель на соответствующую командную строку.
Как инициализируется этот указатель, и как и когда ядро получает архитектуру компьютера?
решение1
Каждое ядро создано для одной архитектуры, поэтому оно имеет единственную реализацию setup_arch
.Общийstart_kernel
вызывает его, но он не передает инициализированный указатель в командную строку, он передает указатель на указатель в командную строку, и setup_arch
инициализация этого указателя является частью работы .
Например,x86 имеет глобальную command_line
переменную, И егоsetup_arch
сохраняет свой адрес в указателе, предоставленномstart_kernel
.
Таким образом, ядро фактически получает архитектуру компьютера при его сборке.