linux驱动开发 使用移植至三星内核的技术(二)_基于carema源码
为了进行移植工作,我们的开发思路是首先在三星移植的mach-s5pv210目录中搜索并获取一个合适的mach-xx.c文件.这一块开发板与我
们的X210开发板最为接近,然后以此为基础来移植。
在查看过程中发现mach-s5pc110.c和mach-s5pv210.c最接近我们的X210开发板。通常确定它们的硬件兼容性测试报告中。
遵循以下原则:我们参考三星官方的各个开发板以确定最接近我们X210开发板的标准。我们的X210开发板基于三星官方提供的三款型号进行配置。
星的SMDKV210,因此要找这个对应的那个文件。
通过在mach-s5pv210文件夹下的Makefile进行研究发现,在getConfig()中设置了CONFIG_MACH_SMDKV210
之后实际上绑定的是 mach-smdkc110.c 这个文件. 由此可见, mach-smdkv210.c 这个文件未被使用.
到。启示就是不要光看名字。
3.解决内核启动中的错误
在内核启动的过程中会出现一些特定的输出记录。这些输出记录中暗含着潜在的问题。通过仔细研究这些输出记录,可以找到解决方案或初步判断。
的或者错误的一些信息片段,才能帮助我们找到问题,从而解决问题。

内核启动中的错误信息有一些特征:
Unable to handle kernel NULL pointer dereference at virtual address 00000060
Internal error: Oops: 5 [#1] PREEMPT (看到Oops说明内核已经死了)
出错的地方:
PC is at dev_driver_string+0xc/0x44
LR is at max8698_pmic_probe+0x150/0x32c
通过查看上述错误信息中的PC与LR的值可以看出,程序将执行至dev_driver_string或
max8698_pmic_probe(这两个是函数或者汇编中的标号)符号部分的时候出错了。
4.错误追溯及问题解决
max8698_pmic_probe查看名称显示为max8698这个电源管理IC的驱动安装函数存在异常, 实际上应当是
在开发板系统中集成了一款支持该电源管理IC的功能模块后,在启动过程中完成对该电源管理IC的驱动加载,并最终导致该驱动在初始化阶段执行。
的过程中出错了OOPS了。
基于我们X210开发板的硬件实际情况对此进行分析:实际上,在我们的X210开发板上并不存在这个max8698电源管
理IC,既然硬件都没有驱动执行了肯定会出错。
在uboot中是直接修改源代码来隐藏那个初始化函数以解决问题;在内核中这种方法行不通因为它依赖于特定的初始化机制
该系统采用大度且灵活的设计方案,在核心组件中每个子系统均按照预设条件进行编译。因此需要移除某个模块
的支持,请确保只需重新配置并取消相关选项设置即可;无需修改源代码文件。我们首要任务就是确定它相应的配置参数设置。
项。
make menuconfig,然后/搜索"MAX8698"这几个关键字

然后看到这个配置项的路径

然后到路径下去按N键去掉这个模块的支持,保存,重新编译即可。
最后
向大家做一个自我介绍吧!我是来自2023年上海交通大学毕业的小编,在小公司工作过一段时间后,在华为与OPPO这样的知名企业中也均有接触或工作经验积累。自2018年以来一直在阿里巴巴工作至今
尽管大多数Java工程师希望提升自身技能以便职业发展但往往由于缺乏明确的学习路径导致学习过程耗时费力且效果不佳无法获得显著的进步更遑论建立一个完善的自我成长体系这让他们感到迷茫无助
为了收集整理一份《2024年嵌入式与物联网开发全套学习资料》而精心挑选







不仅包含适合初学者入门的基础知识资料,
还设有针对有三年以上开发经验的专业学习者提供的高级课程,
几乎涵盖了95%以上的嵌入式与物联网开发相关知识点,
真正实现了系统化教学体系!
如果你感觉这些内容对你有所帮助的话,请直接点击这个链接获取全部的学习资料吧!
如果你感觉这些内容对你有所帮助的话,请直接点击这个链接获取全部的学习资料吧!
因为文件较大,并非详尽展示全部内容,在此仅以此作为初步参考。具体来说,在每个目录下均包含大厂面经、学习笔记、源码讲义以及实战项目等内容,并且后续将持续更新
习资料的朋友可以戳我获取!!**]()
因为文件较大,仅对目录大纲进行截取展示。其中每个节点囊括了大型公司面试题库、学习笔记以及相关的源码解析等内容,并且后续内容也会不断更新。
