
Eu tenho uma pequena distribuição Linux incorporada personalizada (criada com OpenEmbedded), que inicializa com GRUB 1.99. O objetivo é que ele inicie rapidamente.
Atualmente diz:
GRUB loading.
por aproximadamente 2+ segundos (isso provavelmente é inevitável). Então:
Welcome to GRUB!
embaixo dele por uma fração de segundo quando terminar de carregar.
(Não há menu ou tempo limite de menu.) A tela é limpa e então:
Booting 'Disk'
por aproximadamente 8 segundos.Este atraso parece que deveria ser evitável.Gostaria muito de saber como fazer para não atrasar aqui.
Em seguida, continua para:
Decompressing Linux... Parsing ELF... done.
Booting the kernel.
E então muito texto de rolagem rápida enquanto o kernel é inicializado.
O arquivo de imagem do kernel tem 1,8 MB e o arquivo de imagem do disco tem 16 MB.
O grub.cfg
arquivo se parece com:
set default="0"
set timeout=0
menuentry "Disk" {
set root=(hd0,1)
linux /boot/Disk.kernel parport=0x378,7,3 ramdisk_size=16384 root=/dev/ram rw
initrd /boot/Disk.ext2
}
Em outro disco de inicialização que tenho (em um cartão Compact Flash), tenho exatamente o mesmo kernel e um arquivo de imagem de disco diferente, com 20 MB. O arquivo de configuração também é idêntico, exceto ramdisk_size=20480.Este tem um atraso extremamente longo de 69 segundos no mesmo ponto.Por que é muito mais longo? Felizmente, não preciso usar esse disco de inicialização com frequência. Mas seria bom consertar isso também, já que provavelmente o atraso é causado pela mesma coisa.
Como faço para corrigir esse atraso?O que isso está fazendo? Como alguém depura um bootloader? Vale a pena procurar um bootloader mais leve como o SYSLINUX? A exclusão de alguns dos módulos não utilizados do GRUB 2 melhorará isso? (Como descobrir quais módulos não são utilizados?)
Resumo
Todos os itens a seguir têm exatamente o mesmo kernel Linux 3.2:
Disco flash Ano computador X: imagem de 16 MB, GRUB 1.99,atraso de inicialização é de aproximadamente 8s; a velocidade de leitura do disco A é 20 MB/s.
Disco flash Bno computador X: imagem de 20 MB, GRUB 1.99,atraso de inicialização é de 69s; a velocidade de leitura do disco B é de 20 MB/s.
Disco flash Cno computador Y: imagem de 16 MB, GRUB 0.97,atraso de inicialização é .. extremamente rápido; a velocidade de leitura do disco C é de 16 MB/s.
Observe que o computador Y é semelhante ao computador X, mas um pouco mais lento.
(O monitor nem é rápido o suficiente para mostrar qualquer tela do GRUB. Do ponto em que a tela do BIOS desaparece até a tela de carregamento do kernel Linux aparecer pela primeira vez, ele mostra 4,76s de tela em branco - mas o kernel do Linux já está carregando há pelo menos 1,5s nesse momento, então é mais como 3,2s no máximo para o GRUB fazer seu trabalho. Isso inclui o carregamento do próprio GRUB e o BIOS decidindo de qual unidade inicializar, etc.)
Infelizmente, o GRUB 0.97 como essa instância não é capaz. ser construído repetidamente assim, então não parece uma opção viável (embora fosse bom).
Como faço para tornar o GRUB 2 rápido?
Responder1
EDIT: Afinal, parece que o GRUB2 é o problema neste caso. Mantenho minha resposta original abaixo apenas para referência e como explicação para problemas semelhantes que as pessoas possam ter.
O atraso de inicialização ao qual você está se referindo é o tempo necessário para que o kernel e a imagem initramfs sejam carregados na RAM. A culpa não está no bootloader, mas no tamanho do seu kernel/initramfs e na taxa de transferência de armazenamento (cartão CF).
Você pode testar facilmente a velocidade do seu armazenamento usando dd
(se estiver instalado em seu sistema embarcado) ou cat
. Basta substituir /dev/sda1
abaixo pelo nome do dispositivo de bloco que representa a partição de inicialização naquele sistema (geralmente você pode verificar isso usando o mount
comando).
- usando
dd
:dd if=/dev/sda1 of=/dev/null
- usando
cat
+time
:time cat /dev/sda1 > /dev/null
(No segundo caso, você precisaria calcular a taxa manualmente.)
Se a sua partição raiz for muito grande para esperar a conclusão dos comandos, basta pressionar Ctrl+ Cdepois de algum tempo (mas não menos que cerca de um minuto, para tornar o teste confiável).
Responder2
Não encontrei a causa da inicialização lenta com o GRUB 2.
Acabei usando o EXTLINUX, que é compacto e rápido, e mais adequado se você não precisa de todos os recursos sofisticados do GRUB 2.