Linux操作系统在S3C2410上的移植研究
2021-09-22李殿涛
李殿涛
(滨州医学院附属医院 山东省滨州市 256603)
1 引言
近来,随着技术的发展,越来越多的处理器速度越来越快,功耗也越来越低,总之性能也越来越好,因此整个系统能够处理的事物也越来越复杂,因此能否在一个处理器上实现主流操作系统的移植便呈现在我们的面前,当前Linux操作系统由于开放源代码,功能强大,更新快变进入了我们的视线,而三星公司的产品S3C2410便是移植的平台。
2 硬件平台的介绍
本篇文章给予的硬件平台S3C2410 是三星公司的基于ARM9处理的嵌入式系统板,它的应用领域就是在消费电子领域,并且在系统板上集成了许多的设备,像存储设备如128M的SDRAM,64M的NAND flash。还用进行网络通信的网卡DM9000等,还有一系列的USB接口,音频接口。有如此丰富的外设为我们的应用提供了很多的便利。
3 Linux内核源码的介绍
3.1 内核源码的架构
Linux的内核源码组织的很是有序,不同功能的文件通过不同的目录组织在一块,这样的组织形式使得开发出的内核容易调试,层次性非常清楚[1],封装性做的很好,这样的软件可以为我们进行移植带来了很多的方便。
Linux的内核文件的目录如下:
/arch 关于体系架构的目录,在本文中主要就是针对这部分目录下的文件进行的修改
/ driver 目录这是主要的驱动程序的目录
/fs 文件系统目录
/kernel 等等其他的目录。
3.2 本文主要修改的目录下的文件
进行移植时要修改必要的文件已适合我们的目标系统,在本文中,我们主要修改的是/arch目录下的相关文件[2],由于内核的版本较高,/driver目录下都有我们所需要的驱动,并且驱动程序的版本也较高,不需要我们的修改。
4 移植的基本问题
4.1 移植的概念
所谓的移植,指的是将某个操作系统的源代码能够在另外的体系架构的处理器上运行,以便在这个处理器上实现操作系统的功能。
4.2 Linux操作系统移植所面临的问题
虽然说Linux是一个开放源代码的操作系统,并且其内核源码树维护的极为工整,像驱动程序的源代码放在单独的目录中,这样的目录架构也确实非常便于操作系统的移植,但是对于嵌入式操作系统的移植确实还有许多的问题,如在存储器方面的设计,这都是我们需要考虑的问题。
图1:Linux内核的配置
图2:编译阶段图
4.3 移植所需要的工具以及内核的要求
4.3.1 编译器的选择
因为我们要做的生成后的真个内核要能在ARM体系架构的处理器中运行,因此我们不能使用仅仅做本地编译的GCC,(仅仅能在我们的PC中编译源代码并且编译后的程序在本地PC上运行的编译器)。
我们选择的编译器是交叉编译器arm-linux-gcc,他能够编译生成基于目标平台是arm的可执行程序,这样我们的编译器也选择好了。
4.3.2 编译器的版本
在Linux下进行软件开发是一个比较辛苦的工作,因为要面临如版本的问题,我们最好选用高一些的版本来编译Linux的内核。因为很多高版本的内核主要是作了一部分的优化而这些优化是必须要有高版本编译器支持的。我们最终选取的是arm-linux-gcc 4.2.2
4.3.3 对内核的要求
一般来说内核的版本越高,它所提供的功能就越强大,但是新的问题就是产生,那就是高版本的产生的BUG也较多,为此我们应折中一下,最终我们选择的内核的版本是2.6.24,这个版本不是太高,功能也较多,恰好就是我们所要求的版本。
图3:Linux在S3C2410上的解压
图4:Linux内核在S3C2410上的执行
5 移植的过程
5.1 顶层Makefile的必要的修改
首先,我们要对内核源码的顶层的Makefile做一些修改,具体如下
特别是第二个选项,一定要标注上绝对路径,以防系统不能将其识别。
5.2 设置必要的NAND FLASH分区
由于目标板使用的是64M的NAND Flash作为系统的存储器,所以我们应该建立一个分区表,来定义64M的空间的划分,以及各区的启示地址及大小。相应的修改文件是arch/arm/mach-s3c2410/devs.c[3]
我们只要增加如下的结构体变量即可
上述代码的作用是建立一个64M的分区表,其中四个分区为启动程序,内核,根文件系统还有用户空间。
5.3 内核的配置
我们若使系统稳定并快速的运行,配置是非常关键的,我们之选择与本系统硬件相关的进行配置。具体配置图形如图1所示。
5.4 内核的编译及安装
配置完了我们便可以编译,在Linux下安装软件的朋友都知道Linux的软件包都是基于源码的,必须要经过编译才能安装,然而内核也是如此,不过我们可以做更多的事情,可以在编译完了接着进行内核的压缩,压缩为bzImage格式的。
命令如下:make zImage[4]
图2是编译阶段的截图。
这仅仅是其中一步,因为我们在配置内核的时候很多的驱动程序部分以模块的形式编译进内核,因此我们必须要把模块编译进内核,其具体的命令是
make module_installed.
然后我们采用U-boot将操作系统由nand flash 加载到内存中,由于我们的S3C2410的sdram的地址空间是0x30008000-3ああああf,这个地址范围由linux源代码中的/arch/arm/mach-S3C2410下的文件提供,所以我们会看到如图3和图4所示的界面。
6 总结
经过以上的步骤,我们看到了移植后的内核能够在S3C2410上进行稳定的运行,本文提出了一种针对移植的简单便易的方法,对于嵌入式系统开发具有实际的应用价值,由于本人采取的方法简单,省时,可靠,可以缩短嵌入式产品的研发时间,能够使产品更加快速的上市,对于整个产业的发展也是很有好处的。