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 .