July 30th, 2009
Mais um post programador-geek-útil: bit-fields. Para quem não conhece, em C pode-se criar coisas “bizarras” do tipo estruturas com campos de tamanho 1, 2 ou n bits. Sim, eu não me enganei. É isso mesmo o que tu entendeu. Em C podemos criar estruturas com campos de apenas 1 bit, por exemplo. Aliás, por sinal, tu pode até mesmo criar uma estrutura com apenas 1 bit.
“Mas como isso?” tu te pergunta. É mais fácil do que parece. Basta declarar a estrutura e, para cada campo, dizer quantos bits tu quer. Simples assim:
struct byte_t {
unsigned char high: 4;
unsigned char low: 4;
};
Neste caso, estamos declarando uma estrutura com dois campos, cada um com 4 bits. Viram como é simples? Neste caso, nossa estrutura terá o tamanho de 8 bits, 1 byte no final das contas. Mas nada me impede de declará-la assim:
struct bit_t {
unsigned char val: 1;
};
Agora temos uma estrutura de apenas 1 bit de tamanho! Faça o teste: tente colocar algo mais do que 0 ou 1 no campo val da estrutura para ver se o GCC não reclama com um warning!
Algo que preciso lembrar é que o comando sizeof() não irá funcionar para a estrutura bit_t. Porque? Ora, é óbvio. A função sizeof() retorna seus valores em bytes e não em bits. Já para a estrutura byte_t, nós conseguimos executar o sizeof(), já que seu tamanho é de exatamente 1 byte.
Update: como comentado pelo meu amigo Fabio Utzig, o tamanho das estruturas em si serão arredondadas para a representação. Por exemplo, caso eu adicione mais um campo na estrutura byte_t, mesmo que seja de um bit apenas, o tamanho total da estrutura será 2 bytes, pois ele arredonda o tamanho. Os campos em si que sempre terão o tamanho em bits especificado.
Posted in Programação | 3 Comments »
May 31st, 2009
Neste semestre, estou fazendo a cadeira de Projeto de Sistemas Operacionais na faculdade. Por opção, resolvi (em conjunto com alguns colegas) usar o Minix 3 como sistema operacional de estudos. Instalei ele, feliz da vida, numa máquina virtual do VirtualBox. O problema é que a rede não queria de jeito nenhum funcionar! A princípio deveria funcionar, escolhi o driver certo na instalação (AMD Lance, emulado pelo VMWare e pelo VirrtualBox), mas não funcionava. Depois de muito pesquisar, consegui fazer funcionar. Aqui vão as dicas!
Depois de completada a instalação do Minix 3, reinicie o sistema (não esqueça de botar no VirtualBox para ele não montar o cdrom do Minix3) e execute primeiramente estes passos:
- Com o sistema reiniciado, coloque a imagem do CD do Minix 3 de volta.
- Como root, execute “packman”.
- Procura o número do vim, para instalá-lo do CD… ;-P
- Cuidado para não deixar ele tentar atualizar a lista de arquivos da internet (o que tu não tem ainda… hehehehe…)
Estes foram somente os passos para instalar o vim… hehehehe… Os passos que segui para fazer a rede funcionar no Minix 3 foram estes:
- Edite o arquivo “/usr/etc/rc” (com o vim).
- Vá para a linha 82; ela diz “Starting services:”. Vá para a próxima linha; ela começa com “up random”.
- Aperte “v” (para entrar em modo visual) e vá selecionando até o primeiro “fi” que tu encontrar.
- Recorte estas linhas.
- Agora, vá até a linha que diz “up inet”.
- Cole as linhas que tu copiaste logo em cima desta linha.
- Vá para baixo, até onde diz “intr -t 20 hostaddr -h” (use o “/” do vim).
- Mude o “20″ para “30″
Esta é a primeira parte da solução… hehehehe… Agora vamos para o kernel…
- Dá um cd /usr/src/drivers/lance
- vim lance.c
- A partir da linha 632, edite da forma como segue.
- Comente as seguintes linhas:
if (ec->ec_linmem != 0)
{
assert( 0 );
/*phys2seg(&ec->ec_memseg, &ec->ec_memoff, ec->ec_linmem);*/
}
/* XXX */ if (ec->ec_linmem == 0) ec->ec_linmem= 0xFFFF0000;
- E adicione a seguinte linha:
ec->ec_linmem= 0xFFFF0000;
- Salve o arquivo e saia do vim.
- Vá até a pasta /usr/src/ e execute o seguinte comando:
# make world
- Vai demorar uns 15 ou 20 minutos, aproveite para tomar um cafézinho…
- Reinicie o Minix 3 (não esqueça de desmontar a imagem do cdrom do VirtualBox…).
- Depois de reiniciado, dê um ps ax | grep lance.
- Com o PID do driver de rede (provavelmente, será 55), nós vamos nos aproveitar do Reincarnation Server do Minix 3 e matar o processo do driver de rede. Sim, isso mesmo:
# kill -9 55
- O RS vai verificar a morte do processo driver e reiniciá-lo, agora sim a rede vai estar funcionando 100%.
O único problema é que toda a vez que reiniciarmos o sistema teremos que executar o comando kill. Mas, por mim, tá tudo bem.
Posted in Programação, Sistemas Operacionais | No Comments »
May 17th, 2009
É… Quero dizer… Hmmm… Digamos meia boca… Como prometi há algum tempo atrás (bota tempo atrás), estou disponibilizando aqui um meio fácil de “botar para funcionar” o Tibia com o Wine. Só os resultados deixaram a desejar um tanto… =/ O melhor DirectX que ele conseguiu compatibilidade foi o 5, portanto os gráficos ficaram bem ruinzinhos e sem opções de “sombra”. O que deve ser feito para o Tibia funcionar com o Wine é alterar os registros dele. Como se fosse um Windows mesmo, o Wine tem seu regedit. Para acessá-lo, basta executar o seguinte comando no terminal:
$ regedit
Isto irá abrir, com o Wine, uma janela como a qual já devemos conhecer do Windows (pelo menos aqueles que gostam de brincar com o editor de registros… =P). Com a janela aberta, expandimos o HKEY_CURRENT_USER->Software->Wine->Direct3D. Dentro desta pasta devemos modificar o seguinte registro: DirectDrawRenderer. O valor dela deverá ser alterado para “gdi” (sem as aspas, é claro). Para alterar o valor do registro, basta clicar com o botão direito em cima do registro, clicar em modificar e alterar o campo “Dados do valor”. Caso não exista nenhum registro dentro de Direct3D, basta adicioná-lo, clicando no botão “Editar”, na barra de menu, selecionar “Novo->Valor Texto”. Altere o nome do registro para DirectDrawRenderer e, após isso clique com o botão direito em cima do registro recém criado, clique em Modificar e altere o valor do campo para “gdi”. Pronto. Na próxima vez que o Tibia for aberto com o Wine, tudo deverá funcionar corretamente.

