Programação do sistema no Ubuntu

5

Eu gostaria de entrar na programação de sistemas do Ubuntu; para ser específico - desenvolvimento e depuração de drivers de dispositivos. No entanto, não tenho certeza sobre como começar, mesmo que tenha experiência anterior em contribuir para outros projetos de código aberto.

Eu tenho considerável habilidade / experiência de programação em Python (mas isso vai ser inútil aqui, eu acho), habilidades moderadas de programação em C, boas habilidades de depuração (apenas programas em modo usuário), habilidades de reversão estáticas decentes passatempo) e passaram por um pequeno (mas muito agradável) tutorial de programação de módulos do kernel aqui .

Há algumas perguntas que gostaria de fazer.

  1. Qualquer conselho específico que você gostaria de me dar (algo que você teve que aprender da maneira mais difícil). Uma questão abstrata, sim.
  2. Sou usuário do Ubuntu há muito tempo, mas não tenho certeza de onde posso começar a ajudar. Dados meus interesses específicos em drivers de dispositivos, alguma sugestão?
  3. Material de leitura sugerido? Atualmente estou lendo "Programação do Sistema Linux - conversando com o kernel e a biblioteca C".
  4. Material de leitura sugerido relacionado à depuração do driver de dispositivo?

Obrigado.

    
por Bruno Pereira 27.01.2012 / 14:31

1 resposta

5
  1. Bem, como engenheiro do kernel, descobri as melhores lições que aprendi em geral foram os duros. Onde fui desafiado a cavar fundo e encontrar maneiras novas e criativas de depurar um problema ou resolver um ponto específico. A motivação para manter isso realmente veio do meu interesse investido em um subsistema em particular. Se você não está empenhado em ver as coisas até então, basta parar agora, tudo é difícil, é a intensidade das histórias de guerra que variam:).

  2. Você pode ajudar melhor em uma área que está motivada para manter o esforço. Pergunte a si mesmo o quão perto você quer chegar ao HW e continue a partir daí. Por exemplo, há muito menos conceitos de sistemas operacionais aplicados no desenvolvimento geral de drivers de dispositivos do que em maiores problemas de gerenciamento de recursos, como gerenciamento de memória, write-back de E / S, agendamento de processos. Os drivers de dispositivos, afinal de contas, são sobre bater o firmware para conseguir o que você quer e, em seguida, aderir à interface para esse subsistema, há tantos trabalhos comparáveis que torna relativamente fácil começar por lá. A desvantagem é que você está trabalhando com o HW, que é sempre um obstáculo para o desenvolvimento.

  3. Esse é um livro do userspace, você não precisará mais disso :-p. O kernel é uma estrutura orientada a serviços, entender que a interface do usuário / kernel inteira para começar não será muito útil se você mergulhar diretamente no desenvolvimento do driver, por exemplo, já que estará bastante isolado do espaço do usuário. A terceira edição do Linux Device Drivers é disponível gratuitamente e é uma ótima referência.

  4. Veja o link abaixo. Embora o mais importante, comece em algum lugar e aguente firme. É suposto ser difícil, testar sua paciência e compromisso. Já que você realmente não sabe no que está interessado, são as lições aprendidas com essas escaramuças que moldarão seus futuros compromissos. Se você não pode fazer isso, então o kernel hacking não é para você.

Eu aconselho que você encontre um mentor que irá desafiá-lo e estar lá para você enquanto você se aproxima. Eu não tentei isso sozinho, mas este projeto pode ser um bom começo para você: link .

Também sugiro que você se familiarize com os frameworks de rastreamento do kernel, como ftrace, perf e systemtap.

Boa sorte!

    
por ppetraki 27.01.2012 / 15:40