标签:
本章主要讲解搭建Android系统移植开发环境的整个流程,首先讲解如何搭建嵌入式交叉开发环境,包括交叉编译环境,各种服务程序和应用程序的安装配置和使用:
1)GNU交叉工具链的下载
从ARM官方网站下载www.arm.linux.org.uk,可以从该站点下载2.95.3工具链:
ftp://ftp.arm.linux.org.uk/pub/armlinux/toolchain/cross-2.95.3.tar.bz2
2)cross-2.95.3.tar.bz2包的安装步骤a.#mkdir/usr/local/arm;b.#cpcross-2.95.3.tar.bz2/usr/local/arm;c.#tarjxvfcross-2.95.3.tar.bz2;
d.添加环境变量:在文件/etc/bashrc文件最后添加:
exportPATH=/usr/local/arm/2.95.3/bin:$PATH;e.工具链安装完成。
2.3 配置NFS服务的步骤
NFS服务就是将宿主机的一个目录通过网络可以被挂载到其他计算机上,并且作为其他计算机的一个目录,其目的就是让不同的机器、不同的操作系统之间可以彼此共享文件。NFS的使用分服务器端和客户端,其中服务器端提供要共享的文件,客户端通过挂载“mount”这一动作实现对共享文件的访问操作。下面主要介绍GEC2410开发板的Linux系统与虚拟机的Linux通过NFS实现文件共享的方法与步骤:
1)在虚拟机linux配置nfs服务,编辑nfs配置文件/etc/exports,设置共享目录如:vi/etc/exports,添加:/root/nfs_share3(rw,sync,no_root_squash)。rw表示允许下位机读写该目录,no_root_squash允许下位机以主机root用户身份挂载根文件系统。
2)在虚拟机linux启动NFS服务:(修改配置文件后就需要重新启动nfs服务)#/etc/init.d/nfsrestart或者用命令:#servicenfsrestart。
3)防火墙的关闭。选择系统设置->安全级别,将安全级别改为“无防火墙”。
4)用交叉网线连接PC机(虚拟机)与开发板,目的让两个linux处在同一个网络内。
开发板的ip地址是:192.168.2.223,因此配置虚拟机ip为192.168.2开头的ip地址,如可用下列命令配置:#ifconfigeth0192.168.2.23。
5)在开发板linux系统中挂载虚拟机linux的NFS共享目录,执行下列命令:#mkdir/tmp/nfs#mount-tnfs-onolock192.168.2.23:/root/nfs_share/tmp/nfs。
制作交叉调试器的方法
1)解压源码包:tarzxfgdb-6.0.tar.gz2)配置:cdgdb-6.0mkdirbuild2arm2linuxcdbuild2arm2linux
../configure--target=arm2linux--prefix=/usr/local/arm/2.95.3/3)编译:make
4)安装:makeinstall
在/usr/local/arm/2.95.3/bin/目录下生成arm2linux2gdb工具
5)编译生成针对arm处理器的gdbservera.进入gdb源代码包中的gdbserver目录cdgdb-6.0cdgdb/gdbserverb.配置生成gdbserverchmodu+xconfigure
CC=arm-linux-gcc./configure--host=arm2linux
接下来是U-Boot的编译与移植,然后讲解了Android系统下Linux内核的相关知识,最后讲了内核编译与移植的方法
(1)安装交叉编译器
(a)在/usr/local/目录下建立文件夹arm
(b)将arm-linux-gcc-3.4. l.tar.bz2拷贝到arm文件夹下 (c)# tar jxvf arm-linux-gcc-3.4. l.tar.bz2
//解压缩编译器,其中:jxvf中的j表示用bzip2来压缩/解压缩文件 (d)vi ~/.bash_profile //设置系统环境变量
//把arm-linux-gcc的路径/usr/local/arm/3.4.1/bin添加到PATH中:
【原来】 :PATH=$PATH:$HOME/bin
【修改为】:PATH=$PATH:/usr/local/arm/3.4.1/bin (2)解压缩内核代码并配置内核
(a)# tar jxvf linux2.6.14.tar.gz //解压缩内核,其中:zxvf中的z表示用gzip来压缩/解压缩文件 (b)# ls
(c)# cd linux2.6.14 三、修改makefile文件
内核的编译是根据makefile文件的指T进行的,Makefile文件来组织内核的各模块之间的
关系,记录了各个模块之间的相互联系和依赖关系。
我们首先修改linux-2.6.14的根目录下的makfile文件,我们须改的卞要内容是目标代码的
类型和为编译内核指定一个编译器。 我们注释掉以下内容: #ARCH?=$(SUBARCH) #CROSS COMPILE?= 增加如下内容: ARCH:= arm
CROSS COMPILE =/usr/local/arm/3.4.1/bin/arm-linux-
4.1 设置flash分区 4.1.1 指明分区信息
在arch/arm/mach-s3c2410/devs.c文件中:
[arm@localhost linux-2.6.14]$ vi arch/arm/mach-s3c2410/devs.c (1)增加头文件定义:
/***********add here***********/ #include <linux/mtd/partitions.h> #include <linux/mtd/nand.h> #include <asm/arch/nand.h>
/**************end add********/
(2)增加nand flash分区信息定义(分区信息和bootloader一致就可以) /***********add here***********/
static struct mtd_partition partition_ info[]={ [0]={ //128K
name: "boot", //name:代表分区名字
size: 0x20000, //size:代表flash分区大小(单位:字节)
offset: 0, //offset:代表flash分区的起始地址(相对干0x0的偏移) },
[1]={ //3M name: "kernel", size: 0x300000, offset: 0x20000, },
[2]={ //5M name: "rootfs", size: 0x500000, offset: 0x320000, },
[3]={ //1M name: "etc",
size: Ox 100000, offset: 0x820000. },
[4]= //11M name: user
size: Oxb00000, offset: Ox920000, }
[5]={
name: "qt",
size: Ox2b00000, offset: Ox 1420000, } };
/**************end add********/ (3)加入Nand Flash分区
/***********add here***********/ struct s3c2410_ nand_ set nandset={
nr_partitions: 6,/*the number of partitions*/ partitions: partition_ info,/*partition table*/ };
/**************end add********/
nr_partitions:指明partition_ info中定义的分区数目 partitions:分区信息表
(4).建立Nand Flash芯片支持 /***********add here***********/
struct s3c2410_platform_nand superlpplatform={
tacls:0, //tads, twrph0, twrphl的意思见S3C2410手册的6-3 twrph0:30, twrph 1:0,
sets: &nandset, //支持的分区信息集 nr_sets: 1, //分区集的个数 };
/**************end add********/
(5).加入Nand Flash芯片支持至Nand Flash驱动
另外,还要修改此文件中的s3c_device_nand结构体变量,添加对dev成员的赋值
struct platform_device s3c_device_nand={ .name="s3c2410-nand", /*Device name*/ .id=-1, /*Device ID*/
.num resources=ARRAY_ SIZE(s3c_nand_resource), //有几个寄存器区 .resource=s3c_nand_resource, /*Nand Flash Controller Registers*/寄存器区首地址
/***********add here***********//*Add the Nand Flash device*/ .dev={
.platform_data=&superlpplatform }
/**************end add********/ };
4.1.2 指定启动时初始化
kernel启动时依据我们对分区的设置进行初始配置 修改arch/arm/mach-s3c2410/mach-smdk2410.c文件 [arm@localhost linux-2.6.14]$ vi
arch/arm/mach-s3c2410/mach-smd1Q410.c
修改smdk2410_devices[].指明初始化时包括我们在前面所设置的flash分区信息
static struct platform- device *smd1Q410_ devices[]_ initdata={ &s3c_ device_ usb,
标签:
原文地址:http://www.cnblogs.com/lzy402682881/p/5434022.html