1、
2、
为了交叉编译内核,需要修改内核的底层Makefile:
找到下面的两行(192行左右):
修改为:
上面这样修改的意思是说我们的目标平台是arm,使用的交叉编译器的前缀是
arm-linux-.
1、
编译内核时会依赖于源代码目录下的.config 文件。如果没有这个文件,在make
menuconfig的时候,会默认按照i386的配置生成.config文件,而这不是我们需要的。因
此我们要有自己的.config文件。
由于我们的配置和SMDK2410开发板的类似,因此可以使用它的.config文件,只需要
把它的.config文件拷贝到源代码根目录下的.config文件即可:
找到struct mtd_partition smdk_default_nand_part[]这个结构体,并修改它。
改前的代码:
static struct mtd_partition smdk_default_nand_part[] = {
};
修改后的结构体如下面的代码所示:
static struct mtd_partition smdk_default_nand_part[] = {
};
这样就把我们的64M的NAND Flash分为四个区:
第一个区从0x00000000到0x00080000,大小为0.5M
第二个区从0x00080000到0x00280000,大小为2M
第三个区从0x00280000到0x00680000,大小为4M
第四个区从0x00680000到0x04000000,大小为57.5M
5、添加网卡驱动支持
开发板上配置了DM9000A网卡,内核已经有网卡驱动的实现代码,需要我们做一定的
配置。在arch/arm/mach-s3c2410/mach-smdk2410.c文件中添加如下内容:
static struct resource s3c_dm9ks_resource[] = {
};
struct platform_device s3c_device_dm9ks = {
};
然后,把网卡数据加入smdk2410_devices数组:
static struct platform_device *smdk2410_devices[] __initdata = {
&s3c_device_usb,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c,
&s3c_device_iis,
&s3c_device_dm9ks,
};
6、添加YAFFS文件系统支持
将我们提供的YAFFS的源代码yaffs2.tar.gz拷贝到linux-2.6.24.4的同级目
录下,解压该源码包,获得YAFFS源码:
然后进入yaffs2目录,运行./patch-ker.sh给内核打上补丁:
这样打好补丁以后,再做正确的配置,内核就可以支持YAFFS文件系统了。
7、
到现在,一个简单的内核就准备好了,我们还需要做一些配置,然后编译,内核才能
正常使用。
在内核源代码的根目录下运行 make menuconfig 命令,进入配置界面:
01、选择硬件系统
做如下选择:
System Type --->
S3C2410 Machines --->
[*] SMDK2410/A9M2410
[ ] IPAQ H1940
[ ] Acer N30
[ ] Simtec Electronics BAST (EB2410ITX)
[ ] NexVision OTOM Board
[ ] AML M5900 Series
[ ] Thorcom VR1000
[ ] QT2410
其他的:
S3C2400 Machines --->
S3C2412 Machines --->
S3C2440 Machines --->
S3C2442 Machines --->
S3C2443 Machines --->
上面的四个选项下的所有选项都不要选,以减小内核体积。
02、配置NAND Flash驱动
做如下选择:
Device Drivers --->
<*> Memory Technology Device (MTD) support --->
<*> NAND Device Support --->
<*> NAND Flash support forS3C2410/S3C2440 SoC
03、配置文件系统
做如下配置,以支持CRAMFS文件系统和YAFFS文件系统,为了调试方便,也
选上NFS文件系统的支持:
File systems --->
Miscellaneous filesystems --->
<*> YAFFS2 file system support
-*- 512 byte / page devices
[ ] Use older-style on-NAND data format with pageStatus byte
[ ] Lets Yaffs do its own ECC
-*- 2048 byte (or larger) / page devices
[*] Autoselect yaffs2 format
[ ] Disable lazy loading
[ ] Turn off wide tnodes
[ ] Force chunk erase check
[*] Cache short names in RAM
< > Journalling Flash File System v2 (JFFS2) support
<*> Compressed ROM file system support (cramfs)
[*] Network File Systems --->
--- Network File Systems
<*> NFS file system support
[*] Provide NFSv3 client support
[*] Provide client support for the NFSv3 ACL protocol
extension
[ ] Provide NFSv4 client support (EXPERIMENTAL)
[*] Allow direct I/O on NFS files
< > NFS server support
[*] Root file system on NFS
这样,内核的配置基本上就做好了。如果有兴趣,可以自己查看内核的其他配
置,并决定是否选择某项功能,以适合自己的开发板。
在内核源文件的根目录下运行make命令编译内核,编译完成后,会在内核linux-2.6.24.4/arch/arm/boot目录下生成zImage文件。这个文件就是内核的镜像文件。经过处理,可以启动。
8、
编译U-Boot时在源代码的tools目录下会生成一个mkimage可执行文件,用这个工具
可以对前面编译内核时生成的zImage进行处理,以供U-Boot启动。
cd linux-2.6.24.4/arch/arm/boot
cp /up-Star2410/kernel/linux-2.6.24.4/mkimage . 获取mkimage工具
./mkimage -A arm -T kernel -C none -O linux -a 0x30008000 -e 0x30008040 -d
zImage -n 'Linux-2.6.24' uImage
l
l
l
l
l
l
l
l
这样会在这个目录下生成uImage,把uImage放入主机的TFTP目录下,启动开发板,
用U-Boot的tftp命令下载uImage到SDRAM,并启动。