wdefu 2007-5-28 23:04
Linux2.6基于嵌入式应用的裁剪
[size=2][color=#000000][font=Arial]1[/font][font=黑体]、[/font][font=Arial]Linux 2.6[/font][font=黑体]内核针对嵌入式开发显著特点[/font][/color][/size]
[size=2][color=black][font=宋体]实时可靠性是嵌入式应用较为普遍的要求[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]尽管[/font][/color][color=black][font=Tahoma]Linux 2.6 [/font][/color][color=black][font=宋体]并不是一个真正的实时操作系统[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]但其改进的特性能够满足响应需求。[/font][/color][color=black][font=Tahoma]Linux 2.6 [/font][/color][color=black][font=宋体]已经在内核主体中加入了提高中断性能和调度响应时间的改进[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]其中有三个最显著的改进[/font][/color][color=black][font=Tahoma]:[/font][/color][color=black][font=宋体]采用可抢占内核、更加有效的调度算法以及同步性的提高[/font][/color][color=black][font=Tahoma][4][/font][/color][color=black][font=宋体]。在企业服务器以及嵌入式系统应用领域[/font][/color][color=black][font=Tahoma],Linux 2.6 [/font][/color][color=black][font=宋体]都是一个巨大的进步。在嵌入式领域[/font][/color][color=black][font=Tahoma],Linux 2.6 [/font][/color][color=black][font=宋体]除了提高其实时性能[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]系统的移植更加方便[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]同时添加了新的体系结构和处理器类型[/font][/color][color=black][font=Tahoma]——[/font][/color][color=black][font=宋体]包括对没有硬件控制内存管理方案的[/font][/color][color=black][font=Tahoma] MMU-less[/font][/color][color=black][font=宋体]系统的支持[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]可以支持大容量内存模型、微控制器[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]同时还改善了[/font][/color][color=black][font=Tahoma]I/O[/font][/color][color=black][font=宋体]子系统[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]增添更多的多媒体应用功能[/font][/color][color=black][font=Tahoma][4][/font][/color][color=black][font=宋体]。[/font][/color][color=black][font=Tahoma][/font][/color]
[color=#000000][font=Times New Roman]1.1 [/font][font=宋体]可抢占内核[/font][/color][/size]
[size=2][color=black][font=宋体]在先前的内核版本中[/font][/color][color=black][font=Tahoma]([/font][/color][color=black][font=宋体]包括[/font][/color][color=black][font=Tahoma]2.4[/font][/color][color=black][font=宋体]内核[/font][/color][color=black][font=Tahoma])[/font][/color][color=black][font=宋体]不允许抢占以核心态运行的任务[/font][/color][color=black][font=Tahoma]([/font][/color][color=black][font=宋体]包括通过系统调用进入内核模式的用户任务[/font][/color][color=black][font=Tahoma]),[/font][/color][color=black][font=宋体]只能等待它们自己主动释放[/font][/color][color=black][font=Tahoma]CPU[/font][/color][color=black][font=宋体]。这样必然导致一些重要任务延时以等待系统调用结束。[/font][/color][color=black][font=Tahoma][/font][/color]
[color=black][font=宋体]一个内核任务可以被抢占[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]为的是让重要的用户应用程序可以继续运行。这样做最主要的优势是极大地增强系统的用户交互性。[/font][/color][color=black][font=Tahoma][/font][/color]
[color=black][font=Tahoma]2.6[/font][/color][color=black][font=宋体]内核并不是真正的[/font][/color][color=black][font=Tahoma]RTOS(Real Time Operation System),[/font][/color][color=black][font=宋体]其在内核代码中插入了抢占点[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]允许调度程序中止当前进程而调用更高优先级的进程[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]通过对抢占点的测试避免不合理的系统调用延时。[/font][/color][color=black][font=Tahoma]2.6[/font][/color][color=black][font=宋体]内核在一定程度上是可抢占的[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]比[/font][/color][color=black][font=Tahoma]2.4[/font][/color][color=black][font=宋体]内核具备更好的响应性。但也不是所有的内核代码段都可以被抢占[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]可以锁定内核代码的关键部分[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]确保[/font][/color][color=black][font=Tahoma]CPU[/font][/color][color=black][font=宋体]的数据结构和状态始终受到保护而不被抢占。[/font][/color][color=black][font=Tahoma][/font][/color]
[color=black][font=宋体]软件需要满足最终时间限制与虚拟内存请求页面调度之间是相互矛盾的。慢速的页错误处理将会破坏系统的实时响应性[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]而[/font][/color][color=black][font=Tahoma]2.6[/font][/color][color=black][font=宋体]内核可以编译无虚拟内存系统避免这个问题[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]这是解决问题的关键[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]但要求软件设计者有足够的内存来保证任务的执行。[/font][/color][color=black][font=Tahoma][/font][/color]
[color=#000000][font=Times New Roman]1.2 [/font][font=宋体]有效的调度程序[/font][/color][/size]
[size=2][color=black][font=Tahoma]2.6[/font][/color][color=black][font=宋体]版本的[/font][/color][color=black][font=Tahoma] Linux[/font][/color][color=black][font=宋体]内核使用了由[/font][/color][color=black][font=Tahoma] Ingo Molnar[/font][/color][color=black][font=宋体]开发的新的调度器算法[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]称为[/font][/color][color=black][font=Tahoma]O(1)[/font][/color][color=black][font=宋体]算法[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]如图[/font][/color][color=black][font=Tahoma]1[/font][/color][color=black][font=宋体]所示。它在高负载情况下执行得极其出色[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]并且当有很多处理器并行时也可以很好地扩展[/font][/color][color=black][font=Tahoma][2][/font][/color][color=black][font=宋体]。过去的调度程序需要查找整个[/font][/color][color=black][font=Tahoma]ready task[/font][/color][color=black][font=宋体]队列[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]并且计算它们的重要性以决定下一步调用的[/font][/color][color=black][font=Tahoma]task,[/font][/color][color=black][font=宋体]需要的时间随[/font][/color][color=black][font=Tahoma]task[/font][/color][color=black][font=宋体]数量而改变。[/font][/color][color=black][font=Tahoma]O(1)[/font][/color][color=black][font=宋体]算法则不再每次扫描所有的任务[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]当[/font][/color][color=black][font=Tahoma]task[/font][/color][color=black][font=宋体]就绪时被放入一个活动队列中[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]调度程序每次从中调度适合的[/font][/color][color=black][font=Tahoma]task,[/font][/color][color=black][font=宋体]因而每次调度都是一个固定的时间。任务运行时分配一个时间片[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]当时间片结束[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]该任务将放弃处理器并根据其优先级转到过期队列中。活动队列中任务全部调度结束后[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]两个队列指针互换[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]过期队列成为当前队列[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]调度程序继续以简单的算法调度当前队列中的任务。这在多处理器的情况更能提高[/font][/color][color=black][font=Tahoma]SMP[/font][/color][color=black][font=宋体]的效率[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]平衡处理器的负载[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]避免进程在处理器间的跳跃。[/font][/color][color=black][font=Tahoma][/font][/color]
[color=black][font=宋体]图[/font][/color][color=black][font=Tahoma]1 O(1)[/font][/color][color=black][font=宋体]调度算法[/font][/color][color=black][font=Tahoma][/font][/color]
[color=#000000][font=Times New Roman]1.3 [/font][font=宋体]同步原型与共享内存[/font][/color][/size]
[size=2][color=black][font=宋体]多进程应用程序需要共享内存和外设资源[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]为避免竞争采用了互斥的方法保证资源在同一时刻只被一个任务访问。[/font][/color][color=black][font=Tahoma]Linux[/font][/color][color=black][font=宋体]内核用一个系统调用来决定一个线程阻塞或是继续执行来实现互斥[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]在线程继续执行时[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]这个费时的系统调用就没有必要了。[/font][/color][color=black][font=Tahoma]Linux2.6[/font][/color][color=black][font=宋体]所支持的[/font][/color][color=black][font=Tahoma]Fast User-Space Mutexes [/font][/color][color=black][font=宋体]可以从用户空间检测是不是需要阻塞线程[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]只在需要时执行系统调用终止线程。它同样采用调度优先级来确定将要执行的进程[/font][/color][color=black][font=Tahoma][4][/font][/color][color=black][font=宋体]。[/font][/color][color=black][font=宋体]多处理器嵌入式系统各处理器之间需要共享内存[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]对称多处理技术对内存访问采用同等优先级[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]在很大程度上限制了系统的可量测性和处理效率。[/font][/color][color=black][font=Tahoma]Linux2.6[/font][/color][color=black][font=宋体]则提供了新的管理方法[/font][/color][color=black][font=Tahoma]——NUMA(Non Uniform Memory Access)[/font][/color][color=black][font=宋体]。[/font][/color][color=black][font=Tahoma]NUMA[/font][/color][color=black][font=宋体]根据处理器和内存的拓扑布局[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]在发生内存竞争时[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]给予不同处理器不同级别权限以解决内存抢占瓶颈[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]提高吞吐量。[/font][/color][color=black][font=Tahoma][/font][/color]
[color=#000000][font=Times New Roman]1.4 POSIX[/font][font=宋体]线程及[/font][font=Times New Roman]NPTL[/font][/color][color=black][font=宋体]新的线程模型基于一个[/font][/color][color=black][font=Tahoma]1:1[/font][/color][color=black][font=宋体]的线程模型[/font][/color][color=black][font=Tahoma]([/font][/color][color=black][font=宋体]一个内核线程对应一个用户线程[/font][/color][color=black][font=Tahoma]),[/font][/color][color=black][font=宋体]包括内核对新的[/font][/color][color=black][font=Tahoma] NPTL(Native POSIX Threading Library)[/font][/color][color=black][font=宋体]的支持[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]这是对以前内核线程方法的明显改进。[/font][/color][color=black][font=Tahoma]2.6[/font][/color][color=black][font=宋体]内核同时还提供[/font][/color][color=black][font=Tahoma]POSIX signals[/font][/color][color=black][font=宋体]和[/font][/color][color=black][font=Tahoma]POSIX high-resolution timers[/font][/color][color=black][font=宋体]。[/font][/color][color=black][font=Tahoma]POSIX signals[/font][/color][color=black][font=宋体]不会丢失[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]并且可以携带线程间或处理器间的通信信息。嵌入式系统要求系统按时间表执行任务[/font][/color][color=black][font=Tahoma],POSIX timer[/font][/color][color=black][font=宋体]可以提供[/font][/color][color=black][font=Tahoma]1kHz[/font][/color][color=black][font=宋体]的触发器使这一切变得简单[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]从而可以有效地控制进度。[/font][/color][color=black][font=Tahoma][/font][/color]
[color=#000000][font=Times New Roman]1.5 [/font][font=宋体]微控制器的支持[/font][/color][color=black][font=Tahoma]Linux2.6[/font][/color][color=black][font=宋体]内核加入了多种微控制器的支持。无[/font][/color][color=black][font=Tahoma]MMU[/font][/color][color=black][font=宋体]的处理器以前只能利用一些改进的分支版本[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]如[/font][/color][color=black][font=Tahoma]uClinux,[/font][/color][color=black][font=宋体]而[/font][/color][color=black][font=Tahoma]2.6[/font][/color][color=black][font=宋体]内核已经将其整合进了新的内核中[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]开始支持多种流行的无[/font][/color][color=black][font=Tahoma]MMU[/font][/color][color=black][font=宋体]微控制器[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]如[/font][/color][color=black][font=Tahoma]Dragonball[/font][/color][color=black][font=宋体]、[/font][/color][color=black][font=Tahoma]ColdFire[/font][/color][color=black][font=宋体]、[/font][/color][color=black][font=Tahoma]Hitachi H8/300[/font][/color][color=black][font=宋体]。[/font][/color][color=black][font=Tahoma]Linux[/font][/color][color=black][font=宋体]在无[/font][/color][color=black][font=Tahoma]MMU[/font][/color][color=black][font=宋体]控制器上仍旧支持多任务处理[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]但没有内存保护功能。同时也加入了许多流行的控制器的支持[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]如[/font][/color][color=black][font=Tahoma]S3C2410[/font][/color][color=black][font=宋体]等。[/font][/color][color=black][font=Tahoma][/font][/color]
[color=#000000][font=Times New Roman]1.6 [/font][font=宋体]面向应用[/font][/color][color=black][font=宋体]嵌入式应用有用户定制的特点[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]硬件设计都针对特定应用开发[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]这给系统带来对非标准化设计支持的问题[/font][/color][color=black][font=Tahoma]([/font][/color][color=black][font=宋体]如[/font][/color][color=black][font=Tahoma]IRQ[/font][/color][color=black][font=宋体]的管理[/font][/color][color=black][font=Tahoma])[/font][/color][color=black][font=宋体]。为了更好地实现[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]可以采用部件化的操作系统。[/font][/color][color=black][font=Tahoma]Linux2.6[/font][/color][color=black][font=宋体]采用的子系统架构将功能模块化[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]可以定制而对其他部分影响最小。同时[/font][/color][color=black][font=Tahoma]Linux2.6[/font][/color][color=black][font=宋体]提供了多种新技术的支持以实现各种应用开发[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]如[/font][/color][color=black][font=Tahoma]Advanced Linux Sound Architecture(ALSA)[/font][/color][color=black][font=宋体]和[/font][/color][color=black][font=Tahoma]Video4Linux[/font][/color][color=black][font=宋体]等[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]对多媒体信息处理更加方便[/font][/color][color=black][font=Tahoma];[/font][/color][color=black][font=宋体]对[/font][/color][color=black][font=Tahoma]USB2.0[/font][/color][color=black][font=宋体]的支持[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]提供更高速的传输[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]增加蓝牙无线接口、音频数据链接和面向链接的数据传输[/font][/color][color=black][font=Tahoma]L2CAP,[/font][/color][color=black][font=宋体]满足短距离的无线连接的需要[/font][/color][color=black][font=Tahoma];[/font][/color][color=black][font=宋体]而且在[/font][/color][color=black][font=Tahoma]2.6[/font][/color][color=black][font=宋体]内核中还可以配置成无输入和显示的纯粹无用户接口系统。[/font][/color][color=black][font=Tahoma][/font][/color]
[color=#000000][font=Arial]2[/font][font=黑体]、应用研究[/font][/color][color=black][font=宋体]在[/font][/color][color=black][font=Tahoma]S3C2410[/font][/color][color=black][font=宋体]开发板上移植嵌入式[/font][/color][color=black][font=Tahoma]Linux 2.6.11.7[/font][/color][color=black][font=宋体]内核系统[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]应用于构建[/font][/color][color=black][font=Tahoma]H.264[/font][/color][color=black][font=宋体]多媒体系统。[/font][/color][color=black][font=Tahoma][/font][/color]
[color=#000000][font=Times New Roman]2.1 [/font][font=宋体]建立交叉编译环境[/font][/color][color=black][font=宋体]在[/font][/color][color=black][font=Tahoma]RedHat9[/font][/color][color=black][font=宋体]的主机上进行内核移植开发[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]首先需要建立交叉编译环境。由于[/font][/color][color=black][font=Tahoma]2.6[/font][/color][color=black][font=宋体]内核中采用了一些新的特性和指令[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]需要采用较新的工具集[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]采用[/font][/color][color=black][font=Tahoma]binutils-2.15[/font][/color][color=black][font=宋体]、[/font][/color][color=black][font=Tahoma]gcc-3.4.2[/font][/color][color=black][font=宋体]、[/font][/color][color=black][font=Tahoma]glibc-2.2.5[/font][/color][color=black][font=宋体]、[/font][/color][color=black][font=Tahoma]linux-2.6.8[/font][/color][color=black][font=宋体]、[/font][/color][color=black][font=Tahoma]glibc-linuxthreads-2.2.5[/font][/color][color=black][font=宋体]来建立交叉编译工具链[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]建立之后将工具链路径加入系统路径[/font][/color][color=black][font=Tahoma]$PATH[/font][/color][color=black][font=宋体]中。[/font][/color][color=black][font=Tahoma][/font][/color]
[color=#000000][font=Times New Roman]2.2 [/font][font=宋体]内核修改[/font][/color][color=black][font=Tahoma]Linux 2.6.11.7[/font][/color][color=black][font=宋体]内核加入了对[/font][/color][color=black][font=Tahoma]S3C2410[/font][/color][color=black][font=宋体]芯片的支持[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]不再需要任何补丁文件。修改内核源码中[/font][/color][color=black][font=Tahoma]Makefile[/font][/color][color=black][font=宋体]的交叉编译选项[/font][/color][color=black][font=Tahoma]ARCH=arm,CROSS_COMPILE=arm-linux-[/font][/color][color=black][font=宋体]。针对硬件配置[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]需要在[/font][/color][color=black][font=Tahoma]arch/arm/mach-s3c2410/devs.c[/font][/color][color=black][font=宋体]或者[/font][/color][color=black][font=Tahoma]smdk2410.c[/font][/color][color=black][font=宋体]中添加[/font][/color][color=black][font=Tahoma]FLASH[/font][/color][color=black][font=宋体]的分区信息[/font][/color][color=black][font=Tahoma]s3c_nand_info,[/font][/color][color=black][font=宋体]如表[/font][/color][color=black][font=Tahoma]1[/font][/color][color=black][font=宋体]。[/font][/color][color=black][font=Tahoma][/font][/color]
[color=black][font=宋体]表[/font][/color][color=black][font=Tahoma]1 NAND FLASH[/font][/color][color=black][font=宋体]分区表[/font][/color][color=black][font=Tahoma][/font][/color]
[color=black][font=宋体]分区名[/font][/color][color=black][font=宋体] [/font][/color][color=black][font=Tahoma] [/font][/color][color=black][font=宋体] 起始地址[/font][/color][color=black][font=宋体] 大[/font][/color][color=black][font=宋体]小[/font][/color][color=black][font=Tahoma][/font][/color]
[color=black][font=Tahoma]Vivi [/font][/color][color=black][font=宋体] [/font][/color][color=black][font=Tahoma] 0x00000000 [/font][/color][color=black][font=宋体] [/font][/color][color=black][font=Tahoma]0x00020000[/font][/color]
[color=black][font=Tahoma]Param [/font][/color][color=black][font=宋体] [/font][/color][color=black][font=Tahoma] 0x00020000 [/font][/color][color=black][font=宋体] [/font][/color][color=black][font=Tahoma]0x00010000[/font][/color]
[color=black][font=Tahoma]Kernel [/font][/color][color=black][font=宋体] [/font][/color][color=black][font=Tahoma] 0x00030000 [/font][/color][color=black][font=宋体] [/font][/color][color=black][font=Tahoma]0x001c0000[/font][/color]
[color=black][font=Tahoma]Root [/font][/color][color=black][font=宋体] [/font][/color][color=black][font=Tahoma] [/font][/color][color=black][font=宋体] [/font][/color][color=black][font=Tahoma] 0x00200000 [/font][/color][color=black][font=宋体] [/font][/color][color=black][font=Tahoma]0x00200000[/font][/color]
[color=black][font=Tahoma]Usr [/font][/color][color=black][font=宋体] [/font][/color][color=black][font=Tahoma]0x00400000 [/font][/color][color=black][font=宋体] [/font][/color][color=black][font=Tahoma]0x03c00000[/font][/color]
[color=black][font=宋体]然后在[/font][/color][color=black][font=Tahoma]s3c_device_nand[/font][/color][color=black][font=宋体]中增加[/font][/color][color=black][font=Tahoma].dev={.platform_data=&s3c_nand_info},[/font][/color][color=black][font=宋体]在[/font][/color][color=black][font=Tahoma]arch/arm/mach-s3c2410/mach-smdk2410.c[/font][/color][color=black][font=宋体]中的[/font][/color][color=black][font=Tahoma]__initdata[/font][/color][color=black][font=宋体]部分增加[/font][/color][color=black][font=Tahoma]&s3c_device_nand,[/font][/color][color=black][font=宋体]使内核在启动时初始化[/font][/color][color=black][font=Tahoma]NAND FLASH[/font][/color][color=black][font=宋体]信息。[/font][/color][color=black][font=Tahoma][/font][/color]
[color=#000000][font=Times New Roman]2.3 [/font][font=宋体]内核编译加载[/font][/color][color=black][font=宋体]对内核进行适当的配置是一个量体裁衣的过程。由于[/font][/color][color=black][font=Tahoma]2.6[/font][/color][color=black][font=宋体]内核会根据本地系统配置进行初始设置[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]可以导入内核源码默认[/font][/color][color=black][font=Tahoma]s3c2410[/font][/color][color=black][font=宋体]的配置文件[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]方便加载内核基本配置[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]然后再选择所需选项。对[/font][/color][color=black][font=Tahoma]MTD[/font][/color][color=black][font=宋体]配置选择支持[/font][/color][color=black][font=Tahoma]MTD[/font][/color][color=black][font=宋体]设备驱动以及[/font][/color][color=black][font=Tahoma]NAND FLASH[/font][/color][color=black][font=宋体]驱动[/font][/color][color=black][font=Tahoma];[/font][/color][color=black][font=宋体]选择支持要用到的各类文件系统[/font][/color][color=black][font=Tahoma](DEVFS[/font][/color][color=black][font=宋体]、[/font][/color][color=black][font=Tahoma]TMPFS[/font][/color][color=black][font=宋体]、[/font][/color][color=black][font=Tahoma]CRAMFS[/font][/color][color=black][font=宋体]、[/font][/color][color=black][font=Tahoma]YAFFS[/font][/color][color=black][font=宋体]、[/font][/color][color=black][font=Tahoma]EXT2[/font][/color][color=black][font=宋体]、[/font][/color][color=black][font=Tahoma]NFS)[/font][/color][color=black][font=宋体]以及网络设备和协议[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]本系统加载了网络芯片[/font][/color][color=black][font=Tahoma]CS8900[/font][/color][color=black][font=宋体]以及[/font][/color][color=black][font=Tahoma]USB[/font][/color][color=black][font=宋体]支持[/font][/color][color=black][font=Tahoma];[/font][/color][color=black][font=宋体]在[/font][/color][color=black][font=Tahoma]H.264[/font][/color][color=black][font=宋体]多媒体系统中还需要加载[/font][/color][color=black][font=Tahoma]Frame buffer[/font][/color][color=black][font=宋体]以支持[/font][/color][color=black][font=Tahoma]LCD[/font][/color][color=black][font=宋体]显示功能。使用交叉编译工具编译内核源码后[/font][/color][color=black][font=Tahoma], [/font][/color][color=black][font=宋体]会在[/font][/color][color=black][font=Tahoma]arch/arm/boot/[/font][/color][color=black][font=宋体]下生成名为[/font][/color][color=black][font=Tahoma]zImage[/font][/color][color=black][font=宋体]的内核映像[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]在[/font][/color][color=black][font=Tahoma]Boot loader[/font][/color][color=black][font=宋体]的命令提示模式下使用下载命令完成内核加载到开发板的存储设备[/font][/color][color=black][font=Tahoma]FLASH[/font][/color][color=black][font=宋体]中。编译过程[/font][/color][color=black][font=Tahoma]([/font][/color][color=black][font=宋体]相对以前版本的编译过程[/font][/color][color=black][font=Tahoma],2.6[/font][/color][color=black][font=宋体]内核编译有所简化[/font][/color][color=black][font=Tahoma]):[/font][/color]
[color=black][font=Tahoma]make mrproper[/font][/color]
[color=black][font=Tahoma]make menuconfig([/font][/color][color=black][font=宋体]字符界面[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]或者用[/font][/color][color=black][font=Tahoma]make xconfig[/font][/color][color=black][font=宋体]图形界面[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]但需要[/font][/color][color=black][font=Tahoma]Qt[/font][/color][color=black][font=宋体]库的支持[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]而[/font][/color][color=black][font=Tahoma]make gconfig[/font][/color][color=black][font=宋体]则需要[/font][/color][color=black][font=Tahoma]GTK[/font][/color][color=black][font=宋体]库的支持[/font][/color][color=black][font=Tahoma])[/font][/color]
[color=black][font=Tahoma]make[/font][/color]
[color=black][font=Tahoma]make bzImage[/font][/color]
[color=#000000][font=Times New Roman]2.4 [/font][font=宋体]文件系统[/font][/color][color=black][font=Tahoma]Linux[/font][/color][color=black][font=宋体]采用文件系统组织系统中的文件和设备[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]为设备和用户程序提供统一接口。[/font][/color][color=black][font=Tahoma]Linux [/font][/color][color=black][font=宋体]支持多种文件系统[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]本系统使用[/font][/color][color=black][font=Tahoma]CRAMFS[/font][/color][color=black][font=宋体]格式的只读根文件系统[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]而将[/font][/color][color=black][font=Tahoma]FLASH[/font][/color][color=black][font=宋体]中的[/font][/color][color=black][font=Tahoma]USER[/font][/color][color=black][font=宋体]区使用支持可读写的[/font][/color][color=black][font=Tahoma]YA FFS[/font][/color][color=black][font=宋体]文件系统格式[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]方便添加自己的应用程序。[/font][/color][color=black][font=Tahoma][/font][/color]
[color=black][font=宋体]在根文件系统中[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]为保护系统的基本设置不被更改[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]采用[/font][/color][color=black][font=Tahoma]CRAMFS[/font][/color][color=black][font=宋体]格式。采用[/font][/color][color=black][font=Tahoma]DEVFS[/font][/color][color=black][font=宋体]来实现基本设备的建立挂载[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]同时使用[/font][/color][color=black][font=Tahoma]BusyBox[/font][/color][color=black][font=宋体]也是一个缩小根文件系统的办法[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]提供了系统的基本指令[/font][/color][color=black][font=Tahoma];[/font][/color][color=black][font=宋体]还需要建立一些必备的目录[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]添加所需配置文件[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]如[/font][/color][color=black][font=Tahoma]fstab[/font][/color][color=black][font=宋体]、[/font][/color][color=black][font=Tahoma]inittab[/font][/color][color=black][font=宋体]等[/font][/color][color=black][font=Tahoma];[/font][/color][color=black][font=宋体]还有一个重要的工作就是添加系统应用必备的动态函数库。使用生成工具[/font][/color][color=black][font=Tahoma]mkcramfs [/font][/color][color=black][font=宋体]将整个根文件目录里的内容制作成映像文件。[/font][/color][color=black][font=Tahoma][/font][/color]
[color=black][font=Tahoma]mkcramfs rootfs rootfs.ramfs[/font][/color]
[color=black][font=Tahoma]YAFFS[/font][/color][color=black][font=宋体]文件系统格式的支持需要将驱动加入到内核代码树下[/font][/color][color=black][font=Tahoma]fs/yaffs/,[/font][/color][color=black][font=宋体]修改内核配置文件[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]就可以在内核编译中加载对该文件系统的支持。使用[/font][/color][color=black][font=Tahoma]mkyaffs[/font][/color][color=black][font=宋体]工具将[/font][/color][color=black][font=Tahoma]NAND FLASH[/font][/color][color=black][font=宋体]分区格式化为[/font][/color][color=black][font=Tahoma]YAFFS[/font][/color][color=black][font=宋体]分区[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]将[/font][/color][color=black][font=Tahoma]mkyaffsimage[/font][/color][color=black][font=宋体]生成的应用程序镜像烧写进[/font][/color][color=black][font=Tahoma]YAFFS[/font][/color][color=black][font=宋体]分区[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]在启动时通过写入[/font][/color][color=black][font=Tahoma]fstab[/font][/color][color=black][font=宋体]自动加载[/font][/color][color=black][font=Tahoma]YAFFS[/font][/color][color=black][font=宋体]分区即可。[/font][/color][color=black][font=Tahoma][/font][/color]
[color=#000000][font=Times New Roman]2.5 [/font][font=宋体]网络设备驱动[/font][/color][color=black][font=宋体]系统中采用[/font][/color][color=black][font=Tahoma]CS8900A[/font][/color][color=black][font=宋体]的[/font][/color][color=black][font=Tahoma]10M[/font][/color][color=black][font=宋体]网络芯片[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]它使用[/font][/color][color=black][font=Tahoma]S3C2410[/font][/color][color=black][font=宋体]的[/font][/color][color=black][font=Tahoma]nGCS3[/font][/color][color=black][font=宋体]和[/font][/color][color=black][font=Tahoma]IRQ_EINT9,[/font][/color][color=black][font=宋体]相应修改[/font][/color][color=black][font=Tahoma]linux/arch/arm/mach-s3c2410/irq.c,[/font][/color][color=black][font=宋体]并在[/font][/color][color=black][font=Tahoma]mach-smdk2410.c[/font][/color][color=black][font=宋体]的[/font][/color][color=black][font=Tahoma]smdk2410_iodesc[][/font][/color][color=black][font=宋体]中增加[/font][/color][color=black][font=Tahoma]{SMDK2410_ETH_IO,S3C2410_CS2, SZ_1M, MT_DEVICE},[/font][/color][color=black][font=宋体]内核源码中加入芯片的驱动程序[/font][/color][color=black][font=Tahoma]drivers/net/arm/cs8900.h[/font][/color][color=black][font=宋体]和[/font][/color][color=black][font=Tahoma]cs8900.c,[/font][/color][color=black][font=宋体]并且配置网络设备驱动的[/font][/color][color=black][font=Tahoma]Makefile[/font][/color][color=black][font=宋体]和[/font][/color][color=black][font=Tahoma]Kconfig[/font][/color][color=black][font=宋体]文件[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]加入[/font][/color][color=black][font=Tahoma]CS8900A[/font][/color][color=black][font=宋体]的配置选项[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]这样可以在内核编译时加载网络设备的驱动。[/font][/color][color=black][font=Tahoma][/font][/color]
[color=black][font=宋体]在[/font][/color][color=black][font=Tahoma]Linux2.6[/font][/color][color=black][font=宋体]应用的同时[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]也要看到其与以前版本内核比较存在的一些问题。在内核的编译时间、内核镜像大小、内核占用[/font][/color][color=black][font=Tahoma]RAM[/font][/color][color=black][font=宋体]空间大小、系统启动时间相对[/font][/color][color=black][font=Tahoma]Linux2.4[/font][/color][color=black][font=宋体]而言都存在不同程度的不足[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]但在硬件条件日益进步的现今可以接受[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]而且一部分也是由于功能加强必然带来的。虽然[/font][/color][color=black][font=Tahoma]Linux[/font][/color][color=black][font=宋体]并非一个真正的实时操作系统[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]但[/font][/color][color=black][font=Tahoma]2.6[/font][/color][color=black][font=宋体]内核的改进能够满足大部分的应用需求[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]所以[/font][/color][color=black][font=Tahoma]Linux2.6[/font][/color][color=black][font=宋体]内核将会在嵌入式系统领域大展身手。[/font][/color][color=black][font=Tahoma][/font][/color]
[color=black][font=宋体]参考文献[/font][/color][color=black][font=Tahoma][/font][/color]
[color=black][font=Tahoma]1[/font][/color][color=black][font=宋体]、[/font][/color][color=black][font=Tahoma]Alessandro Rubini,Jonathan Corbet[/font][/color][color=black][font=宋体]著[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]魏永明[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]骆刚[/font][/color][color=black][font=Tahoma],[/font][/color][color=black][font=宋体]姜[/font][/color][color=black][font=宋体]君译[/font][/color][color=black][font=Tahoma].Linux[/font][/color][color=black][font=宋体]设备驱动[/font][/color][color=black][font=Tahoma][M].[/font][/color][color=black][font=宋体]北京[/font][/color][color=black][font=Tahoma]:[/font][/color][color=black][font=宋体]中国电力出版社[/font][/color][color=black][font=Tahoma],2004[/font][/color]
[color=black][font=Tahoma]2[/font][/color][color=black][font=宋体]、[/font][/color][color=black][font=Tahoma]Anand K Santhanam. [/font][/color][color=black][font=宋体]走向[/font][/color][color=black][font=Tahoma]Linux2.6[EB/OL]. Dec. 2003.[/font][/color]
[color=black][font=Tahoma][url=http://www-128.ibm.com/deve%20loperworks/cn/linux/%20l-inside/index.html][color=#333333]http://www-128.ibm.com/deve loperworks/cn/linux/ l-inside/index.html[/color][/url][/font][/color]
[color=black][font=Tahoma]3[/font][/color][color=black][font=宋体]、[/font][/color][color=black][font=Tahoma]S3C2410X 32-Bit RISC Microprocessor User´s Manual[Z]. SAMSUNG Electronics. Revision 1.2[/font][/color]
[color=black][font=Tahoma]4[/font][/color][color=black][font=宋体]、[/font][/color][color=black][font=Tahoma]Brandon White. Linux 2.6: A Breakthrough for Embedded Systems[EB/OL].[url=http://linuxdevices.com/articles/AT7751365763.html][color=black]http://linuxdevices.com/articles/AT7751365763.html[/color][/url] Sep.9,2003[/font][/color]
[font=Tahoma]5[/font][font=宋体]、[/font][font=Tahoma]Karim Yaghmour. Building Embedded Linux Systems[M]. O’Reilly. April, 2003[/font][/size]
[[i] 本帖最后由 wdefu 于 2007-5-28 23:06 编辑 [/i]]