- 论坛徽章:
- 0
|
STEP#1:学习如何使用linux,包括linux下的常用命令,简单的shell,linux的常用配置等;
STEP#2:学习C语言,一定要学习扎实,要掌握如何编译成可执行文件,动态库,静态库,要会用GCC,知道常用编译选项,能看懂并能自己写Makefile等;知道如何交叉编译一个网上的开源项目;
STEP#3:参加实际项目,写一个相对比较大的Application!熟悉多线程,网络,文件IO,管道,信号,互斥等基本编程方法。
STEP#4:学习kernel的基本结构,能简单配置和编译内核;学习写一些简单驱动,熟悉linux内核的驱动模型;把LDD3看完;
STEP#5:研究或者尝试修改内核的一些subsystem,比如I2C, MTD,Serial,USB,FS等;前面的工作是别人都将环境搭建好了,你在上面做一些工作而已,事实上,一个嵌入式系统,硬件出来之后,你要自己从0开始搭建起来整个运行平台!
STEP#6: 学习BOOTLOADER,一般有现成的,比如uboot,但是根据你的硬件情况一般要做一些修改;比如内存初始化,FLASH初始化,网络初始化, 串口初始化等等;并且要学习如何将bootloader烧写到flash上,让系统加点即能寻址到bootloader开始执行;小批量之前,烧写一般用仿真器(比如BDI之类)!大批量的时候一般可以用专用烧写工具在生产是就烧写好;
STEP#7: 搭建NFS开发环境;方便开发阶段调试,不用频烧写;这需要内核开启NFS支持,另外你要在HOST机器开启NFS server;
STEP#8: 制作自己的root文件系统;一般用busybox来做;根文件系统可以选择:cramfs,jffs2,yaffs等;需要哪个,在内核中一定要编译进去;准备好文件系统之后,就可以用mkfs.xxx工具来将其做成映像。然后就可以通过bootloader来将root文件系统烧写到flash上了。要想烧写的文件能够正常跑起来,首先bootloader传递给内核的参数要正确,另外,内核要对flash做好正确的分区;
NOTES:研究linux kernel当然是一个永不停息的工作:)
************************************************************************
需要理解硬件接口原理,能够看懂板子的原理图,
会用各种仪器(如示波器,万用表,USB分析器,网络数据分析工具等)进行调试。
说的简单一点就是 Bootloader + Kernel(保护drivers) + rootfs
如果没有Linux的背景,那就先熟悉一下Linux,
熟悉了之后,开始先安装别人的提示,把Bootloader烧到Flash上,
Kernel,rootfs的image 通过1) NFS 或者 2) 烧到 Flash上,把板子跑起来,整个过程跑一遍。
然后根据自己的兴趣,对上面三方面有所侧重。
1) Bootloader很重要,板子的bootup全靠它了,还要负责加载Kernel Image
需要了解的知识: ARM core初始化,soc初始化,uart/memory/flash/network初始化。
了解bootloader搬运kernel image并将执行权交给kernel的全过程,
会用ADS或者RVDS进行bootloader的调试
2)Kernel (包含drivers)
kernel的common部分可分为几个大部分: memory managerment,process managerment,
file systems,network。
drivers部分:熟悉Kernel的驱动模型,了解中断,GPIO等资源的注册。
3)关于rootfs,可以自己从头编译,可参考linux from scratch项目。
可以使用ptxdist
http://www.pengutronix.de/software/ptxdist/index_en.html
来生成。
其他的编程技巧跟Linux上没两样,如gcc,Makefile,shell,。。。。。
注意不同的是交叉编译的概念。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/90995/showart_1866208.html |
|