Obs inicial: Esse relato faz parte da disciplina de Software Livre ministrada pelo Professor Paulo Meirelles dada no IME - USP. Alguns comentários são referentes a prazos que a própria disciplina delimita.

Finalmente chegamos na nossa contribuição para o kernel, depois de fazer várias configurações e decidir utilizar o iio (em primeiro momento).

Por volta da primeira semana de abril Eu e minha dupla começamos a passar pelo pad de contribuição e vimos algumas contribuições bem tranquilas. Nosso primeiro contato foi com o ajuste de algumas funções em alguma parte do modulo. Rodamos git grep <o nome da função> que queriamos modificar e acabamos encontrando algumas coisas que poderiam ser modificadas, entramos em contato com o monitor e ele nos orientou a continuar explorando e esperar pela proxima aula para acompanharmos a questão do envio do patch.

Esperado a aula, minha dupla pode comparecer a disciplina e eu estava em um evento, nesse sentido após a aula me reuni com minha dupla para receber orientações de próximo passo e foi decidido que iriamos fazer alterações agora em outra parte do kernel… agora sendo o drm o nosso foco.

Nesse momento entramos de férias (voltei para minha cidade natal e deixei minha maquina com linux ligada para acessar remotamente), tentei iniciar a contribuição, mas de primeiro eu não consegui acessar o pad, então entrei em contato com o monitor que me ajudou enviando o pdf do pad. A partir desse ponto eu consegui iniciar algumas coisas a respeito de clonar a nova ramificação, fazer a procura dos arquivos necessários para a modificação do problema que meu amigo tinha escolhido que no caso era Code Refactor: Add prefix to DC functions to improve the debug with ftrace.


Vamos começar a contribuição

Depois de preparar o ambiente para agora sim contribuir na ramificação certa, no caso o drm, eu consegui fazer um git grep dcn que foi uma das indicações dos monitores para alteração.

Apareceu bastante resultado e acabei indo no olho para ver qual funcionava melhor, fui passando por vários arquivos e encontrei dois que poderiam funcionar:

> drivers/gpu/drm/amd/display/dc/dcn31/dcn31_apg.c
> drivers/gpu/drm/amd/display/dc/dccg/dcn20/dcn20_dccg.c

Confirmei com o eu amigo sobre a minha hipotese e disse para a gente ir tentando cada um em um para a gente infrentar a barreiras e ir falando para o outro a cada passo…

Obs blackout: Como eu estava remoto eu estava com medo de meu computador desligar, então o dia chegou, no meio da minha visita a minha família eu fiquei off ao meu progresso, mas já tinha dado passos bem interessantes.

Quando voltei a São Paulo, retomei o desenvolvimento e percebi um erro que não tinha notado, o drm não estava buildando, falei com o monitor e ele me disse que isso era problema com a arquitetura da vm, que no caso estava como arm64, fiz a modificação das configs para rodar em x86_64 rodando:

> kw init --template
> make ARCH=x86_64 allnoconfig 

Após isso, consegui buildar o drm tranquilamente e comecei as modificações do arquivo dcn31_apg, mudei então a função construct que era a função que estava com o nome faltando informação para o ftrace, a função estava com a declaração como apg31_construct e foi modificada para dcn31_apg_construct. modifiquei no .c e no .h como vi em um exemplo que o monitor compartilhou.

Então após as modificações eu habilitei todas as dependencias e modulos para que eu conseguisse testar minhas alterações, modifiquei pelo kw com o comando kw build --menu. Nesse momento eu fiz a busca pelo F8 e procurei pelo DRM_AMD_DC, config que minha alteração fazia parte, descobri que essa config apenas caminha pelo path de onde minha alteração estava até encontrar um arquivo Kconfig, ou seja:

$ cd drivers/gpu/drm/amd/display/dc/dcn31
drivers/gpu/drm/amd/display/dc/dcn31/ $ cd ..
drivers/gpu/drm/amd/display/dc/ $ ls                # não encontrei Kconfig, repete cd .. até encontrar

Após habilitado, rodei o build e pela minha surpresa e felicidade deu erro ⭐ , significa que o modulo foi habilitado e que agora eu tinha algumas coisas para ajustar, então segue o passo a passo do que aconteceu:

Erro nos arquivos que dependem da função alterada git grep para buscar arquivos que preciso modificar Resultado das alterações
Image Image Image

Então após fazer as correções eu fiz o:

> git add .
> git commit                       # escrevi a mensagem detalhada

Após refazer a mensagem de commit várias vezes até ficar satisfeito eu rodei o comando para enviar o email:

> kw send-patch --send -1 --simulate --private --to=freesoftware2025@gmail.com

🎉 AEEE tudo certo ~Infelizmente não~

Eu tinha deixado o --simulateno comando e não tinha percebido que na verdade eu não tinha enviado e apenas simulado o envio, então eu finalmente removi esse flag fiz as configurações do smtp que precisava e do meu email google (com a ajuda do monitor) e finalmente consegui enviar com o comando:

> kw send-patch --send -1 --private --to=freesoftware2025@gmail.com --cc=leonardodasigomes@gmail.com

Comentários

Foi muito tranquilo a contribuição em si, o que deu mais problema foi a questão de modificação e mudanças de rotas ocorridas nesse processo que ocasionou em mais configurações de ambiente. Além disso houve um atraso por parte da indisponibilidade da minha maquina remota por algum tempo, mas nada que não fosse resolvido um tempinho depois.