Month: January 2008

Acessando a serial em kernel mode

As vezes precisamos acessar a serial a partir do kernel para criamos algum protocolo de rede que comunique com a serial ou algum driver que use a serial.

Pesquisando por isto, encontrei várias informações, então vamos começar pelo quick and dirt way:

struct file *filp = filp_open("/dev/ttyS0");
char buf[4096];
mm_segment_t oldfs = get_fs();
loff_t pos = 0;

set_ds(KERNEL_DS);
while (vfs_read(filp, buf, sizeof(buf), &pos) > 0)
printk("%s\n", buf);
filp_close(filp);

Isto até funciona, mas não é a forma correta de fazer.

A forma certa chama-se Line Discipline, e está descrita neste artigo:

http://www.linux-mag.com/id/1891

Eu e minha mania de fazer tudo do jeito mais difícil

Após instalar o firefox 32 bits no meu computador (AMD64) resolvi instalar o java e o flash. O java instalou sem problema, pois ele só descompacta e nada mais.

Já o flash deu um pouquinho de chateação. Após executar o flashplayer-installer aparece a mensagem dizendo que ele não suporta arquitetura x86-64, ora eu estou usando a ia32lib então tenho direito de instalá-lo.

Usando strace verifiquei que o instalador chama o programa “uname” para obter esta informação.

Então resolvi criar meu próprio uname.c :

int main(int argc, char **argv)
{
if(strcmp(argv[1],"-s") == 0)
printf("Linux");

if(strcmp(argv[1],"-m") == 0)
printf("i686");

return 0;
}

Depois de compilado copiei para /bin (claro fiz backup do original antes) e testei novamente.

Funcionou, enganei o instalador da Adobe/Macromedia 😉

Eu poderia ter copiado a lib de outro computador, mas não teria a mesma graça e mesma dificuldade 🙂

Uma técnica parecida com essa, porém mais apurada, pode ser utilizada para descobrir senhas em programas para Linux:

http://video.reverse-engineering.net/displayimage.php?album=28&pos=0

Palavras em português que eu desconhecia

Resolvi criar uma nova categoria no blog, uma “omenage” à nossa lingua tão importante e constantemente maltratada. Confesso com dois ss, que sempre tive problema com o português (com a lingua portuguesa), prova disso é o fato que a única matéria que fiquei de recuperação durante minha vida acadêmica foi exatamente o português.

Então vamos lá, chega de blablabla, vocês já devem estar curiosos para saber as palavras que eu desconhecia:

A:
abaetê – pessoa sábia, pessoa feia, repelente
acintoso – apoquentador, teimoso
acreção – processo pelo qual algo aumenta gradualmente de tamanho através do acréscimo de partes menores
acro – frágil, quebradiço
acropole – a parte mais elevada das antigas cidades gregas
adágio – ditado, conto
ado – leite recentement mungido
aduz – apresenta, introduz, conduz
alcadafe – vaso de barro
alguidar – vaso muito largo e comprido, com boca maior que o fundo
amanhar – tratar a terra, cultivar
andrajos – trapos, roupa seja e/ou rasgada
ânfora – vaso com duas asas
ancho – vaidoso, orgulhoso
antanho – o ano que se passou, em anos anteriores
apa – bolo em forma de disco, pão sem fermento
apetecer – desejar muito, cobiçar
apoplexia – golpe violento, algo que provoca morte instantânea
arrear – colocar enfeite e adorno em algo
arrefecer – esfriar, tornar-se frio, moderar o zelo, o entusiamos
aru – espécie de sapo das regiões do Amazonas
ascética – que ou quem se entrega às práticas espirituais, vida de monge
asinino – estúpido, próprio de asno
ataraxia – Serenidade de ânimo. Pessoa que não se preocupa com os problemas
ataúde – caixa
atoar – conduzir a reboque, rebocar, levar à toa
atoarda – notícia vaga, boato
atro – lúgubre, medonho
áulico – cortesão, palaciano

