一、准备工作
修改文件/etc/bash.bashrc添加如下内容
export PATH=$PATH:/home/linux/toolchain/bin
二、移植2. 配置内核
make menuconfig
Kernel Features --->
Kernel Features ---> //使用EABI工具链这两项是必须选择的
[*] Use the ARM EABI to compile the kernel
[*] Allow old ABI binaries to run with this kernel (EXPERIMENTAL) (NEW)
3、修改MTD分区
文件: arch/arm/plat-s3c24xx/common-smdk.c
需要和bootloader中的分区信息相同(256M),否则,启动时出错。
static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = "bootloader u-boot-2010.03",
.size = SZ_1M,
.offset = 0,
},
[1] = {
.name = "kernel linux-2.6.35",
.offset = SZ_1M,
.size = SZ_4M,
},
[2] = {
.name = "rootfs busybox-1.17.3",
.offset = SZ_1M * 5,
.size = SZ_8M,
},
[3] = {
.name = "usrfs",
.offset = SZ_1M * 13,
.size = SZ_1M * 51,
},
};
配置内核
Device Drivers --->
<*> Memory Technology Device (MTD) support --->
<*> NAND Device Support --->
<*> NAND Flash support for Samsung S3C SoCs
有几点需要注意:
a、此信息需根据自己的实际分区信息修改
b、这里文件系统所在的分区标号必须与板子上root_fs的号码相同 ,否则启动会出错。因此这里不需要将所有
的分区信息都写进来,只要位置对应即可!
4、下面,开始配置内核。
进入linux-2.6.35目录,把s3c2410的默认配置写入config文件。
make s3c2410_defconfig
make menuconfig
配置文件系统选项
配置yaffs2文件系统
修改配置如下:
File systems --->
[*] Miscellaneous filesystems --->
<*> YAFFS2 file system support
-*- 512 byte / page devices
-*- 2048 byte (or larger) / page devices
[*] Autoselect yaffs2 format
[*] Cache short names in RAM
如果现在编译内核,下载到开发板中,内核就可以正常启动了.有了雏形,继续移植设备驱动。
这里,内核选项*代表编译至内核,M代表编译为模块 。
5、移植cs8900驱动
将cs8900.c和cs8900.h两个文件拷贝到linux-2.6.35/drivers/net/arm/下修改Kconfig添加cs8900内核配置项
修改linux-2.6.35/drivers/net/arm/Kconfig添加如下内容:
config S3C2410_CS8900
tristate “CS8900 support”
depends on NET_ETHERNET && ARM && ARCH_SMDK2410
---help---
support for cs8900 chipset base Ethernet cards, if you have a network card of this type.
、修改Makefile添加内核编译配置
修改driver/net/arm/Makefile添加如下内容:
obj-$(CONFIG_S3C2410_CS8900) += cs8900.o
、添加地址映射定义
修改arch/arm/mach-s3c2410/include/mach/map.h文件,添加如下内容:
/* CS8900a */
#define pSMDK2410_ETH_IO __phys_to_pfn(0x19000000)
#define vSMDK2410_ETH_IO 0xE0000000
#define SMDK2410_ETH_IRQ IRQ_EINT9
、添加平台代码
修改arch/arm/mach-s3c2410/mach-smdk2410.c文件,添加如下内容:
static struct map_desc smdk2410_iodesc[] __initdata = {
/* nothing here yet */
{vSMDK2410_ETH_IO, pSMDK2410_ETH_IO, SZ_1M, MT_DEVICE} //添加内容
};
、配置内核,使之支持cs8900网卡
$ make menuconfig
Device Drivers --->
[*] Network device support --->
[*] Ethernet (10 or 100Mbit) --->
<*> CS8900 support
6、移植看门狗
修改配置
Device Drivers --->
[*] Watchdog Timer Support --->
<*> S3C2410 Watchdog
最后:make zImage
最后编译出来的zImage就2.0M左右。