从单片机转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的世界。 2. 你需要知道嵌入式Linux系统是怎么跑起来的,一般由哪些组成部分 相信大部分人转行嵌入式Linux开发并不是为了在Linux系统上开发单片机程序,而是想做Linux驱动或者应用开发。在走完入门第一步之后,就不要太纠结那些编译,链接脚本那些文件格式怎么写,而是尽快把精力专注到Linux系统开发。 学习嵌入式Linux系统开发,首先就得知道一个Linux系统如何跑起来,如何把一个Linux系统环境在开发板上搭起来。这牵涉到bootrom, bootloader, uboot, dts, Linux内核,cmdline, rootfs等一系列组件,以及nand启动,nor启动等各种不同的方式,知道一个Linux嵌入式系统如何工作,再进一步修改添加自己的驱动和应用。 在嵌入式Linux学习这块,理论性的知识需要慢慢看书,但是实践性的知识还是需要视频资料带你操作快速入门,看书和实践循环渐进。
嵌入式Linux 基础_
3. 你可以尝试做一些简单的Linux应用和驱动开发了 走完了前面两个步骤,相信你对嵌入式Linux开发有一定专业性认识了。在嵌入式Linux学习这块,个人更倾向于在做中学,60%实践+40%理论。 因为嵌入式Linux里面很多系统环境相关的东西,并不是书本上那种严格的理论公式,通过看书很难找到规律,而且在Linux内核里面有一整套GNU(GNU是啥意思自己搜)世界的行话,那些写Linux内核,驱动书籍的技术专家不可能所有行话都给你解释,所有在没有使用和开发经验的前提下就直接打开《Unix环境高级编程》、《Linux设备驱动程序》等大牛的经典书籍,容易让你云里雾里。 个人建议是,跟着一个视频教程,比如创客学院的嵌入式linux视频或者韦东山的嵌入式Linux视频,从0开始写一个简单驱动和应用,让自己写的驱动和应用代码跑起来,点亮1个Led灯,先不用管Linux驱动中你调用的那些初始化,注册等框架函数如何实现。 通过实践的过程,熟悉整个代码的运行环境以及Linux开发中的各种行话(系统调用,vfs等等)。这也是让你一步一步取得学习正反馈,提升成就感和学习信心的方法。 其实Linux驱动开发本身并不难(难度不会超过你复变函数课本上的公式),也并不神秘,只不过它一整套行话术语,容易让初学者云里雾里,熟悉这套行话,摆脱恐惧心理,一个智商正常的普通本科生应该是能够掌握的。 4. 你需要补充一些计算机的理论知识 据了解,大部分单片机工程师都是电子、通信、自动化、机械等专业出身,很少计算机专业的。这些专业的童鞋,相对会缺乏计算机专业的基本理论知识,如数据结构,操作系统,计算机组成原理,计算机网络,算法,编译链接的基本原理,数据库等等。 补充理论知识是一个长期的过程(可能需要2-3年),并不是要等到计算机的专业理论都学完才可以去找工作,你可以一边补充基础知识一边面试一边找工作,同时检验自己的基础知识。这些基础知识不但能提高你的技术功底,也能帮你通过笔试面试,决定你能否在一线城市突破20K的薪水。 在有了计算机科班的基础知识,以及有一定Linux驱动开发经验之后,Linux内核的学习是有必要的,但是入门的初学者不用急于进入Linux内核源码,内核这块东西还是挺多的挺艰深的,得花时间边看书边看代码慢慢啃,没法速成,但是Linux内核功底还是能够提高你的薪资竞争力。 linux驱动
|