Linux Kernel: 'Não é possível encontrar o arquivo de mapa'

0

Eu tenho tentado fazer um kernel Linux rodar e configurar e compilar a mim mesmo, mas até agora sem sucesso. A máquina é um MacBook da Apple (Intel Core 2 Duo, 64 bits) que possui o firmware gratuito do Libreboot instalado, com o GRUB2 como carga útil. Eu estou tentando usar esse kernel personalizado para inicializar uma instalação do Linux From Scratch que eu construí. Eu tenho o Trisquel GNU / Linux (versão 7) instalado em outra partição na máquina, o que funciona bem, então eu sei que é possível inicializar o GNU / Linux nesta configuração de hardware / firmware.

A versão do kernel é 4.13.1 (linux-libre) e é a primeira vez que eu tentei compilar meu próprio kernel. Quando tento inicializá-lo a partir do prompt de comando do GRUB, a tela fica preta e nenhuma saída é exibida; no entanto, ele grava no arquivo /var/log/kern.log. Em particular, estou confuso com a seguinte mensagem no início do arquivo de log:

Oct 9 17:24:17 <lee_lfs> kernel: klogd 1.5.1, log source = /proc/kmsg started.
Oct 9 17:24:17 <lee_lfs> kernel: Inspecting /boot/System.map
Oct 9 17:24:17 <lee_lfs> kernel: Cannot find map file.
Oct 9 17:24:17 <lee_lfs> kernel: Loaded 100800 symbols from 32 modules.
Oct 9 17:24:17 <lee_lfs> kernel: [ 0.000000] random: get_random_bytes called from start_kernel+0x30/0x3bc with crng_init=0
Oct 9 17:24:17 <lee_lfs> kernel: [ 0.000000] Linux version 4.13.1-gnu (nobody@lee-LibreBook) (gcc version 7.2.0 (GCC)) #1 SMP PREEMPT Mon Oct 9 13:39:53 EDT 2017 

A segunda linha abaixo parece indicar que ele encontrou o arquivo /boot/System.map; entretanto, a linha a seguir sugere que o arquivo está sendo rejeitado (o que eu suspeito que seja pelo menos parcialmente responsável pela falha do kernel em inicializar completamente).

Alguém tem alguma idéia do que pode estar causando isso? Eu fiz essa pergunta antes no site do Linux Questions ( link aqui ); no entanto, ninguém foi capaz de descobrir isso. (Esse link contém mais alguns antecedentes para o problema e coisas que foram sugeridas antes).

Editar - para responder a uma sugestão que foi feita nos comentários:

Um usuário sugeriu que a linha 'Inspecting ...' pode não significar literalmente que o klogd está acessando o arquivo, mas pode apenas significar que ele começou a procurá-lo. No entanto, eu inicialmente tinha esquecido de adicionar uma linha em / etc / fstab para a partição / boot (caso em que, obviamente, não seria capaz de encontrar o arquivo) e essa linha 'Inspecting ...' não estava sendo impresso. Foi somente depois que eu consertei o / etc / fstab que essa linha começou a aparecer no log, e com o caminho correto para o arquivo de mapeamento. É por isso que suspeito que o klogd está encontrando o arquivo de mapa, mas parece não estar aceitando por algum motivo.

    
por Time4Tea 27.10.2017 / 23:15

1 resposta

2

Então, andei pesquisando o código fonte do klogd e acho que sei qual é a resposta:

Primeiramente, a linha Inspecting ... realmente significa que o klogd encontrou o arquivo de mapa naquele local e o abriu com sucesso.

No entanto, a razão pela qual está imprimindo a linha Cannot find map file. é porque está procurando por uma linha no arquivo de mapa do formulário:

[address] [type] _Version_XXXXX

onde 'XXXXX' é a versão do kernel, codificada na base 256.

No entanto, esta linha de versão não está presente em nenhum dos arquivos de mapa que foram gerados durante a minha compilação do kernel (nem nos arquivos de mapa que são fornecidos com a minha instalação Trisquel pré-empacotada). Então, como não é possível encontrar essa linha de versão, o klogd está rejeitando o arquivo de mapeamento.

Obviamente, isso leva a mais perguntas, embora ...

Editar: criei estas perguntas subseqüentes:

Qual é o tamanho do problema 'Não foi possível encontrar o arquivo do mapa'. mensagem de inicialização?

Por que meu arquivo System.map não contém uma linha 'Version_XXXXX'?

Editar: adicionei uma linha de versão 'fictícia' ao início do meu arquivo System.map:

0FFFFFFFFFFFFFFF d Version_265223

O endereço é aquele que não deveria existir no mapa de memória virtual (portanto, esperamos que não interfira ou colida com quaisquer outros símbolos no arquivo). '265223' é a versão do meu kernel (4.12.7) codificada na base 256. Agora recebo o seguinte no meu arquivo kern.log na inicialização:

Nov  3 19:12:02 <lee_lfs> kernel: klogd 1.5.1, log source = /proc/kmsg started.
Nov  3 19:12:02 <lee_lfs> kernel: Inspecting /boot/System.map-4.12.7
Nov  3 19:12:02 <lee_lfs> kernel: Loaded 86148 symbols from /boot/System.map-4.12.7.
Nov  3 19:12:02 <lee_lfs> kernel: Symbols match kernel version 4.12.7.
Nov  3 19:12:02 <lee_lfs> kernel: Loaded 11257 symbols from 31 modules.

Então parece que funcionou - o klogd finalmente reconheceu o arquivo do mapa! O kernel ainda não inicializou, embora isso provavelmente se deva a outro problema, no qual terei de olhar em seguida. Isso parece funcionar como uma correção temporária por agora; no entanto, entrarei em contato com a equipe de desenvolvedores do kernel para ver o que está acontecendo com isso.

    
por 02.11.2017 / 14:52