B:
baga – pequeno fruto carnudo e sem caroço, mas com semente
balangandã – enfeites presos um ao outro que forma uma penca decorativa
barriga – informação falsa noticiada em jornal
basal – essencial, principal
batel – barco pequeno
beliz – sagaz, esperto, ladino
bramar – gritar, rugir, bramir
bramir – rugir, soltar gritos de cólera
buril – estilo apurado, ferramenta para fazer gravuras em madeira

C:
cabotino – comediante ambulante
cacareno – velho, usado, de pouco valor
calandrar – lustrar, acetinar, alisar
camelice – tolice, sandice
caronte – Deus do mundo inferior e dos mortos (Mit. romana)
catafalco – Estrado alto sobre que se coloca o féretro
catarse – purificação, libertação do sofrimento de quem sofreu repressão
caterva – multidão, grande número de pessoas ou de qualquer outra coisa
chicana – tramoia em questões judiciais, trapaça
concupiscência – luxuria, desejo sexual, desejos materiais e carnais
colmatar – aterrar, preencher um ofício com algum material
colombina – personagem de um gênero de comédia italina (Commedia dell’Arte), pedra da qual se extrai chumbo
contendas – lutar, brigar, discutir, controvérsia
contritos – estar arrependido, pesaroso, penoso
contumaz – obstinado, insistente; jur.: pessoa que recusa a acomparecer perante ao juiz
cornija – decoração no alto de prédios, portas ou lareiras
coruscante – reluzente, cintilante, faiscante
cróceo – amarelado, dourado, da cor do açafrão

D:
debacle – mau resultado, fracasso, ruina
demover – fazer renunciar, dissuadir, abalar
digressão – passeio, excursão
dole – comuna francesa

E:
ebó – oferenda, despacho
edicula – uma pequena construção geralmente no fundo das casas usada como área de lazer e para churrascos
efígie – rosto ou vulto de uma pessoa numa moeda ou nota, retrato
elisão – supressão, eliminação,
elucubrações – compor, realizar à força de ligílias
enação – saliência superficial dos vegetais (Bot.)
enclave – dentro de uma área, território, região
engrupir – enganar, ludibriar, induzir ao erro
engodo – ísca, atrativo, chamariz, lisonja, adular
éreo – de bronze ou de cobre
esculento – comestível, que é bom de se comer
esgar – trejeito, visagem
estupefaciente – que entorpece, que deixa atônito (notícia estupefaciente)

F:
falarica – dardo incendiário, flecha com um chama na ponta
falca – tábua da borda de um barco
felação – ação de excitar o pênis com a boca, “boquete”
féretro – Caixão, ataúde, esquife
fleuma – humor, paciência

G:
gabão – capote com capuz, mangas e cabeção
garbosa – elegante, charmosa, aprumada, bonita
gazebo – construção com teto, mas sem paredes para dar sombra no jardim
gauro – boi de chifre curtos da India
ginetes – peão, cavaleiro, cavalo pequeno e ligeiro
gorgona – mulher mitológica com cobras no lugar do cabelo
grei – rebanho de gado miúdo, conjunto de paroquianos e diocesanos
guampo – chifre, aspa
gurma – doença que ataca os potros na época da dentição.

H:
hipomane – veneno extraído de éguas no cio, feitiço feito com este veneno

I:
iça – Fêmea alada da formiga saúva
idílico – simples, bucólico, pastorial. Fig.: maravilho, ideal, fantasioso
ilativo – conclusivo, que deduz os fatos
inane – fútil, canínha
incola – morador (poét.)
intrujão – enganador, burlador
írrito – sem validade, sem confirmação

J:
jacente – herança que fica para o governo, quando não há herdeiros necessários
jusante – fluxo da água de um rio em direção à foz (ao mar)

L:
ladeada – flanqueada, acompanhada
lapa – grande pedra, gruta
litania – ladainha
loa – mentira, elogios, apologia
lúgubres – escuro, medonho

M:
maioral – chefe, cabeça
menear – manejar, mexer, mover de um lado pro outro
messe – seara madura, ceifa, ganho, conquista

