跟涛哥一起学嵌入式 第03集:嵌入式要从u-boot移植学起?

2023-05-16

大家好,我是涛哥,欢迎阅读《跟涛哥一起学嵌入式》第3集。俄罗斯仲夏夜,世界杯依旧如火如萘。球场上,夕阳下,梅西没落的身影、C罗的黯淡离场,并没有打击大家太多的热情。战火依旧,老兵不死,梅罗时代是否快要终结?然而新一代巨星冉冉升起,风起云涌。在看球的同时,学习充电也不能落下,今天我们聊聊第3个话题:学习嵌入式,一定要从u-boot移植学起吗?

嵌入式真要从U-boot移植学起?

故事缘起嵌入式技术群(475504428)一位嵌入式学员遇到的问题:这位学员想在他的开发板上移植最新版本的U-boot。然而,将近半年过去了,发现还在群里问一些关于移植的一些问题,这就引发我的思考:照这样的速度,再给他几个月,能否移植成功?对于一个新手,没有辅助的一些工具,费这么大力气,去做一些跟以后的工作不太相关的技能,是否划算?当看到这种学习方式给很多新手带来的不是进步的喜悦,而是打击,甚至是转行去做其它,我觉得我们也许应该换种学习方式了,包括我在内,在上面也栽过不少坑。

我的悲催学习经历

跟大家学习的经历差不多,学生时代,玩完51单片机后,我就购买了第二块开发板:某款ARM9开发板,这里就不说具体的名字了。按照流程,裸机实验做了一遍后,就开始开启了U-boot的移植生涯,在烧写U-boot时发现根本启动不起来,当时由于没有相关的调试工具,比如TRACE等,也不会相关的调试打印手段,所以只能尝试各种可能的原因一一排除,逛各种论坛、到百度翻页,发现根本解决不了问题。为此前前后后折腾了几个月,被折腾得有气无力。到最后,联系厂商的工程师,开发板寄回去后,发现是NOR FLASH芯片的问题,重新换了一块NOR FLASH,系统就可以正常运行了。虽然这个问题最后得到了解决,但是前前后后也浪费了我几个月的时间,当然,有人可能会说,通过这个bug你也学到很多东西啊。是的,通过不断分析这个问题,确实增长了不少知识和技能,但是对于新手来说,如果一上来就通过问题驱动来学习,是很容易打击人的学习积极性的。大部分人可能会坚持不下去,折腾得差不多了,也就把板子扔到一边落灰,去搞互联网、Java去了,从而改变了自己的职业道路。为了这个bug,我浪费了几个月的时间,我觉得是不划算的,这几个月的宝贵时间,我可以去学习以后嵌入式开发中用到的高频技能,提高我的工作效率,而不是在这个低频技能上耗费太多的时间。

高频技能与低频技能

什么是高频技能,低频技能呢?写这两个词时,特地到百度搜索了一下,发现并没有相关的词汇,姑且看作是我创造的两个新词吧(版权归我啊,用时要交税~)。顾名思义,高频技能就是我们在工作中大概率使用到的技能;低频技能,就是我们在工作中很少使用的技能。

早期的单片机开发,系统比较简单,从硬件设计、PCB画图、软件开发、测试,一个工程师就可以搞定,软硬通吃。按照今天的流行语,就叫全栈工程师。但现在不同了,嵌入式开发,尤其是上了OS后的嵌入式系统开发,需要的理论基础和技能储备太多太杂:从硬件、计算机系统结构、操作系统、应用层、GUI等,都要有所涉猎。同时,随着嵌入式越来越复杂,分工也越来越明确:硬件工程师、PCB工程师、BSP工程师、驱动工程师、应用工程师、测试工程师,大家以一个团队的形式共同开发维护一个嵌入式项目。

分工的形成,以前全栈工程师需要的软硬技能,就不需要全部学习了。当然,你也学不完,就算你学完了,有些知识你一辈子也可能用不到。分工机制下,每个人精通各自的模块,分工协作,效率最高。现在一个嵌入式SOC,几十个IP模块,你说你都掌握,有点不现实,一个音视频解码、GPS、GPU、USB都可能让你啃几年才能谈得上精通。系统越来越复杂,分工越来越明确,这就需要我们可能要换一种新的方式了。

对于嵌入式学习者来说,面对越来越复杂的系统,我们该如何学习,学习什么,这是一个很值得思考的问题。在思考这个问题之前,我们首先要有一个前提:人的精力是有限的,不可能掌握所有的知识和技能。如果你不认可这个前提,非得按照那种全栈工程师的模式学习,那下面就没有看的需要了。

该如何学习呢?我们需要对嵌入式开发,需要的技能进行重构和分解。哪些是常用的,基础的,必须掌握的,即高频技能,哪些是不常用的,即低频技能,然后再根据需要,科学地学习。这才是嵌入式2.0时代,学习嵌入式的正确姿势,适应职场技新形势新需求的学习捷径。

