Ao trabalhar com uma base de código fonte tão grande quanto o kernel, certamente é de grande valia ter ferramentas que ajudem a entender como as peças se encaixam. Essa página tem como objetivo fornecer indicações para as ferramentas mais comumente utilizadas para tornar as suas primeiras incursões nas terras do kernel tão produtivas quanto possível.
Talvez a ferramenta mais importante é um bom editor de texto. As escolhas mais populares emacs e qualquer clone do vi, vim são as opções mais amplamente utilizadas atualmente. Geralmente, os editores de texto escritos para programadores são programáveis e tem características tais como colorização de sintaxe, ocultação de texto, casamento de chaves, e integração fácil com ferramentas de gerenciamento de código fonte, tais como make(1), cvs(1), reformatação de texto, pesquisa em páginas de manual, e mais.
Uma vez que você tenha escolhido um editor particular, você irá precisar fazer o download da árvore de desenvolvimento (source tree) do kernel com a qual vc quer trabalhar. Existem diferentes possibilidades à disposição.
Gerenciamento do código fonte do Kernel com o git
Se você quiser obter a última versão do código fonte do kernel, você irá precisar do git. Você pode obtê-lo aqui.
Existem ótimos Guia para o GIT em inglês (aguarde, em breve versões em portugues):
Arquivos tar com o Kernel
A maneira alternativa, mais "clássica", para fazer o download da árvore do kernel é baixar um arquivo compactado diretamente do site http://kernel.org.
Agora você está pronto para editar o código fonte do kernel ou simplesmente navegar nele para aprender. Aonde começar? Uma vez que você comece a ler o código fonte você vai precisar várias vezes procurar a declaração ou definição dessa ou daquela estrutura de dados, macro ou função em particular. A opção mais básica é fazer isso usando uma combinação dos comandos `grep` (ou `egrep`) e
`find`;
find . -exec grep --with-filename minhafuncao '{}' \;
Uma outra maneira é:
find . -name '*.[chS]' | xargs egrep -n "minhaexpressaoregular";
Se você tiver o GNU grep (como virtualmente todas as distribuições de Linux tem) então você pode tirar vantagem da flag "recursiva":
egrep -r --include "*.[chS]" "minhaexpressaoregular" .
Acrescente "-w" à linha de comando para evitar pegar palavras nas quais sua busca seja uma substring.
O comando acima procura no diretório corrente [e em todos os subdiretórios] por arquivos que terminem em .c, .h ou .S, e executa o egrem em cada um deles procurando pelo padrão "minhaexpressaoregular". Você pode substituir "minhaexpressaoregular" por expressões regulares mais complexas ;).
A maneira mais utilizada de navegar no código do linux envolve utilizar o
ctags. Dentro da árvore do kernel execute:
make tags
Para os usuários do vim, após executar o comando acima, basta executar:
:set tags=/usr/src/linux/tags
Após especificar qual o arquivo de tags, no vim basta colocar o cursor sobre a
palavra/símbolo e pressionar Ctrl + ] para ir até a definição
e Ctrl + t para voltar ao ponto original.
Para ir diretamente para uma tag digite:
vim -t tag
:tag tag
Para mostrar as definições semelhantes digite no modo de comando
:ts
Para usuários do emacs, após executar o comando (note a caixa alta no nome TAGS)
make TAGS
M-x visit-tags-table
Para ir para uma definição dentro do emacs, mova o cursor até a palavra e digite:
M-.
C-u M-.
M-*
M-x tags-apropos
Ferramentas de Indexação para Navegação na Internet
Enquanto essa abordagem funciona, outras ferramentas permitem que você indexe toda a árvore do kernel para facilitar a navegação no código fonte. Isso facilita muito na hora de encontrar a localização das coisas no código e permite que você encontre rapidamente as declarações/definições de estruturas de dados desconhecidas.
Alguns sites pagam suas "obrigações" ao arquivar árvores do kernel indexadas:
Utilitários para Navegação
Eventualmente, você irá querer incorporar tais capacidades de navegação em seu editor favorito;
Ferramentas alternativas incluem: freescope, etags, e idutils que criam bancos de dados a serem usados ao pesquisar-se por símbolos C. Cada uma delas tem suas idiosincrasias e características. Algumas se integram melhor com seu editor de texto. (Procure especialmente por plugins para ajudar com a integração.) cgvg é uma outra opção, embora ele aparentemente não use um banco de dados para aumentar a velocidade nas buscas.
Navegue no conjunto de modificações aplicadas ao kernel: [N.T. Links para as árvores Git]
Comentários
Ferramentas de Trabalho no
The Borderlands series is one of the best in the lot of action gaming. Now the third installment of the series is about to release with the addition of two new varieties of items including the laser gun and I am waiting for this game to release to check it out myself. Hope it lives up to our expectations.You can check out Borderlands 3 release date
Great Article
Kernel files present in the system folder of a computer should not be deleted in any way as it contains all the credentials of a system. The best way to safe these files is to keep them password protected.
global
Um outro que eu uso bastante é o Gnu Global. Já faz um tempo que fiz um pequeno tutorial de como usá-lo: http://stoa.usp.br/demarchi/weblog/23602.html
Na época ainda não usava o htags, que gera o código-fonte em páginas HTML a partir do arquivo gerado pelo global, nem a integração com o vim (ou alguma outra ide), então quem quiser alguma coisa mais completa, o manual dele pode ser encontrado aqui: http://www.gnu.org/software/global/manual/global.html
grep no código fonte
Em substituição aos truques com find e grep, você pode usar o ack: http://petdance.com/ack/
É excelente para procurar texto em árvores de código fonte. Depois que descobri ele, aposentei meus aliases e scripts que usava pra isso (e nunca eram completos o suficiente). 8)
--
Eduardo