Portando o kernel 4.6 para a placa ARMv6 (Samsung S3C6410) que executa 2.6.38

2

Estou tentando fazer o kernel 4.6 rodar em uma placa S3C6410.

Para completar a porta e inicializar completamente, eu preciso configurar o kernel para trabalhar com o flash NAND e o controlador SD na placa.

Esta é a minha primeira tentativa de portar / compilar um kernel, então estou procurando mais conselhos sobre como abordar e diagnosticar o problema em vez de uma solução exata.

Eu tenho a placa para iniciar o kernel 4.6, mas não consigo ver o flash NAND ou o cartão SD (então não rootfs).

Kernel fornecido que funciona

O tabuleiro veio com "2.6.38-GZSD", que quando comparado com o padrão 2.6.38, inclui:

  • alguns drivers de áudio / vídeo / tv / LCDtouchscreen, com os quais não me importo

  • drivers de dispositivo de caractere para botões / gpio / pwm / adc, sobre os quais não me importo

  • sistema de arquivos yaffs2 (que eu já carreguei para o 4.6)

  • uma definição de máquina gzsd4610 dentro de arch/arm/mach/mach-s3c64xx , para este quadro

  • um driver NAND em drivers/mtd/nand/s3c_nand.c . O Kernel 4.6 possui drivers NAND e ONENAND para esta plataforma, então estou tentando usá-los em vez de portar o driver antigo da versão 2.6.38.

Configuração

Estou carregando o software na placa por meio de um gerenciador de inicialização embutido na placa. Ele é carregado em flash NAND a partir do cartão SD: uma imagem de inicialização, uma imagem do kernel e uma imagem rootfs.

Estou me comunicando com a diretoria via serial.

Estou compilando o kernel 4.6 usando o GCC 6.1.1. O kernel 2.6.38-GZSD foi fornecido compilado. Eu precisaria de alguma versão do GCC 4 para compilar eu mesmo.

Eu tentei usar a fonte do kernel 4.6 sem modificação de fonte - portanto, somente através da UI de configuração ( make nconfig neste caso). Eu configurei a plataforma e ativei todos os drivers relevantes (espero).

A máquina é configurada para SMDK6410 em vez de GZSD6410, já que o GZSD6410 não está na linha principal (e portar isso a partir do 2.6.38 exigiria um melhor conhecimento do kernel do que atualmente tenho). Este, e possivelmente o driver NAND, é o que eu presumo ser a causa da minha falha de inicialização.

Atualmente estou usando a linha de comando:

init=/linuxrc console=ttySAC0,115200 root=/dev/mtdblock2 loglevel=7 earlyprintk

Por outro lado, a linha de comando do kernel 2.6.38-GZSD de trabalho é:

init=/linuxrc console=ttySAC0,115200 root=/dev/mtdblock2

Questões específicas (e registros)

O kernel falha ao inicializar o leitor de cartão SD .

Ele também falha ao inicializar o ONENAND .

Se eu tentar usar o NAND em vez do ONENAND, o também falhará .

Em qualquer caso, isso faz com que o kernel não consiga montar rootfs e entrar em pânico .

Por outro lado, o log de uma inicialização bem-sucedida com o 2.6.38-GZSD parece assim .

    
por Mark K Cowan 25.08.2016 / 01:44

0 respostas