学习U-boot的正确姿势

同样一个U-boot,不同的职位、不同的开发人员,对它的掌握程度是不一样的。一个团队就和一个特种小分队一样:狙击手要求精通狙击、爆破手要精通各种爆破技术、通信兵要掌握各种电子情报获取技术。团队中不同的成员精通不同的技能,集合在一起,就可以形成恐怖的战斗力。人的精力是有限的,精通一门技术的同时,就不可能在另一门技术上花费同样的心力了,学习U-boot也是一样,你也不必什么都学。

那对于新手来说,U-boot要学习什么呢?我觉得两点就够了:U-boot的启动流程和U-boot跟内核的传参交互。这些是基础,也是各种开发人员经常接触到的。至于各种启动方式、底层实现的一些细节,这些原厂都已经做好了,我们直接用就可以了。软件开发中有软件复用的思想,同样,嵌入式系统开发中,我们也要有这种思想,不要什么都自己干,什么轮子都自己造,尤其是硬件,尤其是新手!高手造轮子,一般人用轮子,这是规律,先学会用轮子造汽车,在慢慢学着造更好的轮子。因为很多硬件上的坑、芯片内部的bug,这些都是不可见的,不会对外公开的,很多都是通过软件规避、或者其它手段曲线救国来实现的,这些东西你可能永远都不会知道,所以,如果你是新手,尽量不要跌到这些坑里,可以参考我上面所说的学习方式。

嵌入式工程师自我修养

《嵌入式工程师自我修养》体系教程,就是根据这种思路,适应嵌入式新时代需求、对嵌入式中的高频技能、低频技能不断重构,分解,重新设计而成的一种培训教程体系,也是我未来几年努力打造的一套培训课程。跟随这套教程学习的学员也许会发现,里面的相关课程,跟目前市面上、培训机构的都不太一样,没错,这也算是我的一个小小原创,互联网上首家使用新概念:高频技能、低频技能重新打造的一门嵌入式自学体系教程。

这门教程的威力在哪里?一般的教程,大家学到最后,学到的都是同样的知识和技能,就像流水线一样,出来的都是同样的产品。而《嵌入式工程师自我修养》体系教程,不是这样:每个人的学习强度不同、选择方向不同,最后结果也不一样:你有可能发现太难、学不下去,知难而退;有可能是基础扎实的普通士兵;也有可能是身怀绝技的特种兵;也有可能是身兼数门绝技的兵王。课程的难度强度梯度足够大,对你的技术成长上限不设限,它跟你的目标、要投入的时间和精力成正比,只要你肯吃苦、愿意努力,你可以把你的潜力推高到极致。对你,对我,都是同样的挑战。

《跟涛哥一起学嵌入式》,会持续跟大家分享嵌入式相关技术、学习方法、学习路线、求职面试等,欢迎收听头条号(微信公众号):宅学部落,QQ群:475504428

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

