Eu estou tentando construir um sistema Linux embutido baseado em uma CPU Atmel AT91SAM9G25 SoC (ARM9 @ 400Mhz). Eu estou usando o bootloader AT91Bootstrap.
Como o assunto da minha postagem sugere, tenho um problema com o retorno da funcionalidade de hibernação. Suspender para o processo de disco parece funcionar bem, mas ao acordar, o sistema não restaura a sessão anterior.
O problema que estou enfrentando em detalhes é o seguinte:
Eu construí uma imagem do Linux para o meu sistema usando o buildroot e eu ativei / configurei de acordo os seguintes parâmetros do kernel:
Opções de gerenciamento de energia - > Suspender para RAM e espera
Opções de gerenciamento de energia - > Hibernação & Partição de continuação padrão /dev/mmcblk0p3
(A versão do kernel que estou usando é 4.0.4 e /dev/mmcblk0p3
é a partição de troca do sdcard.)
Quando inicializei o sistema pela primeira vez, percebi que a partição de swap não era montada automaticamente. Consegui montar a partição swap manualmente com os comandos mkswap /dev/mmcblk0p3
e swapon -a
. Eu também inseri a linha correspondente no arquivo fstab:
/dev/mmcblk0p3 none swap sw 0 0
Após a reinicialização, não consegui encontrar nenhuma partição de swap montada. Para resolver esse problema, incluí os comandos mkswap
e swapon
mencionados no arquivo inittab. Após a reinicialização, a partição swap foi montada com sucesso na inicialização.
Com a partição swap montada, estou solicitando que o sistema entre em hibernação (suspenda em disco). O processo de suspensão parece funcionar como esperado.
O problema começa quando reconectar a energia. Embora o sistema pareça entender que ele despertou de um estado de suspensão, ele não restaura a sessão anterior. É como fazer uma inicialização a frio.
Suspender para a memória está funcionando bem. Eu posso colocar o sistema em suspensão com rtcwake -s20 -m mem
e quando ele acordar a sessão anterior é restaurado com sucesso. Portanto, suponho que algo dê errado com a partição swap, mas fiquei sem ideias.
Eu tentei hibernar o sistema usando os seguintes comandos:
rtcwake -s20 -m disk
echo shutdown > /sys/power/disk
echo disk > /sys/power/state
pm-hibernate
mas todos eles falham como descrito acima.
Alguns resultados úteis do dmesg e do console podem ser encontrados aqui
Alguma sugestão ou ideia do que eu posso estar fazendo errado?
Tags embedded