开发板:TQ2440 V2.0核心板 ,256MB NAND ,2MB NOR,64MB SDRAM,东华3.5‘屏...
操作系统:Ubuntu 12.04 lts
编译器:arm-linux-gcc-4.4.3(friendlyarm)
uboot:tq官方u-boot-1.1.6_W35_20100601.bin
kernel源码:linux-3.2.18( 通过3.2.17升级)
rootfs:目前是nfs,基于busybox-1.20.0构建
串口调试:minicom (ubuntu version)
TFTP服务器:TFTPD(ubuntu verison)
USB下载工具:dwn2(手动编译)
工作目录:/opt/yee/
用户组&用户:yee:yee
edit.
----------------------------
一.让你的板子飞起来
1.ubuntu下建立交叉编译环境:
arm-linux-gcc-4.4.3.tgz 安装最终编译路径:
/opt/yee/toolchain/4.4.3/bin/........
添加环境变量:
$ vim /home/yee/.bashrc,在末尾行添加
PATH=$PATH:/opt/yee/toolchain/4.4.3/bin
2.安装内核源代码:
$ cd /opt/yee
$ tar -jxvf linux-3.2.17.tar.bz2
edit: 后续更新到3.2.18:
将patch-3.2.18.bz2,patch-3.2.17.bz2放置到/opt/yee
$ cd linux-3.2.17
$ bzcat ../patch-3.2.17.bz2|patch -p1 -R #降级到patch-3.2
$ bzcat ../patch-3.2.18.bz2|patch -p1 #升级到3.2.18
$ cd ../
$ mv linux-3.2.17 linux-3.2.18
3.修改Makefile
a. arch/arm/boot/目录Makefile中添加如下的一行
$(call if_changed,objcopy)
@cp -f arch/arm/boot/zImage zImage.bin
@echo ' Kernel: $@ is ready'
b. 根目录Makefile
大约195行
ARCH ?= arm#$(SUBARCH)
CROSS_COMPILE ?= arm-linux-#$(CONFIG_CROSS_COMPILE:"%"=%)
4.修改时钟参数
$ vim arch/arm/mach-s3c2440/mach-smdk2440.c
static void __init smdk2440_map_io(void)
{
s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
s3c24xx_init_clocks(12000000);
s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
}
3.修改机器码和uboot里一致。
$ vim arch/arm/tools/mach-types
在内核文件arch/arm/mach-s3c2440/mach-smdk2440.c中的 MACHINE_START(S3C2440,”SMDK2440”)中要使用该机器码,同时它还应该与uboot中的机器码一致。
s3c2440 ARCH_S3C2440 S3C2440 168
4.修改NAND FLASH分区表,同时禁止ecc校验。
$ vim arch/arm/plat-s3c24xx/common-smdk.c
修改下面两个结构体
分区表:0-256KB用于uboot,256KB-2MB用于uboot的环境变量的存放,2MB-5MB用于内核,5MB以后用于根文件系统。
这个分区表也要和uboot一致。
注意:MTDPART_SIZ_FULL 在include/linux/mtd/partitions.h理有定义,MTDPART_SIZ_FULL 代表所有的可用空间。
#define MTDPART_SIZ_FULL (0)
/* NAND parititon from 2.4.18-swl5 */
static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = "dengwy_uboot",
.size = 0x00040000,
.offset = 0x00000000,
},
[1] = {
.name = "dengwy_kernel",
.offset = 0x00200000,
.size = 0x00300000,
},
[2] = {
.name = "dengwy_yaffs2",
.offset = 0x00500000,
.size = MTDPART_SIZ_FULL,
}
};
static struct s3c2410_nand_set smdk_nand_sets[] = {
[0] = {
.disable_ecc = 1,//禁止ecc校验
.name = "NAND",
.nr_chips = 1,
.nr_partitions = ARRAY_SIZE(smdk_default_nand_part),
.partitions = smdk_default_nand_part,
},
};
5.添加内核yaffs支持
在工作目录下用git命令下载最新的yaffs
git clone git://www.aleph1.co.uk/yaffs2
完成后打补丁,进入下载的yaffs目录,
$ ./patch-ker.sh c m ../linux-3.2.18
6.配置内核
获取默认配置。在内核源码根目录下:
$ cp arch/arm/configs/s3c2410_defconfig .config
用make menuconfig配置linux内核,注意配置。
7.编译内核
make zImage
成功后会在根目录生产一个zImage.bin
下载测试。