博客
关于我
iTop4412 3.0.15内核移植到linux4.4.34(一)
阅读量:657 次
发布时间:2019-03-15

本文共 1877 字,大约阅读时间需要 6 分钟。

在Linux内核开发过程中,移植启动过程和处理各外设驱动是常见的任务。尤其是针对Samsung Exynos4412平台的移植,配置和编译过程中可能会遇到诸多问题。本文将介绍常见的编译错误及解决方案,帮助开发者顺利完成内核移植。

1. 系统配置

在开始编译之前,需要确保系统配置正确。系统类型选择时,应选中支持ARMv7架构的平台,包括Cortex-A、PJM等核心。对于Samsung Exynos系列,选择Exynos4412作为目标平台。

在 kao domains中,需要启用MMU支持,并根据需要选择是否支持多个平台。这些设置可以通过菜单中的“System Type”选项设置。

2. 编译依赖项

在编译前,需要安装必要的软件依赖项。例如,若需要OpenSSL支持,可使用以下命令:

sudo apt-get install libssl-dev

如果依赖安装失败,可能需要更新包裹或安装更多。此外,ARM开发工具链的安装也是关键,确保安装完成后可以顺利进行编译。

3. 编译错误的处理

在编译过程中,常见的错误可能涉及到ARM汇编指令dsbdmb等。例如,当编译生成文件如sign-file.c时,若出现“openssl/opensslv.h: No such file or directory”的错误,需安装OpenSSL开发包。

对于汇编错误,如“garbage following instruction -- dsb ishst”,可能是因为ARM调试指令在新版本Linux内核中被保留,但实现方式发生了变化。在这种情况下,需检查目标平台的调试支持是否正确配置。需要启用相关调试选项,如果不需要调试支持,可以选择禁用这些指令。

检查内核配置中的调试选项,确保没有不必要地启用调试功能。其中,ARMv7架构下,SAMSUNG EXYNOS4412的配置需详细审查,避免因型号选择错误导致指令编译错误。

4. 汇编器问题

针对某些汇编器错误,如“dsb nshst”指令无效,可以通过对应的处理方式解决。例如,在arch/arm/mm/flush.o中,某些dsb指令可能引起问题,可以尝试修改为其他调试指令或移除不必要的调试功能。

此外,需要注意调试和暂停块的实现方式,确保与ARMv7架构兼容。有时,简单地替换dsbdsb即可解决问题。

如果上述方法仍不奏效,可能需要检查asm前缀及其参数,确保asm volatile的使用正确无误。例如,确保使用asm __volatile__而非asm.

5. 调试指令替代

在处理ARMv7内核时,可能需要替换一些调试指令。例如,有时候可以将dsb ishst替换为普通的dsb指令。如果问题依然存在,可以参考ARM的文档,了解dsb指令在不同架构中的实现方式。

还可以尝试使用IMAGE_LOADADDRESS等工具来调试问题,确保在生成的设备映像中没有残留调试指令。

6. 调试日志应对

遇到编译问题时,可以通过查看汇编器输出详细日志,定位具体问题。例如,arch/arm/mm/tlb-v7.S中的dsb ish指令错误提示,可以通过查找相关代码段,检查dsb是否应被替换。

对于较为复杂的错误,如testchangebit.S中的dmb ish指令错误,可以尝试修改目标文件中的指令或查阅该文件的功能逻辑,检查是否需要原始指令或有其他替代方法。

7. 关键文件修改

有时,问题可能出现在关键的包含文件中。例如,在某些asm文件中,可能需要修改dsbisb的定义。对于Exynos4412平台,需要自定义asm文件,使其与该平台的ARM架构兼容。

此外,在asm文件中,有时需要添加特定的前缀或参数,以确保指令正确无误地执行。如果在包含的文件中发现dsbdmb的定义与平台不兼容,可以尝试手动修改这些定义。

8. 最终调试与优化

在编译和调试过程中,及时生成并查看设备的内核日志是关键。通过dmesg查看启动信息,可以定位问题发生的具体阶段。此外,在生产环境中,要优化内核配置,关闭不必要的调试功能,以提高性能和稳定性。

在handles中,尽量减少调试指令的使用,以避免编译和运行中的不必要的开销。如果问题依然无法解决,可以参考相关的开发者论坛或社区,寻求其他开发者的经验和建议。

9. 结果

通过以上方法,开发者可以系统地解决Linux内核移植到ARMv7架构下Exynos4412平台的编译问题。同时,通过细致地配置调整和代码修改,最终实现稳定的内核运行和外设驱动支持。

转载地址:http://tadmz.baihongyu.com/

你可能感兴趣的文章
PHP中fileinfo的作用以及怎么开启fileinfo
查看>>
PHP中file_get_contents如何带上cookies
查看>>
PHP中header的作用
查看>>
PHP中implode()和explode()
查看>>
PHP中ob系列函数讲解(浏览器缓存技术)
查看>>
PHP中serialize和json序列化与反序列化的区别
查看>>
Redis事务处理
查看>>
php中传值与传引用的区别是什么
查看>>
php中使用ajax进行前后端json数据交互
查看>>
Redis事务和锁操作
查看>>
Redis事务中的watch机制-从实例入手学习
查看>>
PHP中如何得到数组的长度
查看>>
Redis 集群模式下一个 Master 挂掉后如何选举?
查看>>
php中引入文件几种方式的区别
查看>>
PHP中把stdClass Object转array的几个方法
查看>>
PHP中替换换行符
查看>>
PHP中有关正则表达式的函数集锦
查看>>
Redis 集群搭建详细指南
查看>>
php中的cookie用法
查看>>
php中的session用法
查看>>