终于完成Android及其kenel源码编译!

从上周开始,编译Android源码,昨天晚上终于完成了kernel源码的编译,并成功使用该kernel成功运行模拟器。

幸运的是,在这过程中碰到的问题并不多,而且都在网上找到了解决方法,大赞网络的力量。


回想2012年2月参加工作到现在,先是0基础做Linux driver(虽然只编写了一个U盘相关驱动,而且还没有理解USB子系统的原理。。。),紧接着做了受益匪浅的路由器测试,然后是2013年夏天进入Android项目至今,中间先后开发测试用Shell脚本、UiAutomator test case,维护Camera HAL,开发应用。


每次想起来,都感慨颇多,从底层驱动一路做到了应用,而且只能说做过。。。


去年春天以学习需要高配置机器的名义购置了一台联想台式机,并立即安装了Ubuntu 14.04,下载了Android源码,之后每次打开电脑都是升级软件,如今又升级到16.04,然后淘宝、看新闻。不但没有制定学习计划,也没有持续的学习行动,直到最近方才发现不能再浑浑噩噩混日子了,惭愧懊恼不已。


现在Android和kernel已经编译成功,今天就开始啃Android,希望借助这一较成熟的系统,来学习一个系统是如何运作的。


### 关于 Kernel Panic 的原因及解决方法 Kernel Panic 是 Linux 系统中的一种严重错误,通常表示内核遇到了无法恢复的错误状态。以下是可能导致 Kernel Panic 的原因及其对应的解决方法: #### 1. **硬件相关问题** 硬件故障是导致 Kernel Panic 的常见原因之一。例如,板载声卡、网卡或 CPU 超线程功能可能引发异常[^2]。 - **解决方法**: - 检查错误日志中的信息,确定引发问题的具体硬件。 - 在 BIOS 中禁用可疑硬件(如超线程功能或板载设备)。 - 系统启动后安装相应的驱动程序,并重新启用硬件。 #### 2. **内存问题** 内存故障也可能导致 Kernel Panic,尤其是当系统尝试访问损坏的内存区域时[^2]。 - **解决方法**: - 重新插拔内存条,确保其连接牢固。 - 尝试更换内存条的位置,排除物理故障的可能性。 #### 3. **驱动程序崩溃** 驱动程序中的错误可能导致软性 Panic(Soft Panic),即模块崩溃但未锁定中断处理例程[^3]。硬性 Panic(Hard Panic)则会直接导致系统崩溃。 - **解决方法**: - 更新或重新编译驱动程序以修复潜在问题。 - 如果问题由特定硬件引起,考虑禁用该硬件并检查是否有更新的驱动支持。 #### 4. **内核配置错误** 在安装或升级内核时,错误的配置可能导致 Kernel Panic。例如,缺少必要的模块或依赖项。 - **解决方法**: - 检查内核配置文件,确保所有必要的模块均已加载。 - 使用 `initramfs` 工具重新生成初始 RAM 文件系统。 #### 5. **使用 notify_chain 机制** Linux 内核提供通知链机制,在 Kernel Panic 时调用预定义的通知函数[^4]。这可以帮助开发者捕获和分析崩溃的原因。 - **解决方法**: - 开发者可以注册自定义的通知函数,以便在 Panic 发生时收集更多信息。 - 示例代码如下: ```c #include <linux/notifier.h> static int my_panic_handler(struct notifier_block *nb, unsigned long action, void *data) { printk(KERN_EMERG "Kernel panic detected - performing clean shutdown\n"); return NOTIFY_DONE; } static struct notifier_block my_panic_nb = { .notifier_call = my_panic_handler, }; static int __init register_panic_notifier(void) { atomic_notifier_chain_register(&panic_notifier_list, &my_panic_nb); return 0; } module_init(register_panic_notifier); ``` #### 6. **其他常见原因** - **文件系统损坏**:根文件系统或其他关键文件系统的损坏可能导致 Panic。 - **解决方法**:使用 `fsck` 工具修复文件系统。 - **内核版本不兼容**:某些应用程序或驱动可能与当前内核版本不兼容。 - **解决方法**:升级或降级内核以匹配软件需求。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值