Home

MAC0470 - Desenvolvimento de Software Livre

View All Sobre mim Disciplinas Iniciação Científica Projetos

Tutoriais Base

Abaixo estão os guias e documentações que acompanhamos para configurar o ambiente e realizar as primeiras modificações.

Minha Experiência com os Tutoriais

Os problemas que tive foram bem pontuais: esquecer de definir uma variável, usar a imagem errada, enfrentar dificuldades com permissões ou lidar com a desconfiguração do IP do SSH.


1ª Contribuição para o Kernel do Linux

Escolha do Patch e Refatoração

Eu e a Bianca trabalhamos em uma contribuição para o subsistema IIO (Industrial I/O). Escolhemos eliminar uma duplicação de código no driver do sensor MMC35240. O problema envolvia duas funções com lógica quase idêntica: mmc35240_is_writeable_reg e mmc35240_is_volatile_reg, que tratavam dos registradores CTRL0 e CTRL1, mas com retornos opostos.

Para resolver, criamos uma função auxiliar que centraliza a verificação e simplificamos ambas as funções originais, invertendo o retorno quando necessário.

Teste, Commit e Envio

Validamos a contribuição habilitando o driver, forçando um erro de compilação inserindo código quebrado, removendo e recompilando com sucesso. Fizemos o commit detalhado e validamos o estilo com o comando:

git format-patch -1 --stdout | ./scripts/checkpatch.pl

O envio via kw foi prático, mas precisamos trocar o email institucional da USP pelo Gmail pessoal por questões de autenticação SMTP.

O Código da Contribuição (v1)

+static bool mmc35240_reg_check(unsigned int reg)
+{
+       return reg == MMC35240_REG_CTRL0 || reg == MMC35240_REG_CTRL1;
+}
+
static bool mmc35240_is_writeable_reg(struct device *dev, unsigned int reg)
{
-       switch (reg) {
-       case MMC35240_REG_CTRL0:
-       case MMC35240_REG_CTRL1:
-               return true;
-       default:
-               return false;
-       }
+       return mmc35240_reg_check(reg);
}

static bool mmc35240_is_volatile_reg(struct device *dev, unsigned int reg)
{
-       switch (reg) {
-       case MMC35240_REG_CTRL0:
-       case MMC35240_REG_CTRL1:
-               return false;
-       default:
-               return true;
-       }
+       return !mmc35240_reg_check(reg);
}

Feedback e Ajustes

Recebemos feedback do Jonathan Cameron sugerindo retirar a função auxiliar e usar diretamente a estrutura lógica original na função de escrita, fazendo a função de volatilidade simplesmente retornar o inverso. Tentamos aplicar na v2, mas esbarramos no limite de colunas permitido em um commit e em problemas com espaços em vez de tabs apontados pelo checkpatch. O mantenedor Marcelo Schimitt sugeriu futuramente o uso de FIELD_PREP e FIELD_GET.

-static bool mmc35240_reg_check(unsigned int reg)
-{
-       return reg == MMC35240_REG_CTRL0 || reg == MMC35240_REG_CTRL1;
-}
static bool mmc35240_is_writeable_reg(struct device *dev, unsigned int reg)
{
-       return mmc35240_reg_check(reg);
+       switch (reg) {
+               case MMC35240_REG_CTRL0:
+               case MMC35240_REG_CTRL1:
+                       return true;
+               default:
+               return false;
+       }
}
static bool mmc35240_is_volatile_reg(struct device *dev, unsigned int reg)
{
-       return !mmc35240_reg_check(reg);
+       return !mmc35240_is_writeable_reg(dev, reg);
}

Contribuindo com Kworkflow (kw)

1ª Contribuição: Clareza nas mensagens do ambiente

Nossa primeira issue envolvia ajustar uma mensagem de warning que causava confusão ao criar o ambiente de desenvolvimento. O Rodrigo Siqueira sugeriu acrescentar uma segunda mensagem explicativa.

- warning "You don't have a config file, get it from default paths"
+ say "Environment was created without a kernel .config file. Use kw env --use ${env_name} to switch to the new env."
+ warning "The new env does not have a default .config; you must provide it for a correct kernel compilation. It is recommended to use kw kernel-config-manager."

2ª Contribuição: Desacoplando variáveis do deploy

Movemos variáveis de configuração que estavam fixas no script de deploy para um arquivo próprio (deploy.config). O desafio foi adaptar os testes (deploy_test.sh), identificando que o teste usava um ambiente isolado e precisava das variáveis exportadas explicitamente. Aprendemos bastante sobre Bash, conexão de escopos de variáveis e também como unificar commits (squash) a pedido dos mantenedores.

3ª Contribuição: Refatoração de acessos SSH

Movemos a função que configurava a chave SSH dos usuários (antes no deploy) para o arquivo remote.sh, que é o local correto para gerenciar acesso remoto. Ajustamos os testes correspondentes, um processo que se mostrou muito mais fluido após o aprendizado da contribuição anterior.


Pacotes Debian

A configuração da VM para empacotamento foi tranquila. A contribuição em si foi simples, facilitada por uma curadoria prévia de pacotes. O fluxo de manutenção não é absurdamente difícil e a comunidade se mostrou extremamente acessível — com mantenedores dedicando tardes inteiras para nos acompanhar no processo.