这样,本系统的BootLoader就设计完成了,下面就可以进行Linux内核移植。
4 Linux内核移植
Linux内核主要由5个子系统构成:
a)进程调度(Process Scheduler):负责控制进程对CPU的使用。
b)内存管理(Memory Manager):标准Linux的内存管理支持虚拟内存,进程代码、数据和堆栈的总量可以超过实际内存的大小。
c)虚拟文件系统(Virtual File System):隐藏了不同硬件的具体细节,为所有设备提供统一的接口。
d)网络接口(Network Interface):负责支持标准的网络通信协议和各种网络硬件设备。
e)进程间通信(Inter-Process Communica-tion):支持进程间各种通信机制。
根据嵌入式系统的特点,要使嵌入式Linux系统具备一定的功能且保持小型化,应包括启动加载程序、内核、初始化进程,以及硬件驱动程序、文件系统、必要的应用程序等。
不管是哪一款嵌入式处理器,完成移植工作就要修改所有与体系结构有关的代码,主要指内核人口、处理器初始化、I/O口映射等。具体操作如下:
(1)修改配置文件
a)打开根目录下的Makefile文件,指定目标平台ARCH=arm;指定交叉编译器CROSS_COMPILE=arm-linux-gcc;
b)打开/arch/arm目录下的Makefile文件,添加内核起始运行地址,即image.ram应下载的位置,该位置一般在RAM区起始地址偏移0x8000处;
c)打开/arch/arm/boot目录下的Makefile文件,指定Bootloader的压缩内核解压后数据的输出地址。
(2)编译Linux内核
在完成上述工作后,开始编译Linux内核,生成目标代码。在内核源代码目录下依次键入以下命令:
a)make clean:清除以前构造内核时生成的所有目标文件、模块和临时文件;
b)make dep:搜索Linux输出与源代码之间的依赖关系,并以此生成依赖文件;
c)make menuconfig:调用菜单式的配置内核界面,内核配置的选项非常多,根据自己系统的具体情况选择合理的配置,在内核配置时选上相应型号的硬件;
d)make zImage:编译内核,生成压缩的Linux内核目标代码zImage文件;
e)make modules:编译块模块驱动程序,凡是在menuconfig中被选为的都会在这条命令运行时被编译。
至此,已编译好能在本系统上运行的Linux内核。
(3)创建JFFS2文件系统
文件系统是Linux系统的重要组成部分。本系统使用mkfs.jffs2工具创建JFFS2文件系统。首先建立/bin、/sbin等目录,然后复制命令工具到/bin文件夹,复制系统控制程序到/sbin目录下,复制应用程序运行时所需的库到/lib,库文件可从PC机的交叉编译工具安装目录下复制。最后键人命令:mkfs.jffs2-o jffs2root.jffs2,生成JFFS2根文件系统。
上述工作完成后,将BootLoader、Linux内核、文件系统烧写到TMS320DM*6的Flash中,这样就能运行Linux系统了。