分类: 嵌入式
2010-10-16 23:45:24
移植内核前,保证你已经装上了Linux系统,建立好了交叉编译环境,我用的是虚拟机,装的Redhat9.0系统,交叉编译工具用的是友善之臂的arm-linux-gcc-
开始移植Linux内核了,下面是我我使用的内核和文件系统,以及所用到的工具及获取方法:
1、Linux系统
我是在虚拟机上安装的Redhat9.0。XP系统下虚拟机设置的共享目录是D:\share,对应的Linux系统的目录是/mnt/hgfs/share。我将下面准备的压缩包和文件都统一放到该目录下。
2、Linux内核
到主页,进入该网站中链接FTP ftp://ftp.kernel.org/pub/,在里面进入文件夹“linux->kernel->v
3、交叉编译工具链
使用友善之臂提供的arm-linux-
4、yaffs2代码
进入,点击“Download GNU tarball”,下载后出现cvs-root.tar.gz压缩包。
5、busybox-
从下载busybox,这里下载的是busy busybox-
6、根文件系统制作工具
到友善之臂 网站下载根文件系统制作工具mkyaffs2image.tgz。
7、友善之臂的根文件系统
在制作根文件系统时,需要用到链接库,为保证链接库能用直接用友善之臂的根文件系统root_qtopia中的链接库lib,到友善之臂网站 下载root_qtopia.tgz。
这些文件都下载到D:\share中,通过虚拟机进入Redhat9.0系统,进入/mnt/hgfs/share目录便可访问这些与XP共享的文件。
8、硬件平台
友善之臂的mini2440
1、解压内核源码
mkdir /opt/studyarm
cd /mnt/hgfs/share
tar –jxvf linux-
、 进入内核目录,修改makefile,并对内核进行默认配置进行修改
193行,修改
ARCH ?=arm
CROSS_COMPILE ?=arm-linux-
、 修改平台输入时钟
找到内核源码arch/arm/mach-s
、 修改machine名称(可以不改)
修改文件arch/arm/mach-s3c2440/mach-smdk2440.c,在文件中找到MACHINE_START( ),修改为MACHINE_START(S3C2440, “Study-S3C2440”)。
、 修改Nand flash分区信息
修改文件kernel.git/arch/arm/plat-s3c24xx/common-smdk.c。
第一,修改分区信息:
static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = "bootloader",
.offset = 0x00000000,
.size = 0x00030000,
},
[1] = {
.name = "kernel",
.offset = 0x00050000,
.size = 0x00200000,
},
[2] = {
.name = "root",
.offset = 0x00250000,
.size = 0x03dac000,
}
};
第二,再修改s
…
.tacls = 0,
.twrph0 = 30,
.twrph1=0,
…
};
6、 修改LCD背光
修改文件/arch/arm/mach-s3c2440/mach-smdk2440.c,因为友善的3.5寸液晶的背光控制是由S3C2440的GPG4引脚来控制的,故下面的改动将开启背光。
static void __init smdk2440_machine_init(void)
{
s
platform_add_devices();
s
s
}
、 LCD参数修改
这里用的是NEC3.5英寸屏液晶屏,大小为320x240,需要修改修改文件arch/arm/mach-s
static struct s
{
…
.right_margin = 37,
.hsync_len = 6,
.upper_margin =2,
.lower_margin = 6,
.vsync_len =2,
};
static struct s
…
.default_display =0
.gpccon = 0xaa955699,
.gpccon_mask = 0xffc003cc,
.gpcup = 0x0000ffff,
.gpcup_mask = 0xffffffff,
.gpdcon = 0xaa95aaa1,
.gpdcon_mask = 0xffc0fff0,
.gpdup = 0x0000faff,
.gpdup_mask = 0xffffffff,
.lpcsel = 0xf82,
};
、 给内核打yaffs2文件系统的补丁
cd /mnt/hgfs/share
tar –zxvf /mnt/hgfs/share/cvs-root.tar.gz –C /opt/studyarm
cd /opt/stdudyarm/cvs/yaffs2/
./patch-ker.sh c /opt/studyarm/linux-
上面命令完成下面三件事情:
(1) 修改内核fs/Kconfig
增加一行:source "fs/yaffs2/Kconfig"
(2) 修改内核fs/Kconfig
增加一行:ojb-$(CONFIG_YAFFS_FS) +=yaffs2/
(3) 在内核fs/目录下创建yaffs2目录
将yaffs2源码目录下面的Makefile.kernel文件复制为内核fs/yaffs2/Makefie;
将yaffs2 源码目录的Kconfig文件复制到内核fs/yaffs2目录下;
将yaffs2源码目录下的*.c *.h文件复制到内核fs/yaffs2目录下.
、修改S
由于Bootloader传递给Linux内核的机器号为782,为与Bootloader传递参数一致,修改 arch/arm/tools/math-types文件。
s
修改为:
s
另外,还可以不修改内核中的S3C2440机器号,只需修改修改Bootloader传递给内核的参数中的机器号就可以了。在VIVI中菜单中,按s,再按s,输入mach_type,回车,输入362,w,保存。