浅谈学嵌入式要什么基础?http://www.arm8.net/thread-400-1-4.html
最近很多朋友都在问,如何学习嵌入式,作为嵌入式的老鸟,我想我可以做一些唠叨,嵌入式的入门门槛稍微高一点,但是再高的城墙也是小砖头筑起来的,所以没有必要因为门槛高就觉得很困难,一步一个脚印,成功最终将会属于您。?
学习嵌入式具体有哪些知识结构?
一、学习嵌入式首先学习C语言,这个是毋庸置疑的,不管是做嵌入式软件还是硬件开发的人员,对C语言的掌握这个是必需的,特别是对于以后致力于嵌入式软件开发的人,更要学习好c语言,现在绝大部分都是用C语言,你说不掌握它可以吗?
推荐书籍:《The C Programming Language》 这本经典的教材是老外写的,也有中译版本。同时也推荐谭浩强的《谭浩强c语言程序设计》。
二、学习51单片机,可以先从51单片机学起,建议去买块成品的板子(淘宝上100块钱左右),然后去看经典视频教程,郭天祥十天学会单片机,边看视频边写程序,由浅入深,等你能熟练操作各个寄存器,通过IO口,定时器控制流水灯,蜂鸣器,LED显示屏,键盘,AD、DA口的时候,你就会对单片机有一定的认识了,这时候自己动手做硬件,搭一个最小系统,边做边学习数电和模电知识,画PCB什么的,然后加工板子,加工出来一块板子以后就算真正入门了。但是记住,这只是入门,因为51单片机是最简单的,你的目标并不能限于此,真正的目标是ARM和DSP,有了前面这些基础,然后转去做ARM或者DSP开发,说白了,知识都是相通的,你只要理解了他们工作的原理,很快就会上手。
三、学习linux操作系统与编程,Linux操作系统就是用C语言编写的,所以你也应该先学习下Linux方面的编程,只有你会应用了,才能近一步去了解其内核的精髓。
推荐书籍:《UNIX环境高级编程》(第2版)
四、学习ARM体系结构与编程,以及其汇编指令,我们在嵌入式开发中,一般很少去写汇编,但是最起码的要求是能够看懂arm汇编。这里推荐《ARM体系结构和编程》 杜春雷。
五、Uboot学习,学习嵌入式必须从裸机开始,要完完全全学会裸机编程,那么就必须得分析其UBoot,uboot是我们的最好的老师,然后就是内核移植,文件系统移植等。而移植这部分对硬件的依赖是非常大的,其配置步骤也相对复杂,也没有太多详细资料。
六、驱动开发(也是最终目的)
1. 学会写简单的makefile
2. 编一应用程序,可以用makefile跑起来
3. 学会写驱动的makefile
4. 写一简单char驱动,makefile编译通过,
可以insmod, lsmod, rmmod. 在驱动的init函数里打印hello world, insmod后应该能够通过dmesg看到输出。
5. 写一完整驱动, 加上read, write, ioctl, polling等各种函数的驱动实现。 在ioctl里完成从用户空间向内核空间传递结构体的实现。
6. 写一block驱动, 加上read,write,ioctl,poll等各种函数实现。
7. 简单学习下内存管理, 这个是最难的,明白各种memory alloc的函数实现细节。这是Linux开发的基本功。
8. 学习锁机制的应用,这个不是最难的但是最容易犯错的,涉及到很多同步和并发的问题。
9. 看内核中实际应用的驱动代码。
你会发现最基本的你已经知道了, 大的框架都是一样的, 无非是read, write, ioctl等函数的实现,
但里面包含了很多很多细小的实现细节是之前不知道的。 这时候就要考虑到很多别的问题而不仅仅是基本功能的实现。
推荐您看2.6.20中integrated的一个驱动 kvm,
记得是在driver/lguest下,很好玩的, 就是Linux下的虚拟机驱动, 代码不长,但功能强大。有能力的可以自己写一操作系统按照要求做成磁盘镜像加载到虚拟机中,
然后客户机可以有自己的4G虚拟地址空间。
10.
看完驱动欢迎您进入Linux kernel学习中来。
最简单的方法,跟着ldd(Linux devive driver)做一遍。
http://blog.sina.com.cn/u/2103944082 http://blog.sina.com.cn/99gxwcom
http://blog.sina.com.cn/u/2167879934
http://blog.sina.com.cn/u/221964705
|