Chinaunix首页 | 论坛 | 博客
  • 博客访问: 471792
  • 博文数量: 98
  • 博客积分: 3265
  • 博客等级: 中校
  • 技术积分: 1227
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-23 00:29
文章分类

全部博文(98)

文章存档

2012年(6)

2011年(83)

2010年(9)

分类: LINUX

2011-04-24 22:43:18

1,安装交叉编译工具:arm-linux-gcc 4.3.2

2,下载内核:Linux-2.6.32.2

3,解压内核

4,指定平台和编译工具:
vi Makefile(技巧低行输入“/CROSS_COMPILE”即可跳转到CROSS_COMPILE处)
export KBUILD_BUILDHOST := $(SUBARCH)
ARCH  ?= arm 
CROSS_COMPILE ?= arm-linux- 

5,寻找配置文件arch/arm/configs/有大量配置参考文件
这里使用s3c2410_defconfig默认缺省配置文件,s3c2410_defconfig是SMDK2440的缺省配置文件

6,make s3c2410_defconfig(加载s3c2410_defconfig配置,最终在根目录下生成.config配置文件,保存了你的配置,内核编译以此为依据)

7,make (开始编译内核)

8,测试源码(将在arch/arm/boot/目录下生成zImage)
vmlinux, arch/arm/boot/compressed/vmlinux, 
arch/arm/boot/Image, arch/arm/boot/zImage 之间的区别
vmlinux 是一个elf格式的文件
Image 是经过objcopy 处理了的只包含内核代码,数据的一个文件, 
已经不是elf格式的了。此时还没有经过压缩
arch/arm/boot/compressed/vmlinux 是经过压缩的Image和加入了解压头的elf格式的文件
arch/arm/boot/zImage 是经过objcopy处理了的可以直接下到对应的地址执行的内核镜像

9,机器码的确定:修改bootloader传入的机器码=内核中平台的机器码
内核在启动时,是通过 bootloader 传入的机器码(MACH_TYPE)确定应启动哪种目标平台的, 
mini2440申请了自己的机器码为 1999,它位于linux-2.6.32.2/arch/arm/tools/mach_types文件中
在U-boot/include/asm-arm/mach-types.h中可以看到mini2440的机器码定义

10,修改时钟源频率
arch/arm/mach-s3c2440/mach-smdk2440.c 复制一份。命名为mach-mini2440.c ,
找到 MACHINE_START(S3C2440, "SMDK2440") ,修改为
MACHINE_START(MINI2440, "FriendlyARM Mini2440 development board")。
tatic void __init smdk2440_map_io(void)函数中,
把其中的 16934400改为12000000


9,具体配置:make menuconfig

阅读(4199) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~