首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于ARM-Linux和S3C2440的嵌入式Linux内核设计

基于ARM-Linux和S3C2440的嵌入式Linux内核设计

1 引言
        嵌入式系统(Embedded System)是当今最热门的领域之一,它可以定义为:以应用为中心、以计算机技术为基础、软硬件可裁剪、适用于应用系统,对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。构建嵌入式系统需要从两个方面进行选型,一是硬件平台的选择,二是嵌入式操作系统的选择。
        硬件平台的选择包括处理器以及相关芯片的选型。嵌入式处理器种类繁多,有ARM、MIPS、 PPC等多种构架。这里选择三星公司的ARM9芯片S3C2440。ARM处理器的文档丰富,各类嵌入式软件大多支持ARM处理器,开发起来相对容易上手。在嵌入式操作系统方面,目前比较流行的几个嵌入式操作系统是Linux、Windows CE、VxWorks、Palm OS等,这里选择嵌入式Linux,其优点在于它是遵循GPL (General Public License)协议的开放源码操作系统,完全免费;其内核中支持的硬件种类繁多,几乎在网上可以找到所有的硬件驱动程序,有着大量的应用程序可用和庞大的开发人员群体。操作系统的选型极其重要,它会影响到工程后期的发布以及软件的维护。
        2 软硬件环境构建
        本设计采用主机与目标板结合的交叉开发模式, 如图1所示。

        主机自然指PC机,目标板指S3C2440开发板。开发板采用S3C2440A作为CPU;两片总共64M bytes 的 SDRAM 芯片作为内存;具有64MB NAND Flash和2MB NOR Flash两种Flash芯片;另外还有需要串口、并口等。
        嵌入式Linux开发可分为下面3个步骤:
        (1)在主机上编译Bootloader,然后通过JTAG 烧入单板。此方法速度较慢,适用于烧写空白单板;
        (2)在主机上编译嵌入式L i nu x内核,通过Bootloader烧入单板或者直接启动;
        (3)在主机上编译各类应用程序,单板启动内核后通过NFS运行它们,经过验证后再烧入单板。本设计基于Ubuntu 8.10进行开发,需要注意的是,编译器版本与最后系统的搭建成功与否有着直接的关系,这里所用的是arm-linux-gcc3.4.5版本,用它编译U-Boot1.1.6,内核linux-2.6.29.3。
       3 嵌入式Linux的裁剪与移植
       3.1 Linux移植准备
        使某一个平台的代码运行在其他平台上的过程叫移植。在进行内核裁剪时,需要结合自己的硬件电路,对内核代码进行修改。本系统选用Linux的稳定版本Linux-2.6.29.3内核作为移植对象。下面简要介绍 Linux的内核结构。
        /a rch,体系结构相关的代码,对于每个架构的CPU,a rch目录下有一个对应的子目录,比如a rch/ arm/。
        /drivers,所有的设备驱动程序,里面每一个子目录对应一类驱动程序,比如drivers/char/为字符设备驱动程序,drivers/mtd/为NOR Flash、NAND Flash 等存储设备的驱动程序。
        /fs,Linux支持的文件系统的代码,每个子目录对应一种文件系统,比如fs/jffs2/、fs/ext2/、fs/ext3/。
        /init,内核的初始化代码(不是系统的引导代码),其中的main.c文件中的start_kernel函数是内核引导后 运行的第一个函数。
        / include,内核头文件,有基本头文件(存放在include/linux/目录下),各种驱动或功能部件的头文件等。
        /ipc,进程间通信的代码。
        /kernel,内核管理的核心代码,与处理器相关的代码位于arch/*/kernel/目录下。
        /lib,内核用到的一些库函数代码,比如string.c;与处理器相关的库函数代码位于arch/*/lib/目录下。
        /mm,内存管理代码,与处理器相关的内存管理代码位于arch/*/mm/目录下。
        /net,网络支持代码,每个子目录对应于网络的一个方面。
        在移植Linux之前,先了解它的启动过程。Linux 的启动过程可以分为两部分:架构/单板相关的引导过程、后续的通用启动过程。ARM架构处理器上是Linux内核vmlinux的启动。之所以强调是vmlinux,是因为其他格式的内核在进行与vmlinux相同的流程之前会有一些独特的操作。比如对于压缩格式的内核 zImage,它首先进行自解压得到vmlinux,然后执行vmlinux开始“正常的”启动流程。
继承事业,薪火相传
返回列表