论文部分内容阅读
摘 要:嵌入式系统是一个高起点的技术领域,而嵌入式Linux以多方面的优势已成为嵌入式系统领域研究的一个热点.本文首先介绍了嵌入式Linux,然后着重介绍了嵌入式Linux内核的编译过程,并最后描述了嵌入式Linux内核的移植过程。
关键词:Linux内核;编译;移植
中图分类号:TP311文献标识码:A
The Compile and Transplantation of Embedded Linux Kernel
SUN Chang-xia,GUO Yu-feng
(Information and Management Science College,Henan Agricultural University,Henan Zhengzhou 450002 )
Key words: :Linux kernel;Compile;Transplantation
当今,嵌入式Linux操作系统在嵌入式领域发展的如火如荼,它不仅继承了Linux源代码开放、内核稳定高效、软件丰富等优势,而且还具备支持广泛的处理器结构和硬件平台、占用空间小、成本低廉、结构紧凑等特点.,因此,其研究价值和市场前景将是不可估量的。
1 嵌入式Linux
目前主流的嵌入式系统有:Windows CE、Vxwork、VRTX、pSOS、Palm OS、Neculeus,但这些操作系统都是商业化产品,不仅其价格昂贵不适合低端嵌入式产品开发,而且其源代码封闭.嵌入式Linux不仅具有开放的源代码,而且所需的存储空间也很小。嵌入式Linux由一个内核及一些根据需要进行定制的系统模块组成,其内核很小,一般只有几百KB左右.Linux内核是Linux最底层、最核心的部分,Linux操作系统就是在Linux内核上发展壮大起来的,而内核的移植则是任何嵌入式Linux开发中最关键部分。
2 交叉开发环境的建立
嵌入式系统中的应用程序都是通过交叉编译得到的,所谓的交叉编译就是指利用运行在宿主机上的编译器编译某个源程序生成在能在目标平台运行的目标代码.本文所使用的交叉环境基本信息如下:宿主机为X86主机,系统为Redhat9.0,内核版本2.4.18;目标机为S3C2410。首先以root用户登陆,安装交叉编译器cross_2.95.3.tar.bz2,然后增加编译器路径:
#export PATH=$PATH:/usr/local/arm/2.95.3/bin,其中:/usr/local/arm/为交叉编译器的安装目录。
3 内核编译
建立交叉开发环境之后,就可以编译嵌入式Linux的内核了。通常编译嵌入式Linux内核都是通过不同的make命令来实现的,它的执行配置文件就是通常所说的Makefile,而不同的Makefile又通过互相的依赖关系构成一个统一的整体去完成建立依存关系、建立内核等功能。
3.1配置选项
一般内核编译配置选项有三种选择:将该功能编译进内核、不将该功能编译进内核、将该功能编译成可以在需要时动态插入到内核中的模块。每种编译模式都有各自的优缺点,如果把与核心其它部分关系较远且不经常使用的部分功能代码编译成为可加载模块, 在使用的时候可以动态加载,这样有利于减小内核的长度, 减小内核消耗的内存, 但缺点是必须要通过手动调用这些模块;如果将其编译到内核,则会方便、快捷,但是缺点是使内核变得越来越庞大,消耗更多的系统资源。因此建议将经常使用的功能直接编译到内核中,比如网卡、光驱等。
3.2内核的配置
内核的配置过程其实就是内核裁剪的过程,嵌入式Linux内核要针对具体的嵌入式设备平台软硬件需要, 裁减掉一些不必要的功能后, 这样可以更好的节省系统资源, 提高系统运行效率。
在内核配置之前为目标机选择处理器架构的选项,因此,必须在根目录makefile中修改ARCH的值:ARCH :=arm;
接下来就可以进行内核配置了,Linux 内核裁减的配置菜单命令有好几个配置方法,这几个方法实现的功能类似,只是与用户的交互界面不同。
1)make config: 基于文本的最为传统的配置界面,进入命令行,可以一行一行的配置,烦琐,不推荐使用;
2)make menuconfig: 基于文本菜单的配置界面,是字符终端下常用的方式;
3)make xconfig: 基于图形窗口模式的配置界面, Xwindow下推荐使用。
4)make oldconfig:自动读入“config”配置文件,并且只要求用户设定前次没有设定过的选项。
在这4种方法中,make menuconfig使用最为广泛,这里本文也选择使用make menuconfig的配置方法.选择相应的配置时,有三种选择,它们分别代表的含义如下:
“Y”-将该功能编译进内核
“N”-不将该功能编译进内核
“M”-将该功能编译成可以在需要时动态插入到内核中的模块。
进行配置时,大部分选项可以使用默认值,只有小部分需要根据用户不同的需要选择。例如,目标机如果配有网卡、PCMCIA卡等,需要在网络配置中选择相应卡的类型。在完成配置之后,就可以保存退出。
3.3内核编译的过程
在完成内核的裁减之后, 内核的编译就是一个非常简单的过程.执行:
(1)#make clean
这条命令是在正式编译你的内核之前先把环境给清理干净, 保证没有不正确的依赖文件存在。
(2)#make dep
由于内核源码树中的大多数文件都与一些头文件有依赖关系,因此要将内核源码树中每个子目录产生的“.depend”文件建立起依赖关系。
(3)#make zImage
建立压缩的linux内核映像。
编译完毕,在arch/arm/boot目录下将会生成ARM Linux 内核映像文件zImage,这就是将要移植到目标机的内核映像文件。
如果将来还要对内核重新进行编译,则需执行命令“make distclean”,去除依赖关系并清除以前编译产生的文件,然后重复上述步骤即可。
4 内核的移植
内核移植的方法有很多,常见的方式有网络下载(如FTP、TFTP等方式)、串口下载、USB下载等.本文采用FTP方式移植Linux内核映像文件到目标机NAND FLASH中。
首先安装FLASHFXP软件,并通过交叉网线将宿主机和目标机连接起来,同时为了保证正常移植,需要对宿主机网络进行设置,将其IP地址修改为192.168.15.20,掩码地址为255.255.255.0.启动ZLG/BOOT,进入下载模式,使用默认IP 192.168.15.115进行ftp下载.运行FTP软件,输入IP地址192.168.15.115,设置端口号为21,点击“连接”后就会开始ftp连接,连接成功后Linux内核映像文件就会被移植到目标机的NAND FLASH中。至此嵌入式Linux的编译和移植工作全部完成。
5 结束语
整个Linux内核由很多模块组成,每个模块可以独立编译,然后用连接程序将其连接在一起成为一个单独的目标程序。这种结构的最大特点是内部结构简单,子系统间易于访问,因此内核的工作效率较高.Linux是基于过程的结构,因此其助于不同的人参与不同过程的开发,.Linux 内核又是开放式的结构,它允许任何人对其进行修正、改进和完善.我们相信随着更多的Linux爱好者的加入,Linux一定会越来越完美。
参考文献:
[1]陈莉君.Linux 内核的分析及应用[J].西安邮电学院学报, 2001(3): 1-6.
[2]邹球.基于ARM2410嵌入式Linux内核的编译与移植[J].计算机工程应用技术, 1009-3044(2008)15-21157- 3.
[3]孙琼.嵌入式Linux应用程序开发详解[M].人民邮电出版社,2006(7).
[4]许信顺,贾智平.嵌入式Linux 应用编程[M.机械工业出版社,2007(1).
[5]毕伟宏.Linux 内核与内核编译,福建电脑[J].2007(2),16-18.
关键词:Linux内核;编译;移植
中图分类号:TP311文献标识码:A
The Compile and Transplantation of Embedded Linux Kernel
SUN Chang-xia,GUO Yu-feng
(Information and Management Science College,Henan Agricultural University,Henan Zhengzhou 450002 )
Key words: :Linux kernel;Compile;Transplantation
当今,嵌入式Linux操作系统在嵌入式领域发展的如火如荼,它不仅继承了Linux源代码开放、内核稳定高效、软件丰富等优势,而且还具备支持广泛的处理器结构和硬件平台、占用空间小、成本低廉、结构紧凑等特点.,因此,其研究价值和市场前景将是不可估量的。
1 嵌入式Linux
目前主流的嵌入式系统有:Windows CE、Vxwork、VRTX、pSOS、Palm OS、Neculeus,但这些操作系统都是商业化产品,不仅其价格昂贵不适合低端嵌入式产品开发,而且其源代码封闭.嵌入式Linux不仅具有开放的源代码,而且所需的存储空间也很小。嵌入式Linux由一个内核及一些根据需要进行定制的系统模块组成,其内核很小,一般只有几百KB左右.Linux内核是Linux最底层、最核心的部分,Linux操作系统就是在Linux内核上发展壮大起来的,而内核的移植则是任何嵌入式Linux开发中最关键部分。
2 交叉开发环境的建立
嵌入式系统中的应用程序都是通过交叉编译得到的,所谓的交叉编译就是指利用运行在宿主机上的编译器编译某个源程序生成在能在目标平台运行的目标代码.本文所使用的交叉环境基本信息如下:宿主机为X86主机,系统为Redhat9.0,内核版本2.4.18;目标机为S3C2410。首先以root用户登陆,安装交叉编译器cross_2.95.3.tar.bz2,然后增加编译器路径:
#export PATH=$PATH:/usr/local/arm/2.95.3/bin,其中:/usr/local/arm/为交叉编译器的安装目录。
3 内核编译
建立交叉开发环境之后,就可以编译嵌入式Linux的内核了。通常编译嵌入式Linux内核都是通过不同的make命令来实现的,它的执行配置文件就是通常所说的Makefile,而不同的Makefile又通过互相的依赖关系构成一个统一的整体去完成建立依存关系、建立内核等功能。
3.1配置选项
一般内核编译配置选项有三种选择:将该功能编译进内核、不将该功能编译进内核、将该功能编译成可以在需要时动态插入到内核中的模块。每种编译模式都有各自的优缺点,如果把与核心其它部分关系较远且不经常使用的部分功能代码编译成为可加载模块, 在使用的时候可以动态加载,这样有利于减小内核的长度, 减小内核消耗的内存, 但缺点是必须要通过手动调用这些模块;如果将其编译到内核,则会方便、快捷,但是缺点是使内核变得越来越庞大,消耗更多的系统资源。因此建议将经常使用的功能直接编译到内核中,比如网卡、光驱等。
3.2内核的配置
内核的配置过程其实就是内核裁剪的过程,嵌入式Linux内核要针对具体的嵌入式设备平台软硬件需要, 裁减掉一些不必要的功能后, 这样可以更好的节省系统资源, 提高系统运行效率。
在内核配置之前为目标机选择处理器架构的选项,因此,必须在根目录makefile中修改ARCH的值:ARCH :=arm;
接下来就可以进行内核配置了,Linux 内核裁减的配置菜单命令有好几个配置方法,这几个方法实现的功能类似,只是与用户的交互界面不同。
1)make config: 基于文本的最为传统的配置界面,进入命令行,可以一行一行的配置,烦琐,不推荐使用;
2)make menuconfig: 基于文本菜单的配置界面,是字符终端下常用的方式;
3)make xconfig: 基于图形窗口模式的配置界面, Xwindow下推荐使用。
4)make oldconfig:自动读入“config”配置文件,并且只要求用户设定前次没有设定过的选项。
在这4种方法中,make menuconfig使用最为广泛,这里本文也选择使用make menuconfig的配置方法.选择相应的配置时,有三种选择,它们分别代表的含义如下:
“Y”-将该功能编译进内核
“N”-不将该功能编译进内核
“M”-将该功能编译成可以在需要时动态插入到内核中的模块。
进行配置时,大部分选项可以使用默认值,只有小部分需要根据用户不同的需要选择。例如,目标机如果配有网卡、PCMCIA卡等,需要在网络配置中选择相应卡的类型。在完成配置之后,就可以保存退出。
3.3内核编译的过程
在完成内核的裁减之后, 内核的编译就是一个非常简单的过程.执行:
(1)#make clean
这条命令是在正式编译你的内核之前先把环境给清理干净, 保证没有不正确的依赖文件存在。
(2)#make dep
由于内核源码树中的大多数文件都与一些头文件有依赖关系,因此要将内核源码树中每个子目录产生的“.depend”文件建立起依赖关系。
(3)#make zImage
建立压缩的linux内核映像。
编译完毕,在arch/arm/boot目录下将会生成ARM Linux 内核映像文件zImage,这就是将要移植到目标机的内核映像文件。
如果将来还要对内核重新进行编译,则需执行命令“make distclean”,去除依赖关系并清除以前编译产生的文件,然后重复上述步骤即可。
4 内核的移植
内核移植的方法有很多,常见的方式有网络下载(如FTP、TFTP等方式)、串口下载、USB下载等.本文采用FTP方式移植Linux内核映像文件到目标机NAND FLASH中。
首先安装FLASHFXP软件,并通过交叉网线将宿主机和目标机连接起来,同时为了保证正常移植,需要对宿主机网络进行设置,将其IP地址修改为192.168.15.20,掩码地址为255.255.255.0.启动ZLG/BOOT,进入下载模式,使用默认IP 192.168.15.115进行ftp下载.运行FTP软件,输入IP地址192.168.15.115,设置端口号为21,点击“连接”后就会开始ftp连接,连接成功后Linux内核映像文件就会被移植到目标机的NAND FLASH中。至此嵌入式Linux的编译和移植工作全部完成。
5 结束语
整个Linux内核由很多模块组成,每个模块可以独立编译,然后用连接程序将其连接在一起成为一个单独的目标程序。这种结构的最大特点是内部结构简单,子系统间易于访问,因此内核的工作效率较高.Linux是基于过程的结构,因此其助于不同的人参与不同过程的开发,.Linux 内核又是开放式的结构,它允许任何人对其进行修正、改进和完善.我们相信随着更多的Linux爱好者的加入,Linux一定会越来越完美。
参考文献:
[1]陈莉君.Linux 内核的分析及应用[J].西安邮电学院学报, 2001(3): 1-6.
[2]邹球.基于ARM2410嵌入式Linux内核的编译与移植[J].计算机工程应用技术, 1009-3044(2008)15-21157- 3.
[3]孙琼.嵌入式Linux应用程序开发详解[M].人民邮电出版社,2006(7).
[4]许信顺,贾智平.嵌入式Linux 应用编程[M.机械工业出版社,2007(1).
[5]毕伟宏.Linux 内核与内核编译,福建电脑[J].2007(2),16-18.