Instalar o DOOM em qualquer dispositivo é como hastear o banner do vencedor em uma fortaleza caída. Me perguntaram "bem, você começou a desgraça?" pelo menos 35 vezes quando descobriram que estou brincando com esta calculadora. Decidi não decepcionar o público e conseguir o lançamento do DOOM. Ao longo do caminho, tornou-se um bom teste de desempenho do equipamento, além de revelar bugs desagradáveis. Então vamos!
Notícias do projeto
Para aqueles que estão se perguntando como fiz o DOOM funcionar, eles podem pular este capítulo e pular para o próximo. Ele simplesmente apresenta o status atual do projeto.
Como você lembra nas partes anteriores ( parte 1 e parte 2 ), eu estava empenhado em colocar o Linux em uma calculadora, reconstruindo u-boot, kernel, rootfs. Desde então, tenho estado bastante envolvido na calculadora e até mesmo descobri completamente o que era feito no u-boot, kernel e árvore de dispositivos. Você tem que entender que esse é o meu hobby, no meu tempo livre do meu trabalho principal e da família, então nem tudo passa rápido, e às vezes é um tanto ilógico, simplesmente porque hoje há vontade de fazer isso e não de outra forma.
A principal novidade aconteceu, graças ao usuário Alx2000y, que me convidou para um bate-papo em um carrinho, onde as pessoas viram seu firmware para Xiaomi Gateway em um processador semelhante. Existe até um artigo sobre Habré sobre o assunto . As pessoas já avançaram muito neste assunto, expandindo incrivelmente a funcionalidade do aparelho. E me ajudou muito a derrotar a questão nand. Como você se lembra, logo no início eu limpei minha imagem nand da estupidez. Como resultado, obtive um número bastante grande de setores defeituosos "virtuais", o mais desagradável é que os setores defeituosos estavam no início e não permitiam que o u-boot fosse gravado lá. Abaixo está uma lista de setores defeituosos, a maioria deles são virtuais.
=> nand bad Device 0 bad blocks: 00000000 00020000 00040000 00060000 012c0000 04e20000 05280000 094c0000 17b20000 1ff80000 1ffa0000 1ffc0000 1ffe0000 =>
O Lenar, do chat acima, me ajudou muito, o problema foi resolvido com apenas dois comandos no u-boot:
nand erase.chip … nand scrub.chip … Really scrub this NAND flash? <y/N> y
Depois disso, verificamos o número de setores defeituosos e, vejam só, há significativamente menos deles!
=> nand bad Device 0 bad blocks: 1ff80000 1ffa0000 1ffc0000 1ffe0000
Como resultado, agora posso carregar o u-boot no setor zero e inicializar. No momento, a calculadora pode ser carregada simplesmente aplicando energia e será totalmente carregada com o Linux, com um visor funcional e a capacidade de executar programas via UART. Ele até funciona corretamente para DOOM. “Mas, tem uma nuance” (C). Aparentemente, o driver do teclado se sobrepõe ao driver ubifs e, como resultado, se você pressionar qualquer tecla no teclado, a calculadora trava instantaneamente. Um kernel panic chegou até a mim uma vez, mas não pensei em salvá-lo para pelo menos encontrar o local dessa interseção. Então, por enquanto, tudo funciona no initramfs com certeza. Um vídeo demonstrando o trabalho de carregar nand, lançar DOOM e congelar foi postado em meu canal de telegrama .
De outra boa notícia, tentei colocar o ubuntu no nand, ele também funciona corretamente. Os pacotes, é claro, não podem ser instalados, mas em geral você pode trabalhar e usar, o que também é conveniente. Mas sem um teclado funcional, esses jogos ainda são desprovidos de significado prático.
Na última parte, reclamei que o u-boot tem um comportamento diferente quando executado em nand e de RAM. Passei dois dias vasculhando os códigos-fonte do u-boot para descobrir o que estava acontecendo. E tudo acabou sendo banal (até vergonha). O utilitário uuu, ao iniciar o u-boot a partir da memória, passa suas variáveis de ambiente para lá. Mais precisamente, ele chama mfgtool_args e, como resultado, a linha da variável de ambiente de inicialização se parece com isto:
bootargs=rdinit=/linuxrc g_mass_storage.stall=0 g_mass_storage.removable=1 g_mass_storage.file=/fat g_mass_storage.ro=1 g_mass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF g_mass_storage.iSerialNumber= mtdparts=gpmi-nand:4m(boot),8m(kernel),1m(dtb),1m(misc),-(rootfs) clk_ignore_unused
Claro, se você inicializar a partir do nand, com esses parâmetros os ubifs da quarta seção não ficarão visíveis. Portanto, após carregar o u-boot na RAM, eu forçosamente defini as seguintes variáveis de ambiente para ele:
setenv bootargs console=ttymxc0,115200 ubi.mtd=4 root=ubi0:rootfs rootfstype=ubifs mtdparts=gpmi-nand:4m(boot),8m(kernel),1m(dtb),1m(misc),-(rootfs)
E tudo funciona muito bem.
Deixe-me explicar por que isso é necessário: se você atualizar o carregador de boot no setor zero, a capacidade de trabalhar com o mfgtool (utilitário uuu) desaparece. E nesta fase, que consiste em desenvolvimento e depuração, é a ferramenta principal. Portanto, é mais fácil deixar o utilitário uuu em execução e carregar o u-boot manualmente a cada vez.
Lançando DOOM
Passando para a parte divertida - executando DOOM na calculadora. Como você pode imaginar, não foi em vão que escrevi sobre todos os problemas no início. Você pode executar o DOOM quando carregado em um NAND flash, onde você pode colocar cartões de todos os tipos, todas as versões possíveis do DOOM e, em geral, o que quiser. Mas quando rodando em RAM, somos limitados pelo tamanho da imagem rootfs em cerca de 15 MB (a prática mostrou que 16 ainda rolam). Nesse sentido, tive que selecionar a versão do DOOM e fazer a montagem correta, além de aprender a trabalhar com ela.
Descobrimos que todas as coisas boas foram inventadas para nós há muito tempo e o DOOM pode ser montado diretamente no buildroot sem sair do sofá. Eu descobri isso quando pesquisei todas as variantes possíveis do DOOM para sistemas embarcados e tentei criá-las. Como se viu, basta executar:
make menuconfig
E escolha DOOM. Isso é feito em "
Target packages ---> Games --->
"
Temos duas versões do DOOM à nossa disposição: chocolate-doom e prboom . Depois de algumas experiências, percebi que o chocolate-doom não quer caber no initramfs. A menos, se você remover arquivos wad completamente. Eu estava tentando encontrar arquivos de maços cortados que combinassem com chocolate. Mas ela se recusou a trabalhar com eles. Como resultado, tentei instalar a versão chocolate no nand (junto com o prboom) e tentei lá. Selecionei parâmetros, etc. O experimento resultou no seguinte método de lançamento:
export SDL_NOMOUSE=1
chocolate-doom -geometry 320x240 -bpp 24 -nomouse
O resultado me decepcionou muito: essa versão de desgraça incorretamente (ou, pelo contrário, corretamente) estica a tela, deixando listras largas nas bordas da tela, o que eu realmente não gostei.
A versão em chocolate do DOOM. Uma faixa preta é visível abaixo.
Na inicialização, meu chocolate doom me diz o que o redimensionamento da janela faz:
I_InitGraphics: 320x240 mode not supported on this machine. I_InitGraphics: Auto-adjusted to 320x200x32bpp.
Portanto, optei por prboom. Eu fiz a imagem junto com os arquivos WAD compartilhados e o próprio prboom , removi todas as coisas desnecessárias. Mas, mesmo assim, por muito tempo não consegui fazer funcionar. Li todo tipo de manuais, procurei como configurar para que tudo funcionasse corretamente. A imagem é exibida, reage aos botões, mas a tela se estica desajeitadamente e exibe curvas de cores. Até que encontrei os parâmetros de lançamento ideais em algum fórum.
Em geral, para nossa calculadora, o lançamento do prboom é o seguinte: desligue o mouse e, em seguida, inicie o prboom com os seguintes parâmetros:
export SDL_NOMOUSE=1
/usr/games/prboom -width 320 -height 240 -nosound -vidmode 32bit
O parâmetro chave aqui:
"-vidmode 32bit"
.
Há muito tempo que procurava parâmetros adequados e só com isso tudo começou. Por conveniência, escrevi tudo no script d.sh. Enfim tudo funciona, você pode até jogar!
Especialmente para você, eu preparei um assembly atualizado de flash_utility com DOOM , que você pode executar em sua calculadora mesmo sem piscar, e mostrar a seus amigos, dizem, DOOM funciona em minha calculadora. Basta desmontar a calculadora, fechar os contatos descritos na primeira parte e executar
sudo uuu doom.uu
Ao final de todas as etapas, você receberá uma calculadora, com linux e DOOM. Para iniciar o DOOM, você precisará fazer login e executar na calculadora:
./d.sh
Para resumir
DOOM funciona! Posso jogar? Bem, localmente, baixando de um computador - você pode. Parece legal e lindo, mas, na verdade, não é exatamente o que você deseja. É muito legal quando você está no metrô, pegue uma calculadora e retire-a de suas pernas largas, ligue-a (o modo de economia de energia não está funcionando no momento) e inicie o DOOM. É muito legal jogar no metrô em uma calculadora no DOOM, Duke Nukem 3D, Quake I, II, III, etc. Mas o fato permanece - o DOOM está sendo executado neste hardware. Mas ainda há muito trabalho a ser feito.
Em geral, não há pelo menos uma pequena comunidade em torno desta calculadora (pelo menos mais do que eu), para que haja testadores de problemas, haja alguém com quem conversar e compartilhar, para ouvir conselhos. O autor original claramente acalmou esse projeto, embora tenha feito um trabalho titânico. Eu o entendo bem e não posso censurá-lo por não querer ajudar nem mesmo com conselhos neste projeto. Bem, ele deu pequenas recomendações, mas claramente não dependia mais dele. Portanto, se você tiver ideias, uma calculadora, uma vontade de ajudar, pelo menos com conselhos, escreva aqui ou no carrinho, ficarei feliz!
PS Por que estou fazendo isso?
Muitas vezes eles me perguntam "para quê"? Eu entendo intelectualmente que é estúpido responder a esta pergunta, mas mesmo assim responderei.
Por que um artista está pintando um quadro ou um autor escrevendo um livro? Sejamos honestos, 90% dos livros, pinturas e outras obras podem não ver a luz de forma alguma, e daqueles que veem, uma fração de um por cento se tornará conhecida e ganhará uma ampla gama de leitores. Simplificando, a maioria dos criadores está fazendo um trabalho “inútil”. Além disso, muitas obras nem mesmo encontram seus leitores, mas por que não deveriam? O que move essas pessoas? Tudo é muito comum. Eles são movidos por um sentimento simples:
Simplificando, você faz isso porque é legal e rápido. E, curiosamente, no futuro trará grandes benefícios, embora não tão óbvios quanto parece.
Arquivos para baixar