单片机转Linux开发

单片机转嵌入式Linux大概需要学哪些基本的知识

吹了这么多水,到了真正上干货的时候了,从单片机转Linux嵌入式到底需要学些啥。如果没有这一段,火哥真怕你下定转行决心之后,马上拿起一本Linux内核架构与实现的书,以为像学uCOS等RTOS系统一样,都是C语言代码,然后看得云里雾里,从入门到放弃。其实火哥在刚学习Linux嵌入式的,也犯过类似的错误,因而总结了一些经验教训。

  1. 你需要花一定时间熟悉如何使用Linux系统进行编程开发

相信很多童鞋都是从小使用Windows电脑长大的,在学计算机编程之前,应该没有接触过Ubuntu等Linux系统,而这个系统又不像Windows那样点点鼠标就听话,需要各种命令行操作。而且系统里面有各种服务和应用工具需要你自己按照需求去配置。

所以学习嵌入式Linux开发不是急于钻进Linux内核代码的海洋中,而是先用好Linux系统。

你可以参考《鸟哥的Linux私房菜》等Linux系统如何安装使用等书籍,学会使用命令行。但是火哥认为学习要有目标性,如果对着《鸟哥的Linux私房菜》一页一页每个命令学下去,看几天就会枯草乏味了。

所以火哥建议由单片机开发经验的童鞋,第一个目标就是在Linux系统上如何搭建你的单片机开发板交叉环境,编译出一个裸机的Led点灯的程序(不需要跑Linux内核) , 并通过开发板产商提供的工具烧写。

这件事情并不难,网上已经有很多如何在Linux系统下交叉编译单片机程序的文章,尤其是stm32系列的,你可以参考别人的文章做一遍,在这过程中你将会熟悉各种常用的命令,shell, arm-linux-gcc交叉编译工具链,Makefile(可以单独参考陈皓的文章)等Linux编程环境相关的知识,从而开始进入Linux的世界。

  1. 你需要知道嵌入式Linux系统是怎么跑起来的,一般由哪些组成部分

相信大部分人转行嵌入式Linux开发并不是为了在Linux系统上开发单片机程序,而是想做Linux驱动或者应用开发。在走完入门第一步之后,就不要太纠结那些编译,链接脚本那些文件格式怎么写,而是尽快把精力专注到Linux系统开发。

学习嵌入式Linux系统开发,首先就得知道一个Linux系统如何跑起来,如何把一个Linux系统环境在开发板上搭起来。这牵涉到bootrom, bootloader, uboot, dts, Linux内核,cmdline, rootfs等一系列组件,以及nand启动,nor启动等各种不同的方式,知道一个Linux嵌入式系统如何工作,再进一步修改添加自己的驱动和应用。

这里有很多实践性的东西,可能需要视频资料带你跑一遍,才能快速入门,火哥之前看的是韦东山老师的嵌入式Linux视频,总共有一二三四期等,有免费试看,也有付费的,直接淘宝联系卖家可以了解,火哥就不贴广告链接了。

另外还有其它视频,火哥没有看过的,就不随便推荐了,在嵌入式Linux学习这块,理论性的知识需要慢慢看书,但是实践性的知识还是需要视频资料带你操作快速入门,看书和实践循环渐进。

  1. 你可以尝试做一些简单的Linux应用和驱动开发了

走完了前面两个步骤,相信你对嵌入式Linux开发有一定专业性认识了。在嵌入式Linux学习这块,火哥更倾向于在做中学,60%实践+40%理论。因为嵌入式Linux里面很多系统环境相关的东西,并不是书本上那种严格的理论公式,通过看书很难找到规律,而且在Linux内核里面有一整套GNU(GNU是啥意思自己搜)世界的行话,那些写Linux内核,驱动书籍的技术专家不可能所有行话都给你解释,所有在没有使用和开发经验的前提下就直接打开《Unix环境高级编程》、《Linux设备驱动程序》等大牛的经典书籍,容易让你云里雾里。

火哥建议是,跟着一个视频教程,比如韦东山老师的嵌入式Linux视频,从0开始写一个简单驱动和应用,让自己写的驱动和应用代码跑起来,点亮1个Led灯,先不用管Linux驱动中你调用的那些初始化,注册等框架函数如何实现。

通过实践的过程,熟悉整个代码的运行环境以及Linux开发中的各种行话(系统调用,vfs等等)。这也是让你一步一步取得学习正反馈,提升成就感和学习信心的方法。

