-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
Jaboatão dos Guararapes, PE, 07 de setembro de 2014.
Eis uma tradução livre para a lingua portuguesa falada no Brasil do
texto da autoria de Antonino Daplas "The Framebuffer Console". Tal
texto vem junto com os códigos fontes do kernel Linux, estando o arquivo
localizado sob o diretório Documentation/fb/fbcon.txt
O Console Framebuffer
=====================
O console framebuffer (fbcon), como o nome implica, é um console
de texto sendo executado no topo do dispositivo framebuffer. Tem a
funcionalidade de qualquer driver de console de texto padrão, tal qual o
console VGA, com as características adicionadas que podem ser atribuídas
à natureza gráfica do framebuffer.
Na arquitetura x86, o console framebuffer é opcional, e alguns
até mesmo o tratam como um brinquedo. Para outras arquiteturas, é o
único dispositivo de exibição disponível, texto ou gráfico.
Quais são as características de fbcon? O console framebuffer
suporta altas resoluções, variação de tipos de fontes, rotação de
display, multicabeça primitivo, etc. Teoricamente, fontes
multi-coloridas, blending, aliasing, e qualquer característica feita
disponível pela placa gráfica subjacente também é possível.
A. Configuração
O console framebuffer pode ser habilitado utilizando sua
ferramenta de configuração de kernel favorita. Está sob Device
Drivers->Graphics Support->Support for framebuffer devices->Framebuffer
Console Support. Selecione 'y' para compilar o suporte estaticamente,
ou 'm' para suporte de módulo. O módulo será fbcon.
Para ativar o fbcon, pelo menos um driver framebuffer é exigido,
então escolha um dos numerosos drivers disponíveis. Para sistemas x86,
eles quase universalmente tem placas VGA, de forma que vga16fb e vesafb
sempre estarão disponíveis. Entretanto, a utilização de um driver
específico para o chipset da placa te dará mais velocidade e
características, tais como a habilidade de mudar o modo de vídeo
dinâmicamente.
Para exibir o logotipo do pinguim, escolha qualquer logotipo
disponível em Logo Configuration->Boot up logo.
também, você precisará selecionar pelo menos uma fonte
compilada-internamente, porém se você não fizer nada, a ferramenta de
configuração de kernel selecionará uma para você, usualmente uma fonte
8x16.
TRUQUE: Um relato comum de bug é a habilitação do framebuffer sem
habilitar o console framebuffer. Dependendo do driver, você poderá
obter uma exibição preta ou truncada, porém o sistema ainda inicializa
por completo. Se você estiver com sorte em ter um driver que não
altere o chip gráfico, então você ainda obterá um console VGA.
B. Carregamento
Cenários possíveis:
1. Driver e fbcon são compilados estaticamente
Usualmente, fbcon automaticamente se apossará do seu console.
A notável exceção é vesafb. Ele precisa ser explicitamente
ativado com o parâmetro de opção de inicialização vga=. [Nota
do tradutor: conforme a documentação do GNU GRUB, o parâmetro
"vga=" foi substituído por "resolution="]
2. Driver é compilado estaticamente, fbcon é compilado como um módulo
Dependendo do driver, você obtém ou um console padrão, ou
uma exibição truncada, conforme mencionado acima. Para obter um
console framebuffer, faça um 'modprobe fbcon'.
3. Driver é compilado como um módulo, fbcon é compilado estaticamente
Você obtém seu console padrão. Uma vez que o driver seja
carregado com 'modprobe xxxfb', fbcon automaticamente se
apossa do console com a possível exceção do uso da opção
fbcon=map:n. Veja abaixo.
4. Driver e fbcon são compilados como um módulo.
Você pode carregá-los em qualquer ordem. Uma vez que ambos
estejam carregados, fbcon se apossará do console.
C. Opções de inicialização
O console framebuffer tem várias, largamente desconhecidas,
opções de inicialização que podem modificar-lhe o
comportamento.
1. fbcon=font:<name>
Seleciona a fonte inicial para uso. O valor 'name' pode ser
qualquer das fontes compiladas-internamente: VGA8x16, 7x14,
10x18, VGA8x8, MINI4x6, RomanLarge, SUN8x16, SUN12x22,
ProFont6x11, Acorn8x8, PEARL8x8.
Nota, nem todos os drivers podem lidar com fontes cujo tamanho
não seja divisível por 8, tais como vga16fb.
2. fbcon=scrollback:<value>[k]
O buffer de rolagem é a memória que é utilizada para preservar o
conteúdo da exibição o qual já foi rolado ao passado de sua
visualiação. Isso é acessado utilizando a combinação de teclas
Shift-PageUp. O valor 'value' é qualquer inteiro. O padrão é
32KB. O sufixo 'k' é opcional, e multiplicará o 'value' por
1024.
3. fbcon=map:<0123>
Esta é uma opção interessante. Ela diz qual driver é mapeado
para qual console. O valor '0123' é uma sequência que é
repetida até que o comprimento total seja 64 que é o número
total de consoles disponíveis. No exemplo acima, ela é
expandida para 012301230123... e o mapeamento será:
tty | 1 2 3 4 5 6 7 8 9 ...
fb | 0 1 2 3 0 1 2 3 0 ...
('cat /proc/fb' deveria te dizer o que são os números
fb)
Um efeito colateral que pode ser útil é utilizar um valor de
mapa que exceda o número de drivers fb carregados. Por
exemplo, se apenas um driver estiver disponível, fb0,
adicionar fbcon=map:1 diz a fbcon para não se apossar do
console.
Mais tarde, quando você quiser mapear o console para o
dispositivo framebuffer, você pode utilizar o utilitário
con2fbmap.
4. fbcon=vc:<n1>-<n2>
Essa opção diz ao fbcon para apossar-se apenas de um intervalo
de consoles conforme especificado pelos valores 'n1' e 'n2'.
O restante dos consoles fora do intervalo dado ainda serão
controlados pelo driver de console padrão.
NOTA: Para máquinas x86, o console padrão é o console VGA
o qual tipicamente está localizado na mesma placa de vídeo.
Assim, os consoles que são controlados pelo console VGA serão
truncados.
4. fbcon=rotate:<n>
Essa opção altera o ângulo de orientação da exibição do console.
O valor 'n' aceita o seguinte:
0 - orientação normal (0 graus)
1 - orientação horária (90 graus)
2 - orientação de cabeça para baixo (180 graus)
3 - orientação anti-horária (270 graus)
O ângulo pode ser alterado a qualquer tempo afterwards
'ecoando' os mesmos números para quaisquer um dos 2 atributos
encontrados em
/sys/class/graphics/fbcon
rotate - rotaciona a exibição do console ativo
rotate_all - rotaciona a exibição de todos os consoles
A rotação de console apenas se tornará disponível se o Console
Rotation Support estiver compilado em seu kernel.
NOTA: Isto é puramente rotação de console. Quisquer outras
aplicações que utilizem framebuffer permanecerão em suas
orientações 'normais'. Atualmente, o driver fb subjacente é
totalmente ignorante acerca da rotação de console.
C. Anexando, Desanexando e Descarregando
Antes de ir adiante sobre como anexar, desanexar e descarregar o console
framebuffer, uma ilustração das dependências pode ajudar.
A camada do console, como ocorre com a maioria dos subsistemas, precisa
de um controlador que interaja com o hardware. Assim, em um console
VGA:
console ---> controlador VGA ---> hardware.
Presumindo que o controlador VGA pode ser descarregado, uma pessoa deve
primeiro desvincular o controlador VGA da camada de console antes de
descarregar o controlador. O controlador VGA não pode ser descarregado
se ele estiver ainda vinculado à camada de console. (Veja
Documentation/console/console.txt para mais informação).
Isso é mais complicado no caso do console framebuffer (fbcon), pois
fbcon é uma camada intermediária entre o console e os drivers:
console ---> fbcon ---> controladores fbdev ---> hardware
Os controladores fbdev não podem ser descarregados se eles estiverem
vinculados ao fbcon, e fbcon não pode ser descarregado se ele estiver
vinculado à camada de console.
Assim, para descarregar os controladores fbdev, uma pessoa deve primeiro
desvincular fbcon do console, então desvincular os controladores fbdev
do fbcon. Felizmente, a desvinculação de fbcon da camada de console
automaticamente desvinculará os controladores framebuffer do fbcon.
Assim, não existe necessidade de desvincular explicitamente os
controladores fbdev do fbcon.
Então, como nós desvinculamos fbcon do console? Parte da resposta está
em Documentation/console/console.txt. Para resumir:
Ecôe um valor para o arquivo de vínculo que representa o controlador de
console framebuffer. Assim, presumindo que vtcon1 representa fbcon,
então:
echo 1 > sys/class/vtconsole/vtcon1/bind - anexa o console framebuffer
à camada de console
echo 0 > sys/class/vtconsole/vtcon1/bind - desanexa o console framebuffer
da camada de console
Se fbcon for desanexado da camada de console, seu controlador de
inicialização de console (o qual é usualmente modo de texto VGA)
assumirá o controle. Uns poucos controladores (rivafb e i810fb)
restaurarão o modo de texto VGA para você. Com o resto, antes de
desanexar fbcon, você deve tomar uns poucos passos adicionais para ter
certeza de que seu modo texto VGA está restaurado adequadamente. O
seguinte é um dos vários métodos que você pode fazer:
1. Download ou instale vbetool. Esse utilitário está incluído na
maioria das distribuições atuais, e é usualmente parte da ferramenta de
suspender/restaurar.
2. Na configuração de seu kernel, assegure-se de que
CONFIG_FRAMEBUFFER_CONSOLE está configurado para 'y' or 'm'.
Habilite um ou mais dos seus controladores de framebuffer preferidos.
3. Inicialize no modo texto e como root execute:
vbetool vbestate save > <arquivo estado vga>
O comando acima salva o conteúdo dos registradores do seu
hardware gráfico para <arquivo estado vga>. Você precisa fazer
esse passo apenas uma vez, já que o arquivo de estado pode ser
reutilizado.
4. Se fbcon for compilado como um módulo, carregue fbcon fazendo:
modprobe fbcon
5. Agora, para desanexar fbcon:
vbetool vbestate restore < <arquivo estado vga> && \
echo 0 > /sys/class/vtconsole/vtcon1/bind
6. Isso é tudo, você está de volta ao modo VGA. E se você compilou
fbcon como um módulo, você pode descarregá-lo com 'rmmod fbcon'
7. Para reanexar fbcon:
echo 1 > /sys/class/vtconsole/vtcon1/bind
8. Uma vez que fbcon estiver desvinculado, todos os controladores
registrados no sistema também se tornarão desvinculados. Isso
significa que aquele fbcon e controladores individuais framebuffer podem
ser descarregados ou recarregados à vontade. Recarregar os
controladores ou fbcon automaticamente vinculará o console, fbcon e os
controladores juntos. Descarregar todos os controladores sem
descarregar fbcon tornará impossível para o console vincular fbcon.
Notas para usuários vesafb:
==========================
Infelizmente, se a sua linha de comando de inicialização incluir um
parâmetro vga=xxx que configura o hardware em modo gráfico, tal como
quando carregar vesafb, vgacon não carregará. Em vez disso, vgacon
substituirá o console de inicialização padrão por dummycon, e você não
obteria qualquer display após desanexar fbcon. Sua máquina ainda está
viva, então você pode reanexar vesafb. Entretanto, para reanexar
vesafb, você precisa fazer um dos seguintes:
Variação 1:
a. Antes de desanexar fbcon, faça
vbetool vbemode save > <arquivo estado vesa> # faça uma vez
para cada modo
vesafb,
# o arquivo pode
ser reutilizado
b. Desanexe fbcon como no passo 5.
c. Anexe fbcon
vbetool vbestate restore < <arquivo estado vesa> && \
echo 1 > /sys/class/vtconsole/vtcon1/bind
Variação 2:
a. Antes de desanexar fbcon, faça:
echo <ID> > /sys/class/tty/console/bind
vbetool vbemode get
b. Tome nota do número do modo
b. Desanexe fbcon como no passo 5.
c. Anexe fbcon:
vbetool vbemode set <número do modo> && \
echo 1 > /sys/class/vtconsole/vtcon1/bind
Amostras:
========
aqui estão 2 amostras de scripts bash que você pode utilizar para
vicular ou desvincular o controlador de console framebuffer se você
estiver em uma caixa X86
- - ---------------------------------------------------------------------------
#!/bin/bash
# Desvincula fbcon
# Mude isto para onde seu arquivo vgastate atual estiver localizado
# Ou Utilize VGASTATE=$1 para indicar o arquivo de estado em tempo de execução
VGASTATE=/tmp/vgastate
# caminho para a ferramenta vbe
VBETOOL=/usr/local/bin
for (( i = 0; i < 16; i++))
do
if test -x /sys/class/vtconsole/vtcon$i; then
if [ `cat /sys/class/vtconsole/vtcon$i/name | grep -c "frame buffer"` \
= 1 ]; then
if test -x $VBETOOL/vbetool; then
echo Unbinding vtcon$i
$VBETOOL/vbetool vbestate restore < $VGASTATE
echo 0 > /sys/class/vtconsole/vtcon$i/bind
fi
fi
fi
done
- - ---------------------------------------------------------------------------
#!/bin/bash
# Vincula fbcon
for (( i = 0; i < 16; i++))
do
if test -x /sys/class/vtconsole/vtcon$i; then
if [ `cat /sys/class/vtconsole/vtcon$i/name | grep -c "frame buffer"` \
= 1 ]; then
echo Unbinding vtcon$i
echo 1 > /sys/class/vtconsole/vtcon$i/bind
fi
fi
done
- - ---------------------------------------------------------------------------
- - --
Antonino Daplas <adaplas@pol.net>
Jamenson Ferreira Espindula de Almeida Melo
Usuário Linux nº 166197
https://linuxcounter.net/cert/166197.png
Impressão digital da chave:
234D 1914 4224 7C53 BD13 6855 2AE0 25C0 08A8 6180
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.22 (GNU/Linux)
iQEcBAEBCAAGBQJUDAZOAAoJECrgJcAIqGGARYEH+wU6XL+cf03EhATGkPBCsUOt
clzKY9qS2OSsnnTCdyv/cBRyZzbF3dzKBYWLDwm0duNhAwPCZ+sx1hCCFw+s8j+b
O6a0ZjhUpOCHukYdKWp9hZ3SRrGfHDWjEimZ9G1BCfbRQ4GQa/PGPCIupN+10aWI
0wpWyD+Fu8gxOdOvBSCZQ9s4nCghNo7XOu9Eif4Td+1gGhy3CXidiY4nwVvf7dKc
ggHANj3FprQQgcYc9E1deGc/j/kIDxUzus4Kx0Xg/lUpigEDP9dJ7s7apgS0tk5B
HXzh0085Lnn9Fv4p/hLbClVoqe1R7IoPkJ3tFeuj7lWXoACuiit/f7SBwzlLTBk=
=X/BN
-----END PGP SIGNATURE-----
domingo, 7 de setembro de 2014
O Console Framebuffer (Antonino Daplas)
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário