我想进入 Ubuntu 系统编程;具体来说 - 开发和调试设备驱动程序。但是,我不确定如何开始,即使我之前有为其他开源项目做出贡献的经验。
我有相当多的 Python 编程技能/经验(但我猜这在这里没用),中等的 C 编程技能,良好的调试技能(尽管只有用户模式程序),不错的静态逆向技能(更多的是一种爱好)和通过短(但真正快乐的)内核模块编程教程去了这里。
有几个问题我想问一下。
谢谢。
嗯,作为一名内核工程师,我发现总的来说,我学到的最好的课程是最难的。我面临的挑战是深入挖掘并找到新的和创造性的方法来调试问题或解决特定的症结点。坚持这一点的动机确实来自我对特定子系统的投资兴趣。如果你不致力于把事情看透,那么现在就停下来,这一切都很难,战争故事的强度会有所不同:)。
您可以在有动力继续努力的领域提供最好的帮助。问问自己你想离硬件有多近,然后从那里继续。例如,在一般设备驱动程序开发中应用的操作系统概念要少得多,而更多的资源管理问题如内存管理、IO 写回、进程调度。设备驱动程序毕竟是关于敲击固件以获得你想要的东西,然后坚持该子系统的接口,有很多可比的作品,它使得在那里开始变得相对容易。缺点是,您正在使用硬件,这总是对开发的净拖累。
那是一本用户空间的书,你不再需要它了:-p。内核是一个服务驱动的框架,例如,如果您直接进入驱动程序开发,那么一开始就了解整个用户/内核接口不会很有用,因为您将与用户空间完全隔离。Linux Device Drivers 3rd edition 是免费提供的,是一个很好的参考。
请参阅下面的链接。虽然最重要的是,从某个地方开始并坚持下去。这应该很难,考验你的耐心和承诺。由于您并不真正知道自己对什么感兴趣,因此从这些小规模冲突中吸取的教训将影响您未来的交往。如果您甚至无法做到这一点,那么内核黑客攻击就不适合您。
我建议您找一位导师来挑战您,并在您跟上进度时陪伴您。我自己还没有尝试过这个,但这个项目对你来说可能是一个好的开始:http : //kernelnewbies.org/KernelMentors。
我还建议您熟悉现有的内核跟踪框架,例如 ftrace、perf 和 systemtap。
祝你好运!