sexta-feira, 2 de julho de 2010

Jerry Peek's Articles

http://www.jpeek.com/articles/

quinta-feira, 24 de junho de 2010

module-init-tools-3.2 - Utilities for manipulating kernel modules

The module-init-tools from kernel.org: modprobe, insmod, rmmod and lsmod. We have chosen to use these because we can compile modutils/modprobe to support compressed (.gz) modules to save space. To do this we use the option --enable-zlib, we then clean and copy the binaries. We do not take everything that has been created, only what we need: depmod, insmod, modinfo, modprobe and rmmod in /sbin and lsmod in /bin:

 # cd ..
 # wget http://ftp.kernel.org/pub/linux/utils/kernel/module-init-tools/module-init-tools-3.2.tar.bz2
 # tar xjf module-init-tools-3.2.tar.bz2
 # cd module-init-tools-3.2
 # ./configure --enable-zlib --prefix=/usr --sbindir=/sbin --bindir=/bin \
   --sysconfdir=/etc --infodir=/usr/share/info --mandir=/usr/share/man
 # make
 # make DESTDIR=$PWD/_pkg install
 # strip -v _pkg/sbin/{depmod,insmod,modinfo,modprobe,rmmod}
 # strip -v _pkg/bin/lsmod
 # cp -i _pkg/sbin/{depmod,insmod,modinfo,modprobe,rmmod} $fs/sbin
 # cp -i _pkg/bin/lsmod $fs/bin
 # cd ..


Copy kernel modules

Copy files from linux-2.6.20/_pkg:

 # cp -a linux-2.6.20/_pkg/lib/* $fs/lib

Compress kernel modules

Compress modules, this step will gain us back around 50% of available space. We begin by moving into the rootfs, then we search for all files with the .ko extension, and compress them. 

 # cd lib/modules/2.6.20-slitaz
 # find . -name "*.ko" -exec gzip '{}' \;
 # sed 's/\.ko/.ko.gz/g' modules.dep > tmp.dep
 # rm modules.dep
 # mv tmp.dep modules.dep

Compilar o FUSE

Estou a construir um Linux de raíz. Estou a usar o manual do Slitaz (poder ver em: http://www.slitaz.org/en/doc/scratchbook/index.html) e entretanto comecei a divergir em determinada parte, porque não quero uma “cópia” do Slitaz mas sim o meu próprio linux.

Mais lá para a frente vou disponibilizar o meu script de construção do meu linux, que batizei com o MiniTux, para vocês poderem também aprender um pouco.

Mas o propósito deste meu post não é falar para já do MiniTux, mas sim de uma questão que me atrasou o projecto e que se prende com a possibilidade de leitura e escrita em discos e particções formatadas em NTFS. A leitura é fácil (fica disponível pelo próprio Kernel), mas a escrita só é possível recorrendo ao NTFS-3G. Mas este pacote depende do FUSE, e este sim deu-me cabo da cabeça.

Eu estou a utilizar o SLAX para compilar e construir o MiniTux, e quando eu compilava o FUSE ele configurava-se para o Kernel do Slax em vez do Kernel que estava a utilizar no Minitux…resultado…quando tentava montar uma partição NTFS no MiniTux dava erro.

Depois de muita pequisa finalmente consegui descobrir como compilar o FUSE para o Kernel diferente do que está a ser utilizado no SLAX (host&build machine). Óbviamente que o Kernel tem de já estar compilado no computador Host que está a ser utilizado para compilar.

Para aqueles que se deparem com o mesmo problema, a seguir indico a receita de compilação do FUSE:

./configure --prefix=/usr --infodir=/usr/shre/info --with-kernel=/home/luis/mtsrcpkg/linux-2.6.31.6 --mandir=/usr/share/man $CONFIGURE_ARGS

make

make DESTDIR=$PWD/_pkg install

Neste caso eu tinha compilado o kernel na pasta /home/luis/mtsrcpkg/linux-2.6.31.6, por isso tive que utilizar a opção –with-kernel=(……).

Depois de compilar o FUSE, basta entrar dentro da pasta _pkg do FUSE para ir buscar o FUSE e copiar para o meu MiniTux.


NOTA: a opção –with-kernel parece só funcionar para a versão 2.7.4 do FUSE.


Abraços e até já.

Reduzir o tamanho do /bin e /lib

Só para não me esquecer de como se faz o STRIP de ficheiros binários e libs em Linux:

strip -s $fs/sbin/*
strip -s $fs/usr/bin/*
strip –strip-unneeded $fs/usr/lib/*.so*

“watch” what gets installed by using find

Esta é uma dica muito útil que poderá ser utilizada em muitas situações.
Serve para controlarmos as alterações/ficheiros no nosso sistema, através da análise do “antes” e “depois”.

Aqui vai:
2) make
3) find / > /root/pre-program
4) make install
5) find / > /root/post-program
6) diff pre-program post-program > install-program
7) nano install-program (and remove things like the /proc entries)

Assim passamos a ter uma lista de tudo que foi instalado durante o “make install”.

É uma questão de utilizarmos esta lista em conjunto com um script para podermos até criar um pacote de um programa.

Linux, soluções simples para grandes problemas.

Comando TREE para Linux

Quick, what does the following Unix/Linux command do?
ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'
If you said, “Well, that’s obvious; it shows a graphical representation of the current sub-directories.“, you’d be correct.
Here’s the command ready-to-go in a shell script: tree.sh

Encontrar o ficheiro .ko do módulo

Quando executamos o comando lsmod, obtemos uma lista de todos os módulos de kernel que estão carregados (se eles dependerem de outros módulos, está indicado os nomes no final de cada linha do módulo).

Para refinar a pesquisa, podemos utilizar o comando:

lsmod | grep r8187

e mostra-nos se o módulo r8187 está carregado.

Se executamos o comando:

modprobe -l | grep r8187

ele vai-nos mostrar a pasta onde está o ficheiro .ko respeitante ao módulo:

/lib/modules/2.6.20.15-generic/kernal/drivers/net/wireless/rtl8187/r8187.ko

Às vezes também dá jeito recorrer ao comando “lspci” para conseguirmos encontrar alguma identificação do nome que nos possa levar ao módulo que andamos à procura. Mas se utilizarmos o parametro  -k  esta tarefa ainda se mostra mais fácil, pois este parametro quando utilizado com o comando “lspci” mostra-nos o nome do módulo:

lspci -k

Espero que estas dicas vos ajudem.