Quiero compilar e instalar un kernel kernel.org en un volumen HDD personalizado, digamos /dev/sda5
, en lugar de fusionarse con mis directorios actuales de Ubuntu.
Puedo encontrar información sobre la configuración y el proceso de compilación en toda la web, pero no hay ningún rastro de cómo colocar el kernel en un volumen personalizado (diferente a la distribución arrancada que está usando en el momento de la compilación). Lo que estoy preguntando es cómo podemos instalar 2 distribuciones diferentes en 2 volúmenes diferentes en 1 HDD, ahora piense en mi kernel personalizado como otra distribución.
Respuesta aceptada:
Puede compilar un kernel en cualquier lugar que desee, incluido su directorio de inicio. La única vez que se modifican los directorios fuera del árbol de compilación es cuando realiza uno de los install*
objetivos Entonces, para instalar un kernel, haría lo obvio:
cd $SOME_DIRECTORY
tar -xjvf linux-$VERSION.tar.bz2
cd linux-$VERSION
make mrproper menuconfig
# Configure the kernel here.
# Now build it using all your CPU threads in parallel.
make -j$(grep -c processor /proc/cpuinfo) bzImage modules
Después de configurar el kernel, se construirá. En este punto, tendrá un binario del kernel (vmlinux) y una imagen del kernel de arranque en arch/$YOUR_ARCHITECTURE/boot/bzImage.
Si está construyendo un núcleo monolítico, ya está. Copie el archivo sin comprimir (vmlinux
) o archivo comprimido (bzImage
) a su volumen deseado, configure el administrador de arranque si es necesario y listo.
Si necesita instalar módulos, y suponiendo que haya montado su volumen de destino en /mnt, podría decir:
INSTALL_MOD_PATH=/mnt \
INSTALL_PATH=/mnt/boot \
make modules_install
Esto copiará la imagen del núcleo a /mnt/boot
y los módulos a /mnt/lib/modules/$VERSION
.
Tenga en cuenta que estoy simplificando demasiado esto. Si necesita ayuda para construir el kernel manualmente, debe leer algunos de los documentos en la Documentation/
del árbol de fuentes del kernel. subdirectorio. El README
El archivo también le indica cómo compilarlo e instalarlo en detalle.
Sin embargo, arrancar el núcleo es una historia diferente. La mayoría de las distribuciones modernas usan una imagen de disco RAM inicial que contiene una tonelada de controladores para el hardware necesario para abrir el resto del núcleo (dispositivos de bloque, sistemas de archivos, redes, etc.). Este proceso no hará esta imagen. Dependiendo de lo que necesite hacer (qué hacer necesita hacer?), puede usar uno existente o crear uno nuevo usando la cadena de herramientas de su distribución. Debe consultar la documentación en update-initramfs
.
Sin embargo, también hay otros problemas. Usando la cadena de herramientas estándar, no puede compilar un kernel para una arquitectura o subarquitectura diferente. Tenga en cuenta que, en algunos casos, incluso los núcleos compilados en un tipo particular de caja x86 no funcionarán en otros tipos de cajas x86. Todo depende de la combinación de subarquitecturas y la configuración del kernel. La compilación entre arquitecturas (por ejemplo, la creación de un kernel ARM en una máquina x86) está totalmente fuera de discusión a menos que instale una cadena de herramientas de compilación cruzada adecuada.
Relacionado:Linux:¿pierdo archivos si descargo el caché (echo 3> /proc/sys/vm/drop_caches)?Sin embargo, si está tratando de rescatar otra instalación o computadora, un disco de rescate puede ser más útil que construir un kernel personalizado como ese.
Una cosa más:si está tratando de construir un kernel para otra computadora que arranca, tiene la misma arquitectura que la que está compilando y ejecuta un sistema operativo Debian o similar a Debian (Ubuntu cuenta), puede instalar el kernel-package
paquete (sudo aptitude install kernel-package
). Luego descomprime el kernel, cd
a la raíz del árbol fuente y diga:
CONCURRENCY_LEVEL=$(grep -c processor /proc/cpuinfo) \
sudo make-kpkg --initrd binary-arch
Esto aplicará los parches necesarios, configurará el kernel, lo construirá y lo empaquetará como un paquete .deb (unos cuantos paquetes, en realidad). Todo lo que necesita hacer es instalarlo en su sistema de destino y listo.