其实Linux驱动开发本身并不难(难度不会超过你复变函数课本上的公式),也并不神秘,只不过它一整套行话术语,容易让初学者云里雾里,熟悉这套行话,摆脱恐惧心理,一个智商正常的普通本科生应该是能够掌握的。

  1. 你需要补充一些计算机的理论知识

据火哥了解,大部分单片机工程师都是电子、通信、自动化、机械等专业出身,很少计算机专业的。这些专业的童鞋,相对会缺乏计算机专业的基本理论知识,如数据结构,操作系统,计算机组成原理,计算机网络,算法,编译链接的基本原理,数据库等等。

补充理论知识是一个长期的过程(可能需要2-3年),并不是要等到计算机的专业理论都学完才可以去找工作,你可以一边补充基础知识一边面试一边找工作,同时检验自己的基础知识。这些基础知识不但能提高你的技术功底,也能帮你通过笔试面试,决定你能否在一线城市突破20K的薪水。

在有了计算机科班的基础知识,以及有一定Linux驱动开发经验之后,Linux内核的学习是有必要的,但是入门的初学者不用急于进入Linux内核源码,内核这块东西还是挺多的挺艰深的,得花时间边看书边看代码慢慢啃,没法速成,但是Linux内核功底还是能够提高你的薪资竞争力。

四、 给有工作经验的转行者的建议

  1. 有工作的转行者,你的优势是有保底的工作和收入,劣势是没有足够的学习时间自由。有了当前的工作饭碗,不用急着找新工作,你可以保持一个良好的心态,不骄不躁,可以边学习边骑驴找马,找到合适的工作。

当然有工作的人,时间上并不自由,如果你想学的新东西和你当前工作内容并不直接相关,火哥建议你可以先选择一份加班少的工作,这样可以腾出下班后的业余时间来学习嵌入式Linux的新知识。

有工作的人,有了一些小积蓄,缺的是时间,那么在学习上可以适当买一些性价比高的付费视频,加快入门和学习进度,节约宝贵的时间,这也是用金钱换时间。

一般情况下,不需要学精通才出去找工作,学到可以self correct(这个词来源于一个TED关于如何快速自学的演讲), 能够干一些活的状态,就可以出去面试找相关的工作了,Linux嵌入式学习以通用基础知识为主,驱动里面的音视频,通信协议相关的业务上的知识可以找到相关的工作再补充。

  1. 如何在只有单片机经验,没有Linux开发经验的情况下,如何通过社招嵌入式Linux开发工作?

这个对于社招看中相关工作背景的求职者是个头疼的问题,火哥有以下几点建议:

首先,看看公司是否有Linux相关的部门和开发计划,可以主动尝试内部转岗。

第二,看看能不能建议公司技术负责人把单片机开发的环境迁移到Linux系统上,在Linux系统环境上开发单片机,这样至少你在工作中有使用Linux系统的机会。

第三,可以先尝试面一些在Linux环境下开发单片机的公司,面试后询问面试官是否在Linux环境下开发单片机,如果是,可以先加入用Linux开发单片机的公司继续做一段时间单片机,顺便再工作中熟悉一下Linux.

第四,尝试一下面试真正做Linux系统开发的公司一些Bootloader或者固件开发相关的岗位,因为Bootloader和存储控制器,电管管理等固件代码和单片机裸机rtos开发有很多相关性,甚至ARM SOC里面就有单片机核以及相关的固件,用于控制wifi,存储,电源休眠唤醒等相关的功能,这样能保证你能够在新工作中有一定输出贡献,而不是完全的学习者。

第四,尝试面试一些流动性高,离职率高的真正做Linux公司。这样的公司一个词形容:“缺人”。火哥之前在珠海某IC原厂工作,由于珠海相关的从业者基数少,应届毕业生很多也不愿意来小城市发展,再加上公司近年业绩不好,离职率高,导致公司缺人,并且很难招到人,所以后来放开招人标准,愿意培养只有单片机经验,没有Linux经验社招者。

当然现在火哥在的深圳知名大厂,由于从业人口基数大,公司品牌和待遇都很有竞争力,竞争较为激烈,虽然号称缺人(其实是招人太挑剔了),但是一般不会给没有Linux经验的求职者机会。

最后,在学习Linux嵌入式的过程中,遇到的问题和写的代码,最好有技术博客和GitHub记录下来,把相关链接贴在简历上,这也是像面试官证明你真的对嵌入式Linux有一定了解,面试官看完你的博客和GitHub,才能对你的技术水平有进一步了解,决定是否给你机会。

原文链接:是否要从单片机转嵌入式Linux?

  • 21
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值