• RK3399平台入门到精通系列讲解(导读篇)21天学习挑战介绍



    活动地址:CSDN21天学习挑战赛

    🚀返回总目录

    每个人在突破自己技术瓶颈时都会经历一段痛苦的时光,只有我们具有坚定的信念,并努力坚持下去,相信我等你回过头来再看曾经认为难以理解的技术和知识时,你会有一种阔然开朗、融会贯通的感觉,这就是成长和进步所带来最大的成就感。

    一、关于作者

    博主从事Linux内核和驱动开发七年多,是Linux内核的爱好者,在智能汽车行业上市公司从事Linux底层软件开发工作。
    撰写博文是博主多年来一直坚持的事情,一是为了沉淀自己,二是只有不断的向前奔跑才能赶上Linux内核发展的步伐,故博主依靠RK3399此平台进行相关Linux内核驱动,Android框架的研究。

    1、博主的联系方式

    由于博主知识水平有限,博文中难免存在纰漏和理解错误之处,敬请各位读者朋友批评指正。大家可添加博主的微信。allen_yxs

    2、支持

    • 若读者有比较感兴趣的Linux内核板块,可以联系博主,博主会尽力去研读代码输出博文。

    二、需要具备的知识和工具

    RK3399平台上进行内核驱动开发,并非像C语言开发一样简单,需要我们付出一定的学习成本和时间成本,还要求我们有一定的基础知识,有的是需要掌握的,有的是只需要了解即可。

    1、需掌握知识点

    1. C语言Linux内核的语言基石就是C语言,故我们必须掌握。
    2. 数据结构:内核中遍布了链表等数据结构。
    3. 硬件基础:我们开发驱动过程中会接触到形形色色的硬件,这个时候就需要你可以看懂硬件原理图。
    4. 英文阅读技巧:我们还需要经常通过芯片的数据手册查找相关寄存器地址等信息,故需要看懂英文芯片手册。

    2、需了解的知识点

    1. C++面向对象的思想Linux内核设备管理的核心思想就是面向对象思想,设备管理的基石是Kobject(对象)结构体,故我们只需要了解这个面向对象的思想即可。
    2. git代码管理工具:现在主流的代码管理使用git,我们只需要了解几个简单的命令即可
    3. 硬件调试工具:虽然公司中有硬件工程师的帮助,但身为驱动工程师了解常见的万用表、示波器、逻辑分析仪等工具的使用,必不可少。

    三、通过系列博客可以学到什么

    1、本系列博文特色

    1. 图文并茂Linux内核庞大而复杂,任何一本厚厚的的Linux内核书籍都可能让人看得昏昏欲睡。因此博主在博客中都会插入思维导图的形式,让错综复杂的Linux内核子系统结构体关系明了。
      在这里插入图片描述
    2. 以实战为出发角度:博主大部分博文中都会对应一个使用例子,这样才能学以致用。

    2、21天学习目标

    工作后学习的过程一定是要跟实际工作结合起来的,从工作中用到的知识出发,延伸到之前未接触到的地方,逐步构建自己的知识网络,本专栏也是工作调试过程中的经验记录。

    微信:15168364509 拉大家入学习群

    下面我根据自身经验,介绍下前期的学习顺序。

    1. 8月1日-8月7日 内核设备树学习:掌握内核硬件HW 配置。
    2. 8月8日-8月14日 内核调试技巧学习:掌握内核的调试手段。
    3. 8月15日-8月21日 内核驱动子系统学习:掌握iic、spi等总线子系统驱动。

    3、21天学习内容

    8月1日-8月7日 :

    1. 设备树(Device Tree)的由来
    2. 图解Kernel Device Tree(设备树)的使用
    3. 设备树二进制文件DTB解析
    4. 设备树dtb信息转化为device_node结构
    5. DTS 架构下 Device 与 Driver 匹配流程
    6. 内核对设备树的处理
    7. 设备树的解析of函数介绍
    8. DTB的基本调试方法
    9. 内核启动阶段获得dtb位置指针过程介绍

    8月8日-8月14日 :

    1. 如何使用dynamic debug动态打印调试
    2. 如何使用dump_stack分析函数调用关系
    3. 休眠唤醒standby调试指南
    4. 如何创建一个proc节点供上层app调试使用
    5. devmem直接读写寄存器进行调试
    6. Linux Kernel Printk
    7. 利用debugfs调试

    8月15日-8月21日

    1. GPIO子系统
    2. Pinctrl子系统详解
    3. SPI子系统
    4. I2C子系统
    5. UART子系统
    6. Input子系统

    4、学习时间

    • 周一至周五晚上 7 点—晚上9点
    • 周六上午 9 点-上午 11 点
    • 周日上午 9 点-上午 11 点

    5、学习产出

    技术笔记 3 篇,每周周末输出一篇本周总结。


    四、一些经验

    1、学习时间

    1. 平时周内工作一定要做好记录,然后周末进行汇总总结。
    2. 早上可以去阅读代码,整理代码框架。

    只要肯愿意去积累,两个月入门,两年精通,五年大成

    2、学习方法

    1. 自己闭门造车不好,不如将自己的总结发出来,这样会更好的激励自己。
    2. dump_stack分析函数调用关系,这个手段掌握了,分析代码框架就是如鱼得水。
  • 相关阅读:
    加载.md文件
    K8S Pod Sidecar 应用场景之一-加入 NGINX Sidecar 做反代和 web 服务器
    八大排序之快速排序
    【广州华锐互动】VR建筑安全培训体验为建筑行业人才培养提供有力支持
    Java学生管理系统
    Pycharm 自定义文件和代码模板
    ubuntu安装Anaconda
    鞋子,靴子,拖鞋傻傻分不清楚 pytorch实现分类 入门小案例
    【华为OD机试python】分割数组的最大差值【2023 B卷|100分】
    弘玑RPA x 流程挖掘,构筑超自动化的坚实底座
  • 原文地址:https://blog.csdn.net/qq_33487044/article/details/126009070