Kernel移植
1.任务一: 移植Linux2.6.34
移植步骤:
1.修改Makefile
ARCH = ARM
CROSS_TOOL=
2.使用已有配置单作为模板
make s3c2410_defconfig
-------------------------------选择了smdk2440作为移植的模板
3.修改时钟频率
4.修改机器码
#define MINI2440 1999
5.内核简单配置:
1.System Type
smdk2440/mini2440
2.Kernel Features
EABI
3.General Setup
内核版本
FriendlyARM-2.6.32.2
6.make zImage
------------------------------
7.NandFlash驱动移植并且分区
8.DM9000网卡驱动移植
9.Yaffs2文件系统移植
10.LCD及背光驱动移植
11.USB设备(键盘,鼠标,摄像头,无线网卡)驱动移植
12.UDA1341音频芯片驱动移植
2.任务二:了解内核选项
* 代表选中
M 代表选中为模块
3.任务三:使用u-boot启动编译好的内核
问题一:如何保证内核不覆盖u-boot的环境变量
修改分区:
bootloader: 0-0x40000
param: 0x40000 - 0x60000
kernel: 0x100000 - 0x600000
rootfs: 0x600000 - ~
问题二:修改zImage使其可以匹配u-boot
1.u-boot可以使用的内核是uImage,而不是zImage
2.uImage是使用u-boot/tools下的mkimage工具对zImage进行封装,而产生的内核镜像
3.uImage比zImage多了64个字节的头信息
4.bootm会读取uImage的64个字节的头信息,然后才开始调用内核入口函数
5.如何制作uImage
1.将u-boot/tools/mkimage工具拷贝到系统/bin或者/usr/bin目录
2.采用make uImage编译内核
注:make -- image
make zImage -- zImage
make uImage -- uImage
问题三:u-boot机器码和kernel的机器码不匹配,导致内核无法引导
1.修改机器码
u-boot: u-boot/board/mini2440/mini2440.c
gd->bd->bi_arch_number = MACH_TYPE_S3C2440;
kernel: linux-2.6/arch/arm/mach-s3c2440/mach-mini2440.c
MACHINE_START(MINI2440, "FriendlyARM Mini2440 development board")
2.解决方案
在u-boot/include/asm-arm/mach-types.h中,添加宏定义:
#define MACH_TYPE_MINI2440 1999
修改u-boot机器码
gd->bd->bi_arch_number = MACH_TYPE_MINI2440;