调试android内核

调试android内核,android,debugging,kernel,Android,Debugging,Kernel,我想开始研究android设备上Linux内核的工作原理,并编写一些设备驱动程序。我习惯于为Windows编写驱动程序,关于Linux驱动程序的书似乎很有意义。我的问题是,我不知道如何设置远程调试会话,以便在Android系统上调试内核代码/驱动程序。作为一个Windows用户,而不是Linux用户,我正在努力 我已经植根了Android设备,根据源代码构建并安装了CyangenMod。我已经检查了构建配置是否为内核调试启用了正确的选项(kprobes/debug file system/Com

我想开始研究android设备上Linux内核的工作原理,并编写一些设备驱动程序。我习惯于为Windows编写驱动程序,关于Linux驱动程序的书似乎很有意义。我的问题是,我不知道如何设置远程调试会话,以便在Android系统上调试内核代码/驱动程序。作为一个Windows用户,而不是Linux用户,我正在努力

我已经植根了Android设备,根据源代码构建并安装了CyangenMod。我已经检查了构建配置是否为内核调试启用了正确的选项(kprobes/debug file system/Compile with debug info)

我看到过关于GDB和KGDB的提及,但不知道如何设置它们。我看到过不同的网页,甚至是一个来自中国人的youtube视频,但我觉得它们不容易理解。其中一些描述涉及在两台计算机之间连接串行电缆。在安卓系统上做不到的事情

我假定您必须在目标计算机上安装模块,在主机上安装前端调试器,将调试器指向相关的内核源代码和符号表,然后在内核代码中放置硬编码断点


有没有人能给我一个傻瓜式的指南,告诉我怎么做。

许多android设备都有低压串行端口,可以通过内核更改和特殊布线来启用;也可以使用一个特殊的模块来管理USB,而不是adb通常使用的堆栈。不过,通常情况下,交互式调试是最后一次恢复—您可以正确编写代码,进行增量更改,并使用printk()类型日志进行验证。对于程序而不是硬件相关的工作,您还可以考虑在QEMU的仿真器中调试,或者在ARM开发板上使用更好的I/O。最佳解决方案:目标-UART(RS232,例如)-PC。一个好的解决方案:ADB shell DMEG(相当适合轻量级驱动程序)。但总的来说,奇怪的是,你能在没有读取LDD3的情况下以马赫数这样做