예를 들어 Fedora의 Linux 커널을 FreeBSD의 커널로 바꾸는 등 커널을 변경할 수 있는지 알고 싶습니다.
이제 존재합니다데비안 GNU/kFreeBSD. BSD 커널을 포함하도록 Linux 배포판을 사용자 정의할 수 있습니까?
답변1
아니요, 각 코어는 고유한 방식으로 고유한 기능을 구현합니다. POSIX 호환성은 많지만 일단 해당 호환성을 제거한 후에는 이미 존재하는 커널 메커니즘을 사용하여 실행 파일을 컴파일해야 합니다. 많은 프로젝트에는 FreeBSD 또는 Linux용으로 명시적으로 컴파일하는 경우에만 컴파일되는 소스 코드가 포함되어 있습니다. 이것이 본질적으로 kFreeBSD가 하는 일입니다. 이러한 도구는 FreeBSD 커널을 지원하지만 그에 맞춰 컴파일해야 합니다.
epoll_create
예를 들어 FreeBSD에서 사용하려고 하면 예상대로 작동하지 않습니다.
물론 BSD 시스템 LFS 스타일에서 이러한 도구를 크로스 컴파일할 수 있지만 시간이 오래 걸릴 수 있습니다. 새로운 커널을 컴파일하는 것만큼 간단하지는 않습니다.
답변2
FreeBSD는 Linux 커널을 사용하지 않습니다. 이름에서 알 수 있듯이 BSD 커널을 사용합니다.
Linux 커널을 다른 Linux 커널(직접 빌드한 커널 또는 배포판에서 추출한 커널)로 교체할 수 있습니다. 배포판의 사용자 공간 프로그램은 컴파일할 특정 커널 기능에 의존할 수 있으며 이러한 기능이 없는 커널에서 실행하면 제대로 작동하지 않을 수 있습니다. 예를 들어, systemd 기반 배포판에는 커널에 cgroup이 필요합니다.
당신이 언급한 예에서는 그렇습니다. Linux 커널이나 BSD 커널용 GNU 배포판을 구축하는 것이 가능합니다. #ifdef
커널이 동일한 ABI를 광고하더라도 두 프로그램(예: )에 대해 컴파일된 프로그램 간에는 컴파일 시간 차이가 있는 경우가 많습니다 . 최소한 하위 수준 라이브러리(예: C 런타임 라이브러리)는 다양한 커널 ABI에 적응해야 합니다.
답변3
커널은 운영 체제 업데이트 중에 정기적으로 교체되는 독립적인 부분입니다. 일부 독점 드라이버(NVIDIA 등)에는 드라이버를 커널 소스 코드로 패치하고 해당 커널을 빌드한 후 현재 커널을 교체하는 설치 스크립트가 있습니다. 따라서 필요한 모든 기능을 수행하는 자체 커널 버전을 개발하는 경우 이를 구현하고 운영 체제의 나머지 부분은 그대로 두는 것이 큰 문제가 되지 않습니다. 그러나 대부분의 경우 이러한 "새 커널"은 가장 최근의 공식 릴리스에서 비롯됩니다.
솔라리스 커널은 어느 정도 이런 방식으로 포팅되어 OpenSolaris가 실행되는 Gnome 환경이 탄생했습니다.
그러나 완전히 다른 커널을 설치하려면 인터페이스를 브리지해야 하므로 상당한 노력이 필요합니다. 이를 위해서는 스크립트 작성뿐만 아니라 많은 C 프로그래밍이 필요할 수 있습니다.