(1)修改编译器
首先要把Vivi中Makefile的有关编译的选项指向安装好的3.4.1版本的交叉编译工具链,将编译所需的Linux文件夹“UNUX-INCLUDE-DIR=”指向交叉编译器所在的文件夹“LINUX-INCLUDE-DIR=/usr/local/arm/3.4.1/include”,并将“CROSS-COMPILE=”项修改为“CROSS-COMPILE=/usr/local/arm/3.4.1/bin/arm-linux-”。
(2)修改启动参数
接着根据硬件平台的实际情况要修改Vivi中Flash分块情况。本系统将Flash划分成四个部分:第一部分用来存放系统的Vivi:第二部分用来存放Vivi以及Linux操作系统的启动参数;第三部分用来存放嵌入式Linux操作系统;最后一部分用来存放文件系统。具体的地址及块大小分配如表1所列。
修改完以上两项就可以对Vivi进行编译了,之后通过JTAG将生成的二进制代码烧写到Flash的第一部分,即完成了Vivi的移植。
3内核移植
内核移植和BootLoader移植一样要根据设计的硬件平台来进行。根据本嵌入式系统硬件平台的设计,需修改内核Makefile文件、设置Flash分区、配置与编译内核等,并完成网络设备、LCD以及USB等驱动的移植,下面简单介绍一下针对本硬件平台的相关移植工作。
(1)内核编译与移植
在交叉编译内核之前,要先对编译选项进行配置。执行“make menuconfig”指令,进人Syetem Type选项,选择对S3C2410系统板的支持,然后配置File System和Block device,接下来使用“make dep”指令设置依赖关系,之后便可以使用“make zImage”指令进行编译。编译内核交叉编译时间相对较长。最终会生成一个文件zImage,这就是编译成功后的ARM Linux内核文件。将编译好的内核镜像文件写入到Flash中,即完成了内核的移植。
(2)网络设备移植
系统中采用CS8900A作为网络芯片,最高支持10 Mb/s的传输率,它使用S3C2410的nGCS3作为片选线,IRQ_EINT9作为外部中断信号线。其驱动移植方法如下:
1)在linux/driver/net/arm目录下加入芯片的驱动程序文件cs8900.h和cs8900.c:
2)在SMDk2410_init函数中完成相应寄存器设置;在cs8900_probe()函数中对S3C2410的网络控制寄存器进行设置:加入_raw_writel(0x221ldll0,S3C2410_BWSCON);和_raw_writel(0x1f7c,S3C2410_BANKCON3);两个语句;
3)将网卡的物理地址(0x19000000)映射到vSMDK2410_ETH_IO所指向的虚拟地址上去,即在/arch/arm/mach-s3c2410/mach-smdk2410.c文件中的smdk2410_iodesc []结构数组中添加如下内容:{vSMDK2410_ETH_IO,0x19000000,SZ_1M,MTl_DEVICE};