Pelo Wine, conseguimos até apenas o DX5, o que faz percebermos grande perda de qualidade.
Posted in Linux, Nerd, Tibia | No Comments »
May 8th, 2009
Esses dias atrás (na real, já faz umas semanas), eu descobri que o Debian irá suportar o kernel FreeBSD. Achei muito bom, já que torna o Debian cada vez mais num SO realmente universal. Mas isso não implica que o Debian deixará de possuir o kernel Linux: apenas o usuário poderá escolher entre os dois kernels qual o melhor para o seu caso. Eu confesso que estou ansioso para testar esta nova opção do Debian. Para mais informações, dêem uma olhada no link abaixo.
http://lists.debian.org/debian-devel-announce/2009/04/msg00001.html
Neste mail da lista do Debian é dito que o kernel está disponível na versão instável do Debian, mas, dando um aptitude search kfreebsd no Squeeze (atual versão testing), percebe-se que os fontes já se encontram lá para serem baixados e compilados.
Posted in Sistemas Operacionais | 2 Comments »
March 28th, 2009
Há muito tempo atrás, eu vinha comentando que existia um problema com o kernel do Linux e minhas entradas USB. Pois bem, depois de algumas atualizações o problema voltou a ocorrer, mesmo para a versão 2.6.24. Não sei mais o que fazer. Minha expectativa é que algum dia isso seja corrigido, mas não sei quando. Enquanto isso, aquela máquina fica com o Windão rodando (bleh), mas que pelo menos não apresenta crises existencias com o USB. Claro, mantenho o Linux instalado lá e, periódicamente, tenho atualizado com a esperança de que o bug seja corrigido. Ainda tenho planos de corrigir por mim mesmo o bug, mas anda meio complicado, com todos os trabalhos da faculdade e o fato de que, depois de cai o USB, cai a rede…. Mas vamos ver.
Quem sabe, eu instale o Debian Sarge nele que, se não me engano, tem kernel 2.4, que funciona tranqüilo.
Posted in Linux | No Comments »
March 28th, 2009
Agora, com este novo blog, tenho os planos de postar mais. Em breve, colocarei aqui curiosidades, informações, dicas e bizarrices do mundo da computação. Ou do que “der na telha” mesmo… XD
Aguardem!
Posted in Geral | No Comments »
July 15th, 2008
Bem, ando meio desaparecido do blog, mas aqui volto com uma dica. É algo que agora a pouco passei e tive que me virar para resolver. No Debian, existe uma maneira fácil e rápida de se compilar o kernel: é o comando make-kpkg. A utilização dele é simples. Primeiro, executa-se o seguinte comando, na pasta onde se encontra o kernel:
# make menuconfig
Este comando abrirá uma interface colorida para configuração do kernel a ser compilado. Altere a seu gosto, mas com cuidado. Não vou entrar em detalhes sobre como configurar o kernel para sua máquina aqui pois não é este o objetivo do artigo, mas recomendo executar alguns lspci, e buscar informações na internet (leia-se Google
) caso tenha que configurar algo em especial. Em geral, o kernel já vem com uma configuração por padrão que atende a maioria dos casos. Sempre existe a possibilidade de se copiar o arquivo de configuração do kernel (na pasta /boot) atual para o arquivo .config dentro da pasta onde está o kernel, e se executar um make oldconfig, mas cuidado, pois alguns módulos podem mudar de nome de uma versão para outra e isso pode trazer problemas. Enfim, voltando ao contexto original, na tela de configuração do kernel, entre em “General Setup”, na opção “Local Version”, digite um nome para ser adicionado à versão do kernel. Saia da tela e execute o seguinte comando:
# make-kpkg –initrd linux-image
Este comando gerará na pasta /usr/src um arquivo .deb que pode ser instalado através do comando:
# dpkg -i <arquivo>.deb
Eu já tinha seguido esses passos a um tempo atrás para compilar o kernel 2.6.24 no meu Debian, mas hoje me deparei com um problema: eu queria modificar o valor que é adicionado à versão do kernel. Este problema pode ser resolvido apenas movendo a pasta debian de dentro da pasta do kernel que tu estás compilando para um outro nome ou outro lugar. Após isso, basta executar o make-kpkg e o dpkg -i normalmente que tudo deverá transcorrer tranqüilamente.
Posted in Linux | No Comments »
March 30th, 2008
Depois de uns tempos sem postar nada no blog, hoje eu venho com uma ótima notícia para aqueles que tiveram problemas como o meu. Num artigo que publiquei aqui no blog e no VOL (http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=6607), eu apresentei uma solução ao problema de IRQ #11 Disabled do kernel, para as entradas USB 1.1. Por algum motivo misterioso, o kernel desbilitava as interrupções de USB e meu teclado não funcionava corretamente. Enfim, não vou expor a história inteira aqui, já que pode ser lida no artigo.
A boa notícia é que a nova versão do kernel, a versão 2.6.24, corrige este problema! Nesta versão, os caras que mantém o kernel jogaram bastante coisa antiga fora e reescreveram boa parte do código. Agora, as portas USB 1.1 funcionam corretamente e o kernel não desbilita as interrupções, mantendo o teclado funcionando perfeitamente! Sinceramente, fizeram um ótimo trabalho no kernel 2.6.24, até o desempenho da máquina ficou melhor com relação às versões anteriores.
Posted in Linux | No Comments »
November 7th, 2007
Não é padrão do instalador netinst (CD reduzido com o sistema básico, baixa e instala o restante do software da internet) do Debian, mas existe a possibilidade de usar uma interface gráfica em GTK para fazer a instalação.
No momento do boot do CD netinst, o Debian pergunta sobre a forma de boot (podendo simplesmente apertar enter e entrar no instalador padrão), digita-se o texto installgui, pressiona-se enter e o instalador irá carregar uma interface gráfica bonitinha e até de certa forma intuitiva para a instalação.
Para se obter uma lista mais completa sobre as formas de boot do netinst, pressiona-se <F1> e, na lista de opções, escolha algo como “formas de boot do instalador” ou algo parecido.
Achei massa, apesar de preferir a interface de instalação padrão. Acredito que funcione também para o businesscard.
Posted in Instalação, Linux | No Comments »
October 26th, 2007
Orgulhoso de ser geek…. ^^
63% Geek
JustSayHi – Dating
Posted in Uncategorized | 1 Comment »