博客
关于我
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/

你可能感兴趣的文章
open-vm-tools-dkms : 依赖: open-vm-tools (>= 2:9.4.0-1280544-5ubuntu3) 但是它将不会被安装
查看>>
open3d-Dll缺失,未找到指定模块解决
查看>>
openai Midjourney代理服务 gpt大模型第三方api平台汇总 支持国内外各种大模型 持续更新中...
查看>>
OpenAll:Android打开组件新姿势【仅供用于学习了解ButterKnife框架基本原理】
查看>>
OpenASR 项目使用教程
查看>>
Openbox-桌面图标设置
查看>>
opencart出现no such file or dictionary
查看>>
OpenCV 3.1 imwrite()函数写入异常问题解决方法
查看>>
OpenCV 4.1.0版drawContours
查看>>
opencv glob 内存溢出异常
查看>>
opencv Hog Demo
查看>>
opencv Hog学习总结
查看>>
opencv Mat push_back
查看>>
opencv putText中文乱码
查看>>
OpenCV Python围绕特定点将图像旋转X度
查看>>
opencv resize
查看>>
opencv SVM分类Demo
查看>>
OpenCV VideoCapture.get()参数详解
查看>>
opencv videocapture读取视频cap.isOpened 输出总是false
查看>>
opencv waitKey() 函数理解及应用
查看>>