一个典型的桌面linux系统包括3个主要的软件层---linux内核.c库与应用程序代码.
内核是唯一可以完全控制硬件的层,内核驱动程序代表应用程序与硬件之间进行会话.内核之上是c库,负责把posix api转换为内核可以识别的形式,然后调用内核,从应用程序向内核传递参数.应用程序依靠驱动内核来完成特定的任务. 在设计嵌入式应用的时候,可以不按照这种层次,应用程序越过c库直接与内核会话,或者把应用与内核捆绑在一起,甚至可以把应用写为内核的一个线程,在内核中运行,虽然这样在移植上带来了困难,但考虑嵌入式系统对尺寸要求小的特点,是完全可行的.不过我们使用三层软件结构的模式来学习嵌入式linux将会是我们认识更清晰,简单可行并使应用具有弹性.快速入门,最简单的建立嵌入式linux应用的方法就是从我们使用的桌面linux入手,安装一个喜爱的版本,把我们的某个应用作为初始化的一部分,框架就算完成了.当然,嵌入式linux应用远比我们的桌面版本功能简单专一,它也许就是一个用于足彩的终端机,或是一个数码音频播放器,这些系统除了使用嵌入式cpu外,仅仅再需要一个串口,网口等少量的输入输出接口就可以完成它们特定的应用了.在软件上,它可以按照三层的概念由内核装载器,定制的内核与较少的为特定任务设计的静态连接的应用程序组成.之所以使用静态连接的应用程序,是因为少量的静态连接程序所要的存储空间,比同样数量的动态连接的程序所占的空间小,这个平衡点需要我们在实际开发中去获取.也许你正在设计的是个pda,它的应用程序较多,那么你很可能就要使用动态连接程序来减少存储空间.在你的/bin或者/sbin目录下,用厂列表看看bash,ifconfig, vi...,也许只用几十k,当你运行 ldd /bin/bash 时,你会看到它们都与好几个库文件相连.好了,这样看来,我们得把pc想像成一个嵌入式硬件平台,再重新制作一个特定功能的嵌入式linux.
再进行实际操作之前,先来搞清楚几个基础知识.
内核装载器loader,它的作用是把内核从外部存储器,移动到内存中.它只作这个事情,一旦完成了调入内核的工作,loader就跳转到内核位置开始执行.不同架构有不同的 loader,在x86结构的pc上,通常使用的loader有lilo,grub,syslinux,syslinux在嵌入式 linux中也同样工作.其他非x86架构的应用中,你必须使用专门的loader,或者自己编写loader来装入内核.也有不使用loader的情况,系统加电以后,内核直接从烧录有映象的flash上开始执行. ... 下一页