跟涛哥一起学嵌入式 第03集:嵌入式要从u-boot移植学起? 的相关文章

  • APISIX Dashboard中文文档(二)

    2022年7月6日14 31 51 APISIX Dashboard中文文档 一 APISIX Dashboard中文文档 二 APISIX Dashboard中文文档 三 基本部署 在 Linux 上安装 Apache APISIX Da
  • FreeRTOS 任务调度原理(基于cortexM内核)

    目录 默认FreeRTOS调度策略 xff08 单核 xff09 FreeRTOS调度策略的实现 任务创建 任务调度的4种情景 xff1a 1 第一次启动任务调度器 2 任务主动触发调度 3 SystemTick时钟触发调度 4 因为中断而
  • Centos7命令行安装图形用户界面

    安装完成Centos7后 xff0c 重启后发现是命令行界面 xff0c 于是就想改成图形用户界面 安装了图形用户界面的话 xff1a 1 查看系统里是否已经安装了图形用户界面 使用ctrl 43 alt 43 fx xff0c x为123
  • STM32G070 DMA+SPI+LCD显示

    SPI HandleTypeDef hspi1 DMA HandleTypeDef hdma spi1 tx 描述 xff1a LCD的SPI引脚初始化 参数 xff1a 无 返回 xff1a 无 void LCD SPI Init voi
  • Linux 开启VNCSERVER

    尽管我们可以使用 SSH连接远程通过字符界面来操作Linux xff0c 但是对于更多熟悉图形人来说是很不方便的 xff0c 因此开启Linux的远程桌面还是很有必要的 目前有两种比较流行的方式 xff1a XDM X display ma
  • Ubuntu 代号引发的“崩溃”

    写这篇文章主要是因为在前几天 xff0c 因为向来不关心ubuntu代号的我而引发的一次 崩溃 xff08 人崩溃 xff09 xff0c 正如我们所知Ubuntu 每半年都会更新一个版本 xff0c 每两年都会发布一个TLS xff08
  • Prometheus(二)部署Prometheus和node_exporter

    软件包列表 Prometheus安装 解压部署 rm rf prometheus 2 28 1 linux amd64 tar xvf prometheus 2 28 1 linux amd64 tar gz rm usr local pr
  • Python学习之路_day_02(编程语言介绍及变量)

    一 编程语言介绍 1 机器语言 直接用二进制编程 xff0c 直接控制硬件 xff0c 需要掌握硬件的操作细节 优点 xff1a 执行效率高 缺点 xff1a 开发效率低 2 汇编语言 xff1a 用英文标签取代二进制指令去编写程序 xff
  • 解决linux系统read only system 解决办法

    首先确认系统属于非硬盘物理坏道引起 其次确认是否有root权限 下面我要阐述一个恢复实例 xff1a 一现象 xff1a 1 没有root权限 2 由于磁盘空间满溢导致分区表损坏 xff08 非物理坏道引起 xff09 3 重启后已经无法进
  • 哈希查找效率及应用场景

    数组的特点是 xff1a 寻址容易 xff0c 插入和删除困难 xff1b 而链表的特点是 xff1a 寻址困难 xff0c 插入和删除容易 那么我们能不能综合两者的特性 xff0c 做出一种寻址容易 xff0c 插入删除也容易的数据结构
  • 四位比较器

    四位比较器 一 xff0c 实验目的 通过使用比较四位二进制判断它的相对大小 二 xff0c 实验内容 四位比较器的实验 三 xff0c 实验代码 module Comp 2 str output A gt B A lt B A eq B
  • 程序员玩游戏之三--天天爱消除非暴力脚本

    评论 xff1a 此款游戏成功在其好友排名上 好友的分数超过了你无疑会增加你的斗志 中级策略 xff1a 七手八脚多人一起点 这相当于多个CPU处理一个大任务了 xff0c 哈哈 终极策略 xff1a 自动化 机器总是比人快的多 你两个人一
  • 程序员玩游戏之四--娱网棋牌大连打滚子记牌器

    话说大连人都爱打滚子 xff0c 所以本人就做了一个打滚子记牌器 基本原理同 程序员玩游戏之一 自动对对碰 xff0c 故此处不再赘述 xff0c 只留下一张截图吧 代码请见资源地址 xff1a http download csdn net
  • 为SIGSEGV设置handler有用吗?

    背景 最近几天看到先辈们30年前留下了一块代码 xff0c 为SIGSEGV设置了handler xff0c 所以心中有了两个疑问 xff1a 为SIGSEGV设置handler有没有用 xff1f 能否跳过引起崩溃的那一句指令 xff1f
  • GDB调试技巧实战--为优化版release版本的函数寻找参数值

    在上一篇 GDB调试技巧实战 为release版本的函数寻找参数值 中 xff0c 我们探讨了一种为函数找参数的办法 xff0c 但是 xff0c 那是最理想的情况 编译时没有使用 fomit frame pointer 编译时没有开启优化
  • 通过实例了解uprobe及其对性能的影响

    前言 uprobe是用户空间探针的意思 xff0c 可以用来给用户程序的任何地方下探针 xff0c 不仅仅是函数粒度层级的 所以异常灵活 如果不熟悉ftrace uprobe 可参考以下文档 xff1a https www kernel o
  • bpftrace各维度捕捉SIGKILL信号

    一 问题 Ftrace 几乎适配任何主流内核版本 xff09 和 bpftrace xff08 要求内核版本4 1以上 xff09 中都有两个现成的脚本execsnoop bt killsnoop bt 我经常用他们从外部 xff08 不去
  • 写个Python程序上下班抢个顺风单

    一 程序预览 本程序已经写了多年 很久没用 不过刚运行了下竟然还可以成功运行 先来张运行结果图 二 最近的滴滴APP已经可以支持设置自动抢单功能 这个小程序就没有那么大意义了 在此主要谈一下我当初的想法 1 这个小程序运行在电脑上 人在回家
  • 图形化VS201x工程中的项目依赖关系

    目录 1 背景 2 入手 2 1 分析sln文件 2 2 给出正则表达式 3 程序 4 demo 5 补充 另外一种情况 6 补充 完整代码 1 背景 初次接手一个大工程时 往往因为复杂的项目依赖而遇到各种编译问题 同时如果能图形化其中的依
  • 深入应用python关键字yield--实现任务调度

    在此假设读者了解yield关键字的基本用法 如不了解请参照python文档或google之 大家知道遇到yield关键字时python会把当前的环境 xff0c 比如局部变量 全局变量等 xff0c 给记录下来以便以后能正确的继续向下运行

随机推荐