Você pode compilar um kernel em qualquer lugar que desejar, incluindo seu diretório pessoal. Os únicos diretórios de tempo fora da árvore de compilação são modificados quando você faz um dos destinos install*
. Então, para instalar um kernel, você faria o óbvio:
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
Depois de configurar o kernel, ele será criado. Neste ponto, você terá um binário do kernel (vmlinux) e uma imagem do kernel inicializável em arch / $ YOUR_ARCHITECTURE / boot / bzImage.
Se você está construindo um kernel monolítico, está feito. Copie o arquivo descompactado ( vmlinux
) ou o arquivo compactado ( bzImage
) para o volume pretendido, configure o gerenciador de inicialização, se necessário, e pronto.
Se você precisar instalar módulos, e supondo que você montou seu volume de destino em / mnt, você poderia dizer:
INSTALL_MOD_PATH=/mnt \
INSTALL_PATH=/mnt/boot \
make modules_install
Isto irá copiar a imagem do kernel para /mnt/boot
e os módulos para /mnt/lib/modules/$VERSION
.
Por favor, note que estou simplificando isso. Se você precisar de ajuda para construir o kernel manualmente, leia alguns dos documentos no subdiretório Documentation/
da árvore de origem do kernel. O arquivo README
também informa como construir e instalá-lo em detalhes.
Inicializar o kernel é uma história diferente, no entanto. A maioria das distribuições modernas usa uma imagem RAMdisk inicial que contém uma tonelada de drivers para o hardware necessário para abrir o restante do kernel (dispositivos de bloco, sistemas de arquivos, rede, etc). Este processo não fará esta imagem. Dependendo do que você precisa fazer (o que fazer você precisa fazer?), Você pode usar um existente ou fazer um novo usando o conjunto de ferramentas da sua distribuição. Você deve verificar a documentação em update-initramfs
.
Existem outros problemas também. Usando o toolchain padrão, você não pode compilar um kernel para uma arquitetura ou subarquitetura diferente. Note que, em alguns casos, mesmo os kernels compilados em um tipo particular de x86 não funcionarão em outros tipos de caixas x86. Tudo depende da combinação de sub-arquiteturas e da configuração do kernel. A compilação entre arquiteturas (por exemplo, a criação de um kernel ARM em uma máquina x86) está totalmente fora de questão, a menos que você instale um conjunto de ferramentas de compilação cruzada apropriado.
Se você está tentando resgatar outra instalação ou computador, no entanto, um disco de resgate pode vir a ser mais fácil do que construir um kernel personalizado como esse.
Mais uma coisa: se você está tentando construir um kernel para outro computador que inicializa, é a mesma arquitetura que você está compilando, e roda um sistema Debian ou Debian (contagem de Ubuntu), você poderia instalar o pacote kernel-package
( sudo aptitude install kernel-package
). Em seguida, descompacte o kernel, cd
na raiz da árvore de origem e diga:
CONCURRENCY_LEVEL=$(grep -c processor /proc/cpuinfo) \
sudo make-kpkg --initrd binary-arch
Isto irá aplicar as correções necessárias, configurar o kernel, compilá-lo e empacotá-lo como um pacote .deb (alguns pacotes, na verdade). Tudo o que você precisa fazer é instalá-lo no seu sistema de destino e pronto.