Archive for 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

Add comment January 30, 2008

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

Add comment January 27, 2008

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:
acreção – processo pelo qual algo aumenta gradualmente de tamanho através do acréscimo de partes menores
apoplexia – golpe violento, algo que provoca morte instantânea
arrefecer – esfriar, tornar-se frio, moderar o zelo, o entusiamos

C:
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
coruscante – reluzente, cintilante, faiscante

D:
demover – fazer renunciar, dissuadir, abalar
digressão – passeio, excursão

E:
elucubrações – compor, realizar à força de ligílias
engodo – ísca, atrativo, chamariz, lisonja, adular

F:
fleuma – humor, paciência

G:
ginetes – peão, cavaleiro, cavalo pequeno e ligeiro

L:
litania – ladainha
lúgubres – escuro, medonho

N:
nevrálgico – o ponte perigo ou delicado de uma questão

O:
oblação – oferenda, oferta a Deus
ocaso – pôr do sol, ocidente, poente, declínio, ruína, cadente

P:
peremptório – decisivo, terminante, categórico, que perime
pierrô – personagem da comédia italiana, Pierrô Apaixonado – marchinha de Noel Rosa
potentado – soberano de um estado poderoso, pessoa influente, podera ou rica

R:
ribalta – série de luzes à frente do palco, entre o pano de boca e o lugar da orquestra.

S:
solaparia – escavar, arruinar, encobrir

T:
tépido – com pouco calor, morno, frouxo
tudesco – alemão, germano, língua dos antigos Germanos

V:
vénia – licença, permissão, absolvição
vernáculo – linguagem correta, idioma proprio do pais, genuino

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

Add comment January 27, 2008

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.

Add comment January 25, 2008

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/

Add comment January 25, 2008

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

2 comments January 24, 2008

Instalando modem do notebook dv6449us no Linux

HDAUDIO Soft Data Modem with SmartCP

http://www.linuxant.com/drivers/hsf/downloads-license.php

A linuxant fornece drivers para os modem funcionarem no Linux, porem o driver só funciona em 14 kbps (licença livre), para funcionar em 56 kpbs tem que pagar uma licença.

Eu detesto isso, mas pelo menos eles liberam alguma funcionalidade.

Add comment January 16, 2008

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.

Add comment January 16, 2008

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 :-D

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.

3 comments January 14, 2008

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.

Add comment January 13, 2008

Previous Posts


CALENDÁRIO

January 2008
M T W T F S S
« Dec   Feb »
 123456
78910111213
14151617181920
21222324252627
28293031  

c

ARQUIVOS:

RECURSOS

Blogroll

NOVOS COMENTÁRIOS:

RSS BR-Linux.org:

RSS Tchelinux

NÚMERO DE ACESSOS:

AUTORES