N:
nevrálgico – o ponte perigo ou delicado de uma questão
nicar – picar com o bico

O:
oblação – oferenda, oferta a Deus
ocaso – pôr do sol, ocidente, poente, declínio, ruína, cadente
odre – saco para líquidos
orago – santo, oráculo, padroeiro
orate – idiota, louco

P:
pantomima – peça de teatro apenas gestual
patoá – dialeto
patuá – amuleto
peremptório – decisivo, terminante, categórico, que perime
pierrô – personagem da comédia italiana, Pierrô Apaixonado – marchinha de Noel Rosa
pinoia – coisa sem préstimo (pop.)
pitonisa – sacerdotisa de Apolo, profetisa, vidente, bruxa
potentado – soberano de um estado poderoso, pessoa influente, podera ou rica
prelazia – cargo de prelado; pessoa que cuida das propriedades da Igreja católica
procrastinar – adiar, postergar, demorar
proxenetismo – aquisição

R:
recidiva – retorno de uma doença ou de um sintoma após um perído de cura
reigada – rego entre as nádegas de certos animais
ribalta – série de luzes à frente do palco, entre o pano de boca e o lugar da orquestra.
rififi – barulho, briga (pop.)
rossio – terreno aberto, rua larga, praça
runa – antigo alfabeto germânico

S:
sarcômero – um dos componentes básicos do músculo estriado
sauveiro – reunião de formegueiros de sauva
sebe – cerva viva para delimitar dois terrenos
sedição – revolta, motim, perturbação da ordem pública
sequazes – capangas
sisudo – predunte, justo, sério
solaparia – escavar, arruinar, encobrir
solapasse – aniquilar, arruinar
sufrágio – eleição, votação

T:
taciturno – calado, silencioso
talmude – livro sagrado dos judeus
tarol – tambor achatado
tépido – com pouco calor, morno, frouxo
tesas – estiradas, imóveis
teso – tenso, esticado, impetuoso, fig.: sem dinheiro
tororó – curto, muito aparado
tudesco – alemão, germano, língua dos antigos Germanos

U:
uca – aguardente, caninha
udo – graúdo, algo grande
ugar – gritar, alarmar, tornar plano, plainar

V:
valhala/valhalla – local para guerreiros mortos em batalha (Mit. nórdica)
vénia – licença, permissão, absolvição
vereda – local fértil, com vegetação abundante
vernáculo – linguagem correta, idioma proprio do pais, genuino
verve – imaginação viva, entusiasmo, energia
vilta – afronta, injúria, vitupério

Algumas podem ser conhecidas da maioria das pessoas, mas eu não as conhecia ou não tinha certeza do seu significado.

Janela de símbolos

Estou procurando por um plugin para adicionar ao gedit para que ele possa fazer referência cruzada usando como base um arquivo de índice ctags.

Encontrei um visualizador de símbolos (equivalente aqueles do MSVC e Eclipse) para o gedit:

http://www.micahcarrick.com/11-14-2007/gedit-symbol-browser-plugin.html

A instalação no Ubuntu é simples, basta descompactar o plugin em ~/.gnome2/gedit. No meu computador este diretório gedit não existia, então eu o criei e copiar para lá, funcionou corretamente.
Para ativar o plugin deve-se ir em Edit->Preference->Plugin e ativar o Symbol Browser.

Uma listagem com todos (vários) plugins para gedit pode ser encontrada eim:
http://live.gnome.org/Gedit/Plugins

O plugin que eu preciso é o CTags parser: http://live.gnome.org/Gedit/PluginCodeListing , porém para usá-lo terei que recompilar tudo com o fonte do gedit, pois só tem o binário para x86.

Debugger for Linux

Estava pesquisando sobre engenharia reversa e encontrei duas ferramentas interessantes nesta área, a primeira é para Windows e chama-se OllyDbg:

http://www.ollydbg.de

Infelizmente o código fonte não é aberto, trata-se de shareware que mais parece um freeware 🙂

A segunda ferramenta é uma clone desta só que, felizmente software livre, para Linux:

http://www.codef00.com/projects.php#Debugger

Por enquanto ela só suporta x86, mas é provável que em breve passe a suportar outras arquiteturas, seria ótimo suportar ARM, facilitaria na modificação de firmware de smartphones e celulares.

Se o que você procura é apenas um disassembler para Windows então sem dúvida o IDA é o melhor, ele suporta vários processadores:
http://www.hex-rays.com/idapro/

Sai LinuxBIOS, entra coreboot

Esta notícia já está um pouco velha, mas como não foi muito divulgada vou postá-la aqui.

O projeto LinuxBIOS mudou de nome para refletir melhor a idéia do projeto, agora ele se chama coreboot.

Realmente faz sentido, uma vez que o sistema é utilizado para inicializar outros sistemas operacionais também e pode ser usado para outros fins que não tenham relação com Linux.

O site do projeto também mudou, alias o que não mudou ainda é a logomarca do projeto:

http://www.coreboot.org/Welcome_to_coreboot

Convertendo wma para mp3

Esta dica usa os programas mplayer e o lame para fazer a conversão:

mplayer -vo null -vc dummy -af resample=44100 -ao pcm:waveheader Nome_da_Musica.wma && lame -m s -b 192 audiodump.wav -o Nome_da_Musica.mp3

Neste caso foi utilizado o bitrate de 192 kbps, outros valores são possíveis, consulte o manual do lame.

Hackeando o Windows CE

Depois que atualizei o firmware do iPaq para Windows Pocket 2003 um ícone do Bluetooth com um pequeno x vermelho começou a aparecer na tray icon. Estava claro que aquele ícone não ficaria ali por muito tempo me incomodando (o que ele fez? nada de mais, apenas a razão dele existir já é o suficiente pra mim :).

Primeiro tive que descobrir o nome da aplicação que coloca o icone na bandeja, isso foi simples, bastou clicar no ícone e mandar ativar o bluetooth, então apareceu uma tela com a mensagem de erro e título BTTrayCE. Portanto o nome do aplicativo era BTTrayCE.exe.

Usando o File Explorer do WinCE entrei no diretório \Windows, porém o arquivo BTTrayCE.exe não existia ou não estava visível lá. Resolvi abrir o Internet Explorer e coloquei a URL: file://\Windows\BTTrayCE.exe. Funcionou, apareceu a tela com a mensagem de erro anterior.

Minha idéia era arrumar uma forma de apagar o arquivo BTTrayCE.exe, tentei passar alguns comandos do DOS pela barra de endereço do IE, mas nada de funcionar. Então me surgiu uma outra idéia, copiar um arquivo com o nome BTTrayCE.exe para dentro de \Windows e assim substituir o arquivo original.

Infelizmente o WinCE não exibe a extensão do arquivo, então eu não conseguiria criar um arquivo de texto e renomea-lo para .exe. Eu poderia criar um arquivo BTTrayCE.exe no computador e transferir para o PDA, mas resolvi fazer tudo usando apenas o sistema do próprio PDA. Segunda opção, copiar um arquivo executável qualquer de dentro de \Windows para outro local, renomear para BTTrayCE.exe e copiar de volta para dentro de \Windows. Mas isso não foi tão simples como parecia, pois o WinCE bloqueia copiar os arquivos da ROM do sistema para outro local. Entretanto o segredo é nunca desistir, fui tentando arquivo por arquivo, e finalmente consegui copiar o arquivo CreateAssetFile.exe para outro local.

Após renomear o arquivo CreateAssetFile para BTTrayCE, tento copiá-lo para o \Windows, primeiro apareceu a janela padrão perguntando se eu queria substituir o arquivo BTTrayCE (viu só como ele estava lá :), após eu responde que “Sim” apareceu uma tela de acesso negado sugerindo as causas: ou o disco está cheio, ou está protegido contra escrita ou o programa está em execução. Imaginei que o problema fosse porque o programa estava em execução, então resolvi testar a idéia tentando sobrescrever um outro executável de \Windows que não estava em execução, mas a mesma mensagem de erro apareceu.

E agora? É melhor desistir e aceitar o fato que o WinCE venceu?

Nada disso, o segredo é nunca desistir 😀

Verifiquei que nenhum arquivo em \Windows tinha a opção de renomear. Nem mesmo o arquivo CreateAssetFile permitia ser renomeado, mas após ser copiado para outro local ele deixava-se renomear. Finalmente tive a idéia de renomer o CreateAssetFile para um nome que não existisse em \Windows e copiá-lo para lá, após copiá-lo verifico que a opção renomear está disponível, renomeio para BTTrayCE, para minha surpresa nem a tela perguntando seu eu gostaria de substituir apareceu.

Reinicio o PDA e confirmo que o ícone do Bluetooth sumiu da tray icon.

Conclusão: eu poderia ter procurado na internet uma forma de exibir os arquivos ocultos do sistema e de desbloquear a proteção contra deletar os arquivos do sistema (se é que isso é possível), mas como eu estava em casa sem acesso a internet tive que fazer da maneira mais difícil, mas nada substitui aquela sensação de ter conseguido. Não sei se esta falha ainda existe nas versões mais novas do WinCE (Windows Mobile), é uma falha tão trivial que parece inaceitável que tenha passado despercebida pela equipe de testes da MS, provavelmente ela está presente desde as primeiras versões deste sistema.

Controle de brilho da tela

Recompilei o kernel do meu notebook há umas 3 semanas, não, não tinha nenhum problema com o kernel padrão do Ubuntu, apenas gosto de compilar meu próprio kernel e otimizar algumas coisas para deixá-lo mais rápido.

Por exemplo, eu não gosto de utilizar initrd (initramfs), ele é bom para criar um sistema genérico que funcione em qualquer computador, mas se você conhece seu hardware pode configurar o kernel para que ele inicie mais rápido. E acredite mesmo colocando algumas coisas como nativamente incorporadas o tamanho final fica melhor que o kernel padrão.

( O segredo é incorporar no kernel (built-in) apenas o que você precisa para inicializar o seu computador. Lembre-se: você precisa do suporte ao controlador do seu HD (SATA ou ATA), suporte ao sistema de arquivo usado na sua partição linux (ext2, ext3, xfs, reisefs ou outro), suporte a executáveis ELF (para que o kernel possa executar o programa init), suporte ao procfs e só! O resto pode ficar como módulo. Para saber qual é o seu controlador do HD basta olhar no lspci, para saber qual é o sistema de arquivo da sua partição linux basta executar o comando mount e olhar o fs do / )

Quase tudo funcinou perfeitamente, as únicas exceções foram: placa wireless (kernel ainda não suporta a bcm4328 nativamente), a webcam (driver uvcvideo não foi incluído no kernel, contactei meu amigo Mauro Carvalho e ele disse que agora o autor do driver concordou em adicionar ao kernel mainstream) e o controle de brilho do tela.

Eu já sabia que a placa wireless e a webcam não funcionariam direto, que eu teria que baixar drivers externos, mas o controle de brilho da tela me deixou maluco. Comentando com meu amigo Douglas, que tem um equipamento parecido, ele me disse que apenas executa um “modprobe video” para o controle de brilho da tela funcionar. Achei estranho, então procurei no kernel e realmente em drivers/acpi/ existia o tal video.c e que este era ativado pelo símbolo ACPI_VIDEO.

Porém na configuração do kernel não exibia o Video em ACPI, a pesquisa pelo símbolo ACPI_VIDEO me mostrou que este dependia de outros símbolos, entre eles BACKLIGHT_CLASS_DEVICE e VIDEO_OUTPUT_CONTROL. Problema resolvido, agora é torcer para que o Mauro inclua o driver do webcam nas próximas versões do kernel e que o time que faz a engenharia reversa do driver da Broadcom consiga algum progresso para que a gente não fique dependendo do ndiswrapper.