Cross Compilation, ou compilações entre e para diferentes arquitecturas, é quando um compilador produz um executável para correr num sistema com uma plataforma ou arquitectura diferente daquela presente no computador onde foi compilado. Um exemplo prático.
Exemplo de vida real
Geralmente é muito útil testar as compilações do kernel sem ter que o instalar num disco rígido e reiniciar o computador para iniciar com esse novo kernel que foi compilado. Arrancar o computador através de um kernel localizado num computador remoto (servidor), é algo que acho muito útil.
Quem disse que o Linux não trava ?? Que atire a primeira pedra quem nunca viu ao menos um kernel panic na tela ? Pois bem, quando um erro grave ocorre no sistema, entre outras coisas que o kernel faz uma delas é exibir no terminal e/ou sistema de log, uma mensagem bastante conhecida por quem já passou por isso, a famosa mensagem de Oops. Trata-se de um dump do estado do CPU e da pillha do Kernel no momento em que o problema ocorreu. A mensagem de Oops mais conhecida é a que vem acompanhada de um kernel panic.
Essa é uma pergunta comum feita por newbies é "Eu acabei de desempacotar esse tarball enorme, e gostaria de ajudar, mas eu não sei por onde começar!".
Deparar com uma quantidade enorme de código fonte, pode parecer assustador mas saiba que pouquíssimos desenvolvedores entendem todas as áreas do fonte do kernel.
As pessoas se especializam. Se você se interessa por TCP/IP, não precisará ler os fontes sobre sistemas de arquivo. Entenda em que você quer trabalhar e foque-se nisso.
Árvores normalmente são coleções de patches que geralmente são focadas em atender uma necessidade ou interesse particular. Elas ajudam o processo de desenvolvimento do kernel provendo 'lugares' para que trabalhos sejam desenvolvidos, e eventualmente seja promovido de árvore para árvore, caminhando para uma eventual inclusão na linha principal.
static inline struct task_struct * get_current(void) { struct task_struct *current; __asm__("andl %%esp,%0; ":"=r" (current) : "0" (~8191UL)); return current; }
get_current() é uma rotina para conceder acesso para a estrutura task_struct da tarefa que está atualmente em execução.
Ele usa frequentemente assembly inline características do GCC, para realizar esta tarefa, conforme a seguir:
__asm__(
A comunidade kernelnewbies-br volta a suas atividades e com grande prazer realizando uma série de entrevistas com kernel hackers brasileiros, envolvidos com projetos interessantes e que tem muito a nos ensinar. Nesta primeira entrevista com Eduardo Habkost pudemos falar um pouco sobre virtualização, KVM, detalhes e desafios no desenvolvimento de uma plataforma de virtualização.
O quilt é uma ferramenta para gerenciamento de pilhas de patches; é muito usado por desenvolvedores do kernel para manter e gerar patches para serem enviados.
Tem as seguintes vantagens:
A referência principal dele é esse How to suvive with many patches
Git é um sistema de controle de versões focado em velocidade, escalabilidade e usabilidade para projetos grandes. Além disto, o git oferece um conjunto de pequenos comandos que facilitam o gerenciamento do projeto. Escrito em C e desenvolvido pessoalmente por Linus Torvalds.
Para instalar o aplicativo você pode baixar os fontes neste link, e seguir os passos do arquivo INSTALL que acompanha o software.
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.