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
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
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:
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:
demover – fazer renunciar, dissuadir, abalar
digress√£o – passeio, excurs√£o
dole – comuna francesa

E:
ebó Рoferenda, despacho
efígie Рrosto ou vulto de uma pessoa numa moeda ou nota, retrato
elucubra√ß√Ķes – compor, realizar √† for√ßa de lig√≠lias
enação Рsaliência superficial dos vegetais (Bot.)
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
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
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

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:
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.)
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